diff --git a/app/logical/sources/strategies/pixiv.rb b/app/logical/sources/strategies/pixiv.rb index f80aebec2..d42d38fe5 100644 --- a/app/logical/sources/strategies/pixiv.rb +++ b/app/logical/sources/strategies/pixiv.rb @@ -8,6 +8,7 @@ # * https://www.pixiv.net/member_illust.php?mode=medium&illust_id=46324488 # * https://www.pixiv.net/member_illust.php?mode=manga&illust_id=46324488 # * https://www.pixiv.net/member_illust.php?mode=manga_big&illust_id=46324488&page=0 +# * https://www.pixiv.net/en/artworks/46324488 # # * https://www.pixiv.net/member.php?id=339253 # * https://www.pixiv.net/member_illust.php?id=339253&type=illust @@ -127,7 +128,7 @@ module Sources end if illust_id.present? - return "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=#{illust_id}" + return "https://www.pixiv.net/artworks/#{illust_id}" end return url @@ -271,6 +272,10 @@ module Sources if url.host == "www.pixiv.net" && url.path == "/member_illust.php" && url.query_values["illust_id"].present? return url.query_values["illust_id"].to_i + # http://www.pixiv.net/en/artworks/46324488 + elsif url.host == "www.pixiv.net" && url.path =~ %r!\A/(?:en/)?artworks/(?\d+)!i + return $~[:illust_id].to_i + # http://www.pixiv.net/i/18557054 elsif url.host == "www.pixiv.net" && url.path =~ %r!\A/i/(?\d+)\z!i return $~[:illust_id].to_i diff --git a/app/models/post.rb b/app/models/post.rb index 929913ffe..fdc3d0ea8 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -341,17 +341,13 @@ class Post < ApplicationRecord end def normalized_source + if pixiv_id.present? + return "https://www.pixiv.net/artworks/#{pixiv_id}" + end + case source when %r{\Ahttps?://twitter.com/[^/]+/status/(\d+)\z}i "https://twitter.com/i/web/status/#{$1}" - when %r{\Ahttps?://img\d+\.pixiv\.net/img/[^\/]+/(\d+)}i, - %r{\Ahttps?://i\d\.pixiv\.net/img\d+/img/[^\/]+/(\d+)}i - "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=#{$1}" - - when %r{\Ahttps?://(?:i\d+\.pixiv\.net|i\.pximg\.net)/img-(?:master|original)/img/(?:\d+\/)+(\d+)_p}i, - %r{\Ahttps?://(?:i\d+\.pixiv\.net|i\.pximg\.net)/c/\d+x\d+/img-master/img/(?:\d+\/)+(\d+)_p}i, - %r{\Ahttps?://(?:i\d+\.pixiv\.net|i\.pximg\.net)/img-zip-ugoira/img/(?:\d+\/)+(\d+)_ugoira\d+x\d+\.zip}i - "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=#{$1}" when %r{\Ahttps?://lohas\.nicoseiga\.jp/priv/(\d+)\?e=\d+&h=[a-f0-9]+}i, %r{\Ahttps?://lohas\.nicoseiga\.jp/priv/[a-f0-9]+/\d+/(\d+)}i diff --git a/test/unit/post_test.rb b/test/unit/post_test.rb index bc727468c..3a508d6c2 100644 --- a/test/unit/post_test.rb +++ b/test/unit/post_test.rb @@ -1461,20 +1461,20 @@ class PostTest < ActiveSupport::TestCase end should "normalize pixiv links" do - @post.source = "http://i2.pixiv.net/img12/img/zenze/39749565.png" - assert_equal("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=39749565", @post.normalized_source) + @post.update!(source: "http://i2.pixiv.net/img12/img/zenze/39749565.png") + assert_equal("https://www.pixiv.net/artworks/39749565", @post.normalized_source) - @post.source = "http://i1.pixiv.net/img53/img/themare/39735353_big_p1.jpg" - assert_equal("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=39735353", @post.normalized_source) + @post.update!(source: "http://i1.pixiv.net/img53/img/themare/39735353_big_p1.jpg") + assert_equal("https://www.pixiv.net/artworks/39735353", @post.normalized_source) - @post.source = "http://i1.pixiv.net/c/150x150/img-master/img/2010/11/30/08/39/58/14901720_p0_master1200.jpg" - assert_equal("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=14901720", @post.normalized_source) + @post.update!(source: "http://i1.pixiv.net/c/150x150/img-master/img/2010/11/30/08/39/58/14901720_p0_master1200.jpg") + assert_equal("https://www.pixiv.net/artworks/14901720", @post.normalized_source) - @post.source = "http://i1.pixiv.net/img-original/img/2010/11/30/08/39/58/14901720_p0.png" - assert_equal("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=14901720", @post.normalized_source) + @post.update!(source: "http://i1.pixiv.net/img-original/img/2010/11/30/08/39/58/14901720_p0.png") + assert_equal("https://www.pixiv.net/artworks/14901720", @post.normalized_source) - @post.source = "http://i2.pixiv.net/img-zip-ugoira/img/2014/08/05/06/01/10/44524589_ugoira1920x1080.zip" - assert_equal("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=44524589", @post.normalized_source) + @post.update!(source: "http://i2.pixiv.net/img-zip-ugoira/img/2014/08/05/06/01/10/44524589_ugoira1920x1080.zip") + assert_equal("https://www.pixiv.net/artworks/44524589", @post.normalized_source) end should "normalize nicoseiga links" do diff --git a/test/unit/sources/pixiv_test.rb b/test/unit/sources/pixiv_test.rb index ecdda1e13..d8de1fa9b 100644 --- a/test/unit/sources/pixiv_test.rb +++ b/test/unit/sources/pixiv_test.rb @@ -85,6 +85,20 @@ module Sources end end + context "A https://www.pixiv.net/*/artworks/* source" do + should "work" do + @site = Sources::Strategies.find("https://www.pixiv.net/en/artworks/64476642") + + assert_equal("https://i.pximg.net/img-original/img/2017/08/18/00/09/21/64476642_p0.jpg", @site.image_url) + assert_equal("https://i.pximg.net/img-original/img/2017/08/18/00/09/21/64476642_p0.jpg", @site.canonical_url) + assert_equal("https://www.pixiv.net/artworks/64476642", @site.page_url) + + @site = Sources::Strategies.find("https://www.pixiv.net/artworks/64476642") + assert_equal("https://i.pximg.net/img-original/img/2017/08/18/00/09/21/64476642_p0.jpg", @site.image_url) + assert_equal("https://www.pixiv.net/artworks/64476642", @site.page_url) + end + end + context "fetching source data for a new manga image" do setup do get_source("https://www.pixiv.net/member_illust.php?mode=medium&illust_id=65981735") @@ -312,6 +326,9 @@ module Sources assert_illust_id(18557054, "http://i1.pixiv.net/img-inf/img/2011/05/01/23/28/04/18557054_64x64.jpg") assert_illust_id(18557054, "http://i1.pixiv.net/img-inf/img/2011/05/01/23/28/04/18557054_s.png") assert_illust_id(18557054, "http://www.pixiv.net/i/18557054") + + assert_illust_id(18557054, "http://www.pixiv.net/en/artworks/18557054") + assert_illust_id(18557054, "http://www.pixiv.net/artworks/18557054") end should "not misparse ids from fanbox urls" do