From 6f4ca75bb1d846cff713318fe067c65ee6f29268 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Tue, 16 Apr 2019 13:55:26 -0700 Subject: [PATCH] try to handle deivantart images hosted on images-wixmp better --- app/logical/sources/strategies/deviant_art.rb | 14 +++++++++----- test/unit/sources/deviantart_test.rb | 10 +++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/logical/sources/strategies/deviant_art.rb b/app/logical/sources/strategies/deviant_art.rb index 10fc817ed..85e0c0607 100644 --- a/app/logical/sources/strategies/deviant_art.rb +++ b/app/logical/sources/strategies/deviant_art.rb @@ -84,15 +84,19 @@ module Sources # work is downloadable elsif api_deviation[:is_downloadable] src = api_download[:src] - src.gsub!(%r!\Ahttps?://s3\.amazonaws\.com/!i, "https://") - src.gsub!(/\?.*\z/, "") # strip s3 query params - src.gsub!(%r!\Ahttps://origin-orig\.deviantart\.net!, "http://origin-orig.deviantart.net") # https://origin-orig.devianart.net doesn't work + src.sub!(%r!\Ahttps?://s3\.amazonaws\.com/!i, "https://") + src.sub!(/\?.*\z/, "") # strip s3 query params + src.sub!(%r!\Ahttps://origin-orig\.deviantart\.net!, "http://origin-orig.deviantart.net") # https://origin-orig.devianart.net doesn't work [src] # work isn't downloadable, or download size is same as regular size. 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, "") + if deviation_id.to_i <= 790677560 && src =~ /^https:\/\/images-wixmp-/ + src = src.sub(%r!(/f/[a-f0-9-]+/[a-f0-9-]+)!, '/intermediary\1') + src = src.sub(%r!/v1/(fit|fill)/.*\z!i, "") + end + src = src.sub(%r!\Ahttps?://orig\d+\.deviantart\.net!i, "http://origin-orig.deviantart.net") + src = src.sub(%r!q_\d+!, "q_100") [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 60667dfc1..5e6a74340 100644 --- a/test/unit/sources/deviantart_test.rb +++ b/test/unit/sources/deviantart_test.rb @@ -38,7 +38,7 @@ module Sources should "get the image url" do @site = Sources::Strategies.find("https://noizave.deviantart.com/art/test-no-download-697415967") - 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_match(%r!^https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/intermediary/f/83d3eb4d-13e5-4aea-a08f-8d4331d033c4/dbj81lr-3306feb1-87dc-4d25-9a4c-da8d2973a8b7.jpg!, @site.image_urls[0]) assert_equal("https://www.deviantart.com/noizave/art/test-no-download-697415967", @site.canonical_url) end end @@ -162,7 +162,7 @@ module Sources 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_match(%r!^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) @@ -173,18 +173,18 @@ module Sources end end - context "The source for a images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com sample image" do + context "The source for a images-wixmp-.* 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 + context "with 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_match(%r!^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)