diff --git a/app/logical/sources/strategies/pixiv.rb b/app/logical/sources/strategies/pixiv.rb index 9cada87f0..2b982dd7c 100644 --- a/app/logical/sources/strategies/pixiv.rb +++ b/app/logical/sources/strategies/pixiv.rb @@ -84,7 +84,7 @@ module Sources @artist_name = @metadata.name @profile_url = "http://www.pixiv.net/member.php?id=#{@metadata.user_id}" @pixiv_moniker = @metadata.moniker - @zip_url, @ugoira_frame_data, @ugoira_content_type = get_zip_url_from_page(page) + @zip_url, @ugoira_frame_data, @ugoira_content_type = get_zip_url_from_api @tags = @metadata.tags.map do |tag| [tag, "https://www.pixiv.net/search.php?s_mode=s_tag_full&#{{word: tag}.to_param}"] end @@ -95,8 +95,8 @@ module Sources is_manga = @page_count > 1 if !@zip_url - @image_url = get_image_url_from_page(page, @page_count > 1) - #@image_url = image_urls.first + page = manga_page_from_url(@url).to_i + @image_url = image_urls[page] end end @@ -284,6 +284,31 @@ module Sources thumbnail_url = element.attr("src") || element.attr("data-src") return rewrite_thumbnails(thumbnail_url, is_manga) end + + if page.body =~ /"original":"(https:.+?)"/ + return $1.gsub(/\\\//, '/') + end + end + + def get_zip_url_from_api + if @metadata.pages.is_a?(Hash) && @metadata.pages["ugoira600x600"] + zip_url = @metadata.pages["ugoira600x600"].sub("_ugoira600x600.zip", "_ugoira1920x1080.zip") + frame_data = @metadata.json["metadata"]["frames"] + content_type = nil + + case @metadata.json["image_urls"].to_s + when /\.jpg/ + content_type = "image/jpeg" + + when /\.png/ + content_type = "image/png" + + when /\.gif/ + content_type = "image/gif" + end + + return [zip_url, frame_data, content_type] + end end def get_zip_url_from_page(page) diff --git a/test/unit/downloads/pixiv_test.rb b/test/unit/downloads/pixiv_test.rb index 5c2f211b6..512932336 100644 --- a/test/unit/downloads/pixiv_test.rb +++ b/test/unit/downloads/pixiv_test.rb @@ -21,7 +21,12 @@ module Downloads should "capture the data" do assert_equal("https://i.pximg.net/img-zip-ugoira/img/2017/04/04/08/57/38/62247364_ugoira1920x1080.zip", @download.source) - assert_equal([{"file"=>"000000.jpg", "delay"=>125}, {"file"=>"000001.jpg", "delay"=>125}], @download.data[:ugoira_frame_data]) + assert_equal(2, @download.data[:ugoira_frame_data].size) + if @download.data[:ugoira_frame_data][0]["file"] + assert_equal([{"file"=>"000000.jpg", "delay"=>125}, {"file"=>"000001.jpg", "delay"=>125}], @download.data[:ugoira_frame_data]) + else + assert_equal([{"delay_msec"=>125}, {"delay_msec"=>125}], @download.data[:ugoira_frame_data]) + end end end diff --git a/test/unit/post_replacement_test.rb b/test/unit/post_replacement_test.rb index a59970177..03173cbd4 100644 --- a/test/unit/post_replacement_test.rb +++ b/test/unit/post_replacement_test.rb @@ -194,7 +194,7 @@ class PostReplacementTest < ActiveSupport::TestCase assert_equal("cad1da177ef309bf40a117c17b8eecf5", Digest::MD5.file(@post.file).hexdigest) assert_equal("https://i.pximg.net/img-zip-ugoira/img/2017/04/04/08/57/38/62247364_ugoira1920x1080.zip", @post.source) - assert_equal([{"file"=>"000000.jpg", "delay"=>125}, {"file"=>"000001.jpg", "delay"=>125}], @post.pixiv_ugoira_frame_data.data) + assert_equal([{"delay_msec"=>125}, {"delay_msec"=>125}], @post.pixiv_ugoira_frame_data.data) rescue Net::OpenTimeout skip "Remote connection to Pixiv failed" end diff --git a/test/unit/sources/pixiv_test.rb b/test/unit/sources/pixiv_test.rb index 0eb5a6bc0..7a2946b03 100644 --- a/test/unit/sources/pixiv_test.rb +++ b/test/unit/sources/pixiv_test.rb @@ -55,7 +55,12 @@ module Sources end should "capture the frame data" do - assert_equal([{"file"=>"000000.jpg", "delay"=>125}, {"file"=>"000001.jpg", "delay"=>125}], @site.ugoira_frame_data) + assert_equal(2, @site.ugoira_frame_data.size) + if @site.ugoira_frame_data[0]["file"] + assert_equal([{"file"=>"000000.jpg", "delay"=>125}, {"file"=>"000001.jpg", "delay"=>125}], @site.ugoira_frame_data) + else + assert_equal([{"delay_msec"=>125}, {"delay_msec"=>125}], @site.ugoira_frame_data) + end end end