From a68ff3c34712a17d0264726f3074152175d98fc3 Mon Sep 17 00:00:00 2001 From: evazion Date: Mon, 5 Jun 2017 17:08:05 -0500 Subject: [PATCH 1/5] artstation: accept www.artstation.com/artwork/foo-bar-baz style urls. --- app/logical/sources/strategies/art_station.rb | 5 ++++- test/unit/sources/art_station_test.rb | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/logical/sources/strategies/art_station.rb b/app/logical/sources/strategies/art_station.rb index a141cc98b..be73b183e 100644 --- a/app/logical/sources/strategies/art_station.rb +++ b/app/logical/sources/strategies/art_station.rb @@ -6,8 +6,11 @@ module Sources::Strategies self.project_id(url).present? end + # https://www.artstation.com/artwork/04XA4" + # https://dantewontdie.artstation.com/projects/YZK5q" + # https://www.artstation.com/artwork/cody-from-sf" def self.project_id(url) - if url =~ %r!\Ahttps?://\w+\.artstation\.com/(?:artwork|projects)/(?[a-z0-9]+)\z!i + if url =~ %r!\Ahttps?://\w+\.artstation\.com/(?:artwork|projects)/(?[a-z0-9-]+)\z!i $~[:project_id] else nil diff --git a/test/unit/sources/art_station_test.rb b/test/unit/sources/art_station_test.rb index ad149f402..a3a329e4e 100644 --- a/test/unit/sources/art_station_test.rb +++ b/test/unit/sources/art_station_test.rb @@ -58,5 +58,17 @@ module Sources assert_equal("From Gantz.", @site.artist_commentary_desc) end end + + context "The source site for a www.artstation.com/artwork/$slug page" do + setup do + @site = Sources::Site.new("https://www.artstation.com/artwork/cody-from-sf") + @site.get + end + + should "get the image url" do + url = "https://cdna.artstation.com/p/assets/images/images/000/144/922/original/cassio-yoshiyaki-cody2backup2-yoshiyaki.jpg?1406314198" + assert_equal(url, @site.image_url) + end + end end end From 215569fbe01c45de8dd9e35a2d2c9069c6e2ceb3 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 6 Jun 2017 13:01:49 -0500 Subject: [PATCH 2/5] artstation: fix source to page url after download. --- app/logical/downloads/file.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/logical/downloads/file.rb b/app/logical/downloads/file.rb index 2d9d39c5c..ffd2b6809 100644 --- a/app/logical/downloads/file.rb +++ b/app/logical/downloads/file.rb @@ -57,7 +57,7 @@ module Downloads def after_download(src) src = fix_twitter_sources(src) if options[:referer_url].present? - src = set_source_to_referer(src) + src = set_source_to_referer(src, options[:referer_url]) end src end @@ -137,12 +137,13 @@ module Downloads end end - def set_source_to_referer(src) + def set_source_to_referer(src, referer) if Sources::Strategies::Nijie.url_match?(src) || Sources::Strategies::Twitter.url_match?(src) || Sources::Strategies::Tumblr.url_match?(src) || - Sources::Strategies::Pawoo.url_match?(src) - strategy = Sources::Site.new(src, :referer_url => options[:referer_url]) + Sources::Strategies::Pawoo.url_match?(src) || + Sources::Strategies::ArtStation.url_match?(src) || Sources::Strategies::ArtStation.url_match?(referer) + strategy = Sources::Site.new(src, :referer_url => referer) strategy.referer_url else src From b1171306a182444152d37e912e7a608d48d2e592 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 6 Jun 2017 13:07:10 -0500 Subject: [PATCH 3/5] artstation: include only images in image_urls. --- app/logical/sources/strategies/art_station.rb | 3 ++- test/unit/sources/art_station_test.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/logical/sources/strategies/art_station.rb b/app/logical/sources/strategies/art_station.rb index be73b183e..554fb0b44 100644 --- a/app/logical/sources/strategies/art_station.rb +++ b/app/logical/sources/strategies/art_station.rb @@ -54,7 +54,8 @@ module Sources::Strategies @json = JSON.parse(resp.body) @artist_name = json["user"]["username"] @profile_url = json["user"]["permalink"] - @image_urls = json["assets"].map do |x| + images = json["assets"].select { |asset| asset["asset_type"] == "image" } + @image_urls = images.map do |x| y, _, _ = image_url_rewriter.rewrite(x["image_url"], nil) y end diff --git a/test/unit/sources/art_station_test.rb b/test/unit/sources/art_station_test.rb index a3a329e4e..9361f10cd 100644 --- a/test/unit/sources/art_station_test.rb +++ b/test/unit/sources/art_station_test.rb @@ -70,5 +70,17 @@ module Sources assert_equal(url, @site.image_url) end end + + context "The source site for an ArtStation gallery" do + setup do + @site = Sources::Site.new("https://www.artstation.com/artwork/BDxrA") + @site.get + end + + should "get only image urls, not video urls" do + urls = %w[https://cdnb.artstation.com/p/assets/images/images/006/037/253/original/astri-lohne-sjursen-eva.jpg?1495573664] + assert_equal(urls, @site.image_urls) + end + end end end From edd02c4019149b3fa60b3dfda7f2713368578ca5 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 6 Jun 2017 13:08:06 -0500 Subject: [PATCH 4/5] artstation: normalize to www.artstation.com/artwork/$id for sidebar. --- app/models/post.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/models/post.rb b/app/models/post.rb index 2e49b9384..6cc0b6477 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -528,6 +528,11 @@ class Post < ActiveRecord::Base # https://yande.re/sample/ceb6a12e87945413a95b90fada406f91/.jpg when %r{\Ahttps?://(?:ayase\.|yuno\.|files\.)?yande\.re/(?:image|jpeg|sample)/(?[a-z0-9]{32})(?:/yande\.re.*|/?\.(?:jpg|png))\Z}i "https://yande.re/post?tags=md5:#{$~[:md5]}" + + # https://gfee_li.artstation.com/projects/XPGOD + # https://gfee_li.artstation.com/projects/asuka-7 + when %r{\Ahttps?://\w+\.artstation.com/(?:artwork|projects)/(?[a-z0-9-]+)\z/}i + "https://www.artstation.com/artwork/#{$~[:project_id]}" when %r{\Ahttps?://(?:o|image-proxy-origin)\.twimg\.com/\d/proxy\.jpg\?t=(\w+)&}i str = Base64.decode64($1) From 39bd1416676656b8f4b0167f6924a904efbe08bd Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 6 Jun 2017 22:05:35 -0500 Subject: [PATCH 5/5] artstation: fix fetch source data for image urls. Fixes 'Fetch source data' when uploading an image url and the referer url is available: * https://danbooru.donmai.us/uploads/new?url=https://cdna.artstation.com/p/assets/images/images/006/029/978/large/amama-l-z.jpg&ref=https://www.artstation.com/artwork/4BWW2 --- app/logical/sources/site.rb | 6 +++--- test/unit/sources/art_station_test.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/logical/sources/site.rb b/app/logical/sources/site.rb index 6ff87d8c6..f86944a68 100644 --- a/app/logical/sources/site.rb +++ b/app/logical/sources/site.rb @@ -14,12 +14,12 @@ module Sources [Strategies::PixivWhitecube, Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::ArtStation, Strategies::Nijie, Strategies::Twitter, Strategies::Tumblr, Strategies::Pawoo] end - def initialize(url, options = {}) + def initialize(url, referer_url: nil) @url = url Site.strategies.each do |strategy| - if strategy.url_match?(url) - @strategy = strategy.new(url, options[:referer_url]) + if strategy.url_match?(url) || strategy.url_match?(referer_url) + @strategy = strategy.new(url, referer_url) break end end diff --git a/test/unit/sources/art_station_test.rb b/test/unit/sources/art_station_test.rb index 9361f10cd..2fb3ef76f 100644 --- a/test/unit/sources/art_station_test.rb +++ b/test/unit/sources/art_station_test.rb @@ -71,6 +71,19 @@ module Sources end end + context "The source site for a http://cdna.artstation.com/p/assets/... url" do + setup do + @url = "https://cdna.artstation.com/p/assets/images/images/006/029/978/large/amama-l-z.jpg" + @ref = "https://www.artstation.com/artwork/4BWW2" + @site = Sources::Site.new(@url, referer_url: @ref) + @site.get + end + + should "fetch the source data" do + assert_equal("amama", @site.artist_name) + end + end + context "The source site for an ArtStation gallery" do setup do @site = Sources::Site.new("https://www.artstation.com/artwork/BDxrA")