From f633222ef05d5466cd22ebb9655a0ff8f8f4ed82 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 16 Nov 2017 12:03:55 -0600 Subject: [PATCH 1/2] twitter: test fetching source data from direct image with referer. --- test/functional/sources_controller_test.rb | 12 +++++++++++- test/unit/sources/twitter_test.rb | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/test/functional/sources_controller_test.rb b/test/functional/sources_controller_test.rb index f78df071b..3012cad43 100644 --- a/test/functional/sources_controller_test.rb +++ b/test/functional/sources_controller_test.rb @@ -3,10 +3,20 @@ require 'test_helper' class SourcesControllerTest < ActionController::TestCase context "The sources controller" do context "show action" do - should "work" do + should "work for a pixiv URL" do get :show, { url: "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=14901720", format: "json" } assert_response :success end + + should "work for a direct twitter URL with referer" do + get :show, { + url: "https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:large", + ref: "https://twitter.com/nounproject/status/540944400767922176", + format: "json" + } + + assert_response :success + end end end end diff --git a/test/unit/sources/twitter_test.rb b/test/unit/sources/twitter_test.rb index 31114e1c8..38cb6b8a5 100644 --- a/test/unit/sources/twitter_test.rb +++ b/test/unit/sources/twitter_test.rb @@ -123,6 +123,21 @@ module Sources end end + context "The source site for a direct image and a referer" do + setup do + @site = Sources::Site.new("https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:large", referer_url: "https://twitter.com/nounproject/status/540944400767922176") + @site.get + end + + should "get the artist name" do + assert_equal("Noun Project", @site.artist_name) + end + + should "get the image url" do + assert_equal("https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:orig", @site.image_url) + end + end + context "A tweet" do setup do @site = Sources::Site.new("https://twitter.com/noizave/status/875768175136317440") From eeb41d2ffd555247c2df57239482591ec72013c0 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 16 Nov 2017 11:23:12 -0600 Subject: [PATCH 2/2] twitter: get status id from referer url if not in direct url. --- app/logical/downloads/file.rb | 2 +- app/logical/sources/strategies/twitter.rb | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/logical/downloads/file.rb b/app/logical/downloads/file.rb index 0fa1b26d7..af8fd1725 100644 --- a/app/logical/downloads/file.rb +++ b/app/logical/downloads/file.rb @@ -125,7 +125,7 @@ module Downloads def set_source_to_referer(src, referer) if Sources::Strategies::Nijie.url_match?(src) || - Sources::Strategies::Twitter.url_match?(src) || + Sources::Strategies::Twitter.url_match?(src) || Sources::Strategies::Twitter.url_match?(referer) Sources::Strategies::Pawoo.url_match?(src) || Sources::Strategies::Tumblr.url_match?(src) || Sources::Strategies::Tumblr.url_match?(referer) Sources::Strategies::ArtStation.url_match?(src) || Sources::Strategies::ArtStation.url_match?(referer) diff --git a/app/logical/sources/strategies/twitter.rb b/app/logical/sources/strategies/twitter.rb index ac80d7a44..646f9ec47 100644 --- a/app/logical/sources/strategies/twitter.rb +++ b/app/logical/sources/strategies/twitter.rb @@ -3,11 +3,11 @@ module Sources::Strategies attr_reader :image_urls def self.url_match?(url) - url =~ %r!https?://(?:mobile\.)?twitter\.com/\w+/status/\d+! || url =~ %r{https?://pbs\.twimg\.com/media/} + self.status_id_from_url(url).present? end def referer_url - if @referer_url =~ %r!https?://(?:mobile\.)?twitter\.com/\w+/status/\d+! && @url =~ %r{https?://pbs\.twimg\.com/media/} + if self.class.url_match?(@referer_url) @referer_url else @url @@ -19,7 +19,6 @@ module Sources::Strategies end def api_response - status_id = status_id_from_url(url) @api_response ||= TwitterService.new.client.status(status_id, tweet_mode: "extended") end @@ -62,11 +61,15 @@ module Sources::Strategies desc.strip end - def status_id_from_url(url) + def status_id + self.class.status_id_from_url(referer_url) + end + + def self.status_id_from_url(url) if url =~ %r{^https?://(?:mobile\.)?twitter\.com/\w+/status/(\d+)} $1.to_i else - raise Sources::Error.new("Couldn't get status ID from URL: #{url}") + nil end end end