Merge pull request #3116 from evazion/fix-artstation-project-urls

Fix #3108: support https://$artist.artstation.com/projects/$id urls
This commit is contained in:
Albert Yi
2017-06-05 12:45:44 -07:00
committed by GitHub
4 changed files with 65 additions and 5 deletions

View File

@@ -8,7 +8,7 @@ module Downloads
if test_original(original_url)
url = original_url
end
elsif url =~ %r!https?://\w+\.artstation\.com/artwork/!
else
url, headers = rewrite_html_url(url, headers)
end
@@ -22,6 +22,8 @@ module Downloads
end
def rewrite_html_url(url, headers)
return [url, headers] unless Sources::Strategies::ArtStation.url_match?(url)
source = Sources::Site.new(url)
source.get
[source.image_url, headers]

View File

@@ -3,11 +3,19 @@ module Sources::Strategies
attr_reader :json, :image_urls
def self.url_match?(url)
url =~ %r!^https?://\w+\.artstation\.com/artwork/[a-z0-9]+!i
self.project_id(url).present?
end
def self.project_id(url)
if url =~ %r!\Ahttps?://\w+\.artstation\.com/(?:artwork|projects)/(?<project_id>[a-z0-9]+)\z!i
$~[:project_id]
else
nil
end
end
def referer_url
if @referer_url =~ %r!^https?://\w+\.artstation\.com/artwork/[a-z0-9]+!i
if self.class.url_match?(@referer_url)
@referer_url
else
@url
@@ -18,8 +26,16 @@ module Sources::Strategies
"ArtStation"
end
def project_id
self.class.project_id(referer_url)
end
def page_url
"https://www.artstation.com/artwork/#{project_id}"
end
def api_url
url.sub(%r!^https?://\w+\.!, "https://www.").sub(%r!/artwork/!, "/projects/") + ".json"
"https://www.artstation.com/projects/#{project_id}.json"
end
def image_url

View File

@@ -27,5 +27,18 @@ module Downloads
assert_equal("https://cdna.artstation.com/p/assets/images/images/004/730/278/large/mendel-oh-dragonll.jpg", @download.source)
end
end
context "a download for a https://$artist.artstation.com/projects/$id page" do
setup do
@source = "https://dantewontdie.artstation.com/projects/YZK5q"
@tempfile = Tempfile.new("danbooru-test")
@download = Downloads::File.new(@source, @tempfile.path)
@download.download!
end
should "download the original image instead" do
assert_equal("https://cdna.artstation.com/p/assets/images/images/006/066/534/original/yinan-cui-reika.jpg?1495781565", @download.source)
end
end
end
end

View File

@@ -4,7 +4,7 @@ module Sources
class ArtStationTest < ActiveSupport::TestCase
context "The source site for an art station artwork page" do
setup do
@site = Sources::Site.new("https://jeyrain.artstation.com/artwork/04XA4")
@site = Sources::Site.new("https://www.artstation.com/artwork/04XA4")
@site.get
end
@@ -29,5 +29,34 @@ module Sources
assert_equal("", @site.artist_commentary_desc)
end
end
context "The source site for an art station projects page" do
setup do
@site = Sources::Site.new("https://dantewontdie.artstation.com/projects/YZK5q")
@site.get
end
should "get the image url" do
url = "https://cdna.artstation.com/p/assets/images/images/006/066/534/original/yinan-cui-reika.jpg?1495781565"
assert_equal(url, @site.image_url)
end
should "get the profile" do
assert_equal("https://www.artstation.com/artist/dantewontdie", @site.profile_url)
end
should "get the artist name" do
assert_equal("dantewontdie", @site.artist_name)
end
should "get the tags" do
assert_equal(%w[gantz reika], @site.tags.map(&:first))
end
should "get the artist commentary" do
assert_equal("Reika ", @site.artist_commentary_title)
assert_equal("From Gantz.", @site.artist_commentary_desc)
end
end
end
end