From e8c3d92696654c8f0e2afe917a74c24df9255080 Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 30 Nov 2018 00:10:59 -0600 Subject: [PATCH] Fix #3977: DeviantArt: Support new wixmp.com urls. --- app/logical/sources/strategies/deviant_art.rb | 15 +++++++++- test/unit/sources/deviantart_test.rb | 28 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/app/logical/sources/strategies/deviant_art.rb b/app/logical/sources/strategies/deviant_art.rb index 67fe3d4c4..84aa1efea 100644 --- a/app/logical/sources/strategies/deviant_art.rb +++ b/app/logical/sources/strategies/deviant_art.rb @@ -18,6 +18,8 @@ # * http://fc09.deviantart.net/fs22/o/2009/197/3/7/37ac79eaeef9fb32e6ae998e9a77d8dd.jpg # * http://pre06.deviantart.net/8497/th/pre/f/2009/173/c/c/cc9686111dcffffffb5fcfaf0cf069fb.jpg # +# * https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/intermediary/f/8b472d70-a0d6-41b5-9a66-c35687090acc/d23jbr4-8a06af02-70cb-46da-8a96-42a6ba73cdb4.jpg/v1/fill/w_786,h_1017,q_70,strp/silverhawks_quicksilver_by_edsfox_d23jbr4-pre.jpg +# # Page URLs: # # * https://www.deviantart.com/noizave/art/test-post-please-ignore-685436408 @@ -41,7 +43,12 @@ module Sources ARTIST = %r{(?[a-z0-9_-]+?)}i DEVIATION_ID = %r{(?[0-9]+)}i - ASSET = %r{\Ahttps?://#{ASSET_SUBDOMAINS}\.deviantart\.net/.+/#{TITLE}(?:_by_#{ARTIST}(?:-d(?\w+))?)?\.}i + DA_FILENAME = %r{#{TITLE}(?:_by_#{ARTIST}(?:-d(?[a-z0-9]+))?)?\.}i + WIX_FILENAME = %r{#{TITLE}_by_#{ARTIST}_d(?[a-z0-9]+)-[a-z0-9]+\.}i + + DA_ASSET = %r{\Ahttps?://#{ASSET_SUBDOMAINS}\.deviantart\.net/.+/#{DA_FILENAME}}i + WIX_ASSET = %r{\Ahttps?://images-wixmp-ed30a86b8c4ca887773594c2\.wixmp\.com/.+/#{WIX_FILENAME}}i + ASSET = Regexp.union(DA_ASSET, WIX_ASSET) PATH_ART = %r{\Ahttps?://www\.deviantart\.com/#{ARTIST}/art/#{TITLE}-#{DEVIATION_ID}\z}i SUBDOMAIN_ART = %r{\Ahttps?://#{ARTIST}\.deviantart\.com/art/#{TITLE}-#{DEVIATION_ID}\z}i @@ -57,6 +64,11 @@ module Sources "Deviant Art" end + def match? + return false if parsed_url.nil? + parsed_url.domain.in?(domains) || parsed_url.host == "images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com" + end + def canonical_url if self.class.deviation_id_from_url(image_url).present? || page_url.blank? image_url @@ -80,6 +92,7 @@ module Sources elsif api_deviation.present? src = api_deviation.dig(:content, :src) src = src.gsub(%r!\Ahttps?://orig\d+\.deviantart\.net!i, "http://origin-orig.deviantart.net") + src = src.gsub(%r!/v1/(fit|fill)/.*\z!i, "") [src] else raise "Couldn't find image url" # this should never happen diff --git a/test/unit/sources/deviantart_test.rb b/test/unit/sources/deviantart_test.rb index f7780a5b5..60667dfc1 100644 --- a/test/unit/sources/deviantart_test.rb +++ b/test/unit/sources/deviantart_test.rb @@ -38,8 +38,8 @@ module Sources should "get the image url" do @site = Sources::Strategies.find("https://noizave.deviantart.com/art/test-no-download-697415967") - assert_equal(["https://img00.deviantart.net/56ee/i/2017/219/2/3/test__no_download_by_noizave-dbj81lr.jpg"], @site.image_urls) - assert_equal(@site.image_url, @site.canonical_url) + assert_equal(["https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/intermediary/f/83d3eb4d-13e5-4aea-a08f-8d4331d033c4/dbj81lr-3306feb1-87dc-4d25-9a4c-da8d2973a8b7.jpg"], @site.image_urls) + assert_equal("https://www.deviantart.com/noizave/art/test-no-download-697415967", @site.canonical_url) end end @@ -162,7 +162,29 @@ module Sources should "work" do @site = Sources::Strategies.find(@url, @ref) - assert_equal("http://origin-orig.deviantart.net/66c1/f/2009/173/c/c/cc9686111dcffffffb5fcfaf0cf069fb.jpg", @site.image_url) + assert_equal("https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/intermediary/f/8b472d70-a0d6-41b5-9a66-c35687090acc/d23jbr4-8a06af02-70cb-46da-8a96-42a6ba73cdb4.jpg", @site.image_url) + assert_equal("edsfox", @site.artist_name) + assert_equal("https://www.deviantart.com/edsfox", @site.profile_url) + assert_equal("https://www.deviantart.com/edsfox/art/Silverhawks-Quicksilver-126872896", @site.page_url) + assert_equal(@site.page_url, @site.canonical_url) + assert_equal([@artist], @site.artists) + assert_nothing_raised { @site.to_h } + end + end + end + + context "The source for a images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com sample image" do + setup do + @url = "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/intermediary/f/8b472d70-a0d6-41b5-9a66-c35687090acc/d23jbr4-8a06af02-70cb-46da-8a96-42a6ba73cdb4.jpg/v1/fill/w_786,h_1017,q_70,strp/silverhawks_quicksilver_by_edsfox_d23jbr4-pre.jpg" + @ref = "https://www.deviantart.com/edsfox/art/Silverhawks-Quicksilver-126872896" + @artist = FactoryBot.create(:artist, name: "edsfox", url_string: "https://edsfox.deviantart.com") + end + + context "without a referer" do + should "work" do + @site = Sources::Strategies.find(@url, @ref) + + assert_equal("https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/intermediary/f/8b472d70-a0d6-41b5-9a66-c35687090acc/d23jbr4-8a06af02-70cb-46da-8a96-42a6ba73cdb4.jpg", @site.image_url) assert_equal("edsfox", @site.artist_name) assert_equal("https://www.deviantart.com/edsfox", @site.profile_url) assert_equal("https://www.deviantart.com/edsfox/art/Silverhawks-Quicksilver-126872896", @site.page_url)