From 4a56f8d160fcd05728b42c01bf038dae0c8f7cd3 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Tue, 4 Sep 2018 12:53:58 -0700 Subject: [PATCH] fixes #3856 for pixiv fanbox urls --- app/logical/sources/strategies/pixiv.rb | 18 +++++++++++++++++- test/unit/artist_url_test.rb | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/logical/sources/strategies/pixiv.rb b/app/logical/sources/strategies/pixiv.rb index ec0e4ba0b..82e827f78 100644 --- a/app/logical/sources/strategies/pixiv.rb +++ b/app/logical/sources/strategies/pixiv.rb @@ -14,11 +14,12 @@ module Sources TOUCH = %r!(?:\A(?:https?://)?touch\.pixiv\.net)! STACC_PAGE = %r!\A#{WEB}/stacc/#{MONIKER}/?\z!i NOVEL_PAGE = %r!(?:\Ahttps?://www\.pixiv\.net/novel/show\.php\?id=(\d+))! + FANBOX_ACCOUNT = %r!(?:\Ahttps?://www\.pixiv\.net/fanbox/creator/\d+\z)! FANBOX_IMAGE = %r!(?:\Ahttps?://fanbox\.pixiv\.net/images/post/(\d+))! FANBOX_PAGE = %r!(?:\Ahttps?://www\.pixiv\.net/fanbox/creator/\d+/post/(\d+))! def self.match?(*urls) - urls.compact.any? { |x| x.match?(/#{WEB}|#{IMG}|#{I12}|#{TOUCH}|#{PXIMG}|#{FANBOX_IMAGE}/i) } + urls.compact.any? { |x| x.match?(/#{WEB}|#{IMG}|#{I12}|#{TOUCH}|#{PXIMG}|#{FANBOX_IMAGE}|#{FANBOX_ACCOUNT}/i) } end def self.to_dtext(text) @@ -59,6 +60,10 @@ module Sources return "https://www.pixiv.net/fanbox/creator/#{metadata.user_id}/post/#{fanbox_id}" end + if fanbox_account_id.present? + return "https://www.pixiv.net/fanbox/creator/#{fanbox_account_id}" + end + if illust_id.present? return "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=#{illust_id}" end @@ -244,6 +249,17 @@ module Sources end memoize :fanbox_id + def fanbox_account_id + [url, referer_url].each do |x| + if x =~ FANBOX_ACCOUNT + return x + end + end + + return nil + end + memoize :fanbox_account_id + def agent PixivWebAgent.build end diff --git a/test/unit/artist_url_test.rb b/test/unit/artist_url_test.rb index 820176f69..ee5bd45d4 100644 --- a/test/unit/artist_url_test.rb +++ b/test/unit/artist_url_test.rb @@ -135,6 +135,12 @@ class ArtistUrlTest < ActiveSupport::TestCase assert_equal("http://www.pixiv.net/stacc/evazion/", url.normalized_url) end + should "normalize pixiv fanbox account urls" do + url = FactoryBot.create(:artist_url, :url => "http://www.pixiv.net/fanbox/creator/3113804") + assert_equal("http://www.pixiv.net/fanbox/creator/3113804", url.url) + assert_equal("http://www.pixiv.net/fanbox/creator/3113804/", url.normalized_url) + end + should "normalize twitter urls" do url = FactoryBot.create(:artist_url, :url => "https://twitter.com/aoimanabu/status/892370963630743552") assert_equal("https://twitter.com/aoimanabu/status/892370963630743552", url.url)