twitter: don't fail when api key isn't configured.

This commit is contained in:
evazion
2018-09-16 14:04:17 -05:00
parent 325120ee51
commit bd47641601
4 changed files with 21 additions and 14 deletions

View File

@@ -22,6 +22,12 @@ module Sources
false false
end end
# Should return true if all prerequisites for using the strategy are met.
# Return false if the strategy requires api keys that have not been configured.
def self.enabled?
true
end
# * <tt>url</tt> - Should point to a resource suitable for # * <tt>url</tt> - Should point to a resource suitable for
# downloading. This may sometimes point to the binary file. # downloading. This may sometimes point to the binary file.
# It may also point to the artist's profile page, in cases # It may also point to the artist's profile page, in cases

View File

@@ -13,6 +13,10 @@ module Sources::Strategies
urls.compact.any? { |x| x =~ PAGE || x =~ ASSET} urls.compact.any? { |x| x =~ PAGE || x =~ ASSET}
end end
def self.enabled?
TwitterService.new.enabled?
end
# https://twitter.com/i/web/status/943446161586733056 # https://twitter.com/i/web/status/943446161586733056
# https://twitter.com/motty08111213/status/943446161586733056 # https://twitter.com/motty08111213/status/943446161586733056
def self.status_id_from_url(url) def self.status_id_from_url(url)
@@ -135,6 +139,7 @@ module Sources::Strategies
memoize :service memoize :service
def api_response def api_response
return {} if !service.enabled?
service.status(status_id, tweet_mode: "extended") service.status(status_id, tweet_mode: "extended")
rescue ::Twitter::Error::NotFound rescue ::Twitter::Error::NotFound
{} {}

View File

@@ -1,8 +1,13 @@
class TwitterService class TwitterService
class Error < Exception ; end
extend Memoist extend Memoist
def enabled?
Danbooru.config.twitter_api_key.present? && Danbooru.config.twitter_api_secret.present?
end
def client def client
raise "Twitter API keys not set" if Danbooru.config.twitter_api_key.nil? raise Error, "Twitter API keys not set" if !enabled?
rest_client = ::Twitter::REST::Client.new do |config| rest_client = ::Twitter::REST::Client.new do |config|
config.consumer_key = Danbooru.config.twitter_api_key config.consumer_key = Danbooru.config.twitter_api_key

View File

@@ -2,15 +2,17 @@ require 'test_helper'
module Sources module Sources
class TwitterTest < ActiveSupport::TestCase class TwitterTest < ActiveSupport::TestCase
setup do
skip "Twitter credentials are not configured" if !Sources::Strategies::Twitter.enabled?
end
context "An extended tweet" do context "An extended tweet" do
should "extract the correct image url" do should "extract the correct image url" do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/onsen_musume_jp/status/865534101918330881") @site = Sources::Strategies.find("https://twitter.com/onsen_musume_jp/status/865534101918330881")
assert_equal(["https://pbs.twimg.com/media/DAL-ntWV0AEbhes.jpg:orig"], @site.image_urls) assert_equal(["https://pbs.twimg.com/media/DAL-ntWV0AEbhes.jpg:orig"], @site.image_urls)
end end
should "extract all the image urls" do should "extract all the image urls" do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/aoimanabu/status/892370963630743552") @site = Sources::Strategies.find("https://twitter.com/aoimanabu/status/892370963630743552")
urls = %w[ urls = %w[
@@ -25,7 +27,6 @@ module Sources
context "A video" do context "A video" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/CincinnatiZoo/status/859073537713328129") @site = Sources::Strategies.find("https://twitter.com/CincinnatiZoo/status/859073537713328129")
end end
@@ -36,7 +37,6 @@ module Sources
context "An animated gif" do context "An animated gif" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/DaniStrawberry1/status/859435334765088769") @site = Sources::Strategies.find("https://twitter.com/DaniStrawberry1/status/859435334765088769")
end end
@@ -47,7 +47,6 @@ module Sources
context "A twitter summary card" do context "A twitter summary card" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/NatGeo/status/932700115936178177") @site = Sources::Strategies.find("https://twitter.com/NatGeo/status/932700115936178177")
end end
@@ -58,7 +57,6 @@ module Sources
context "A twitter summary card from twitter" do context "A twitter summary card from twitter" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/masayasuf/status/870734961778630656/photo/1") @site = Sources::Strategies.find("https://twitter.com/masayasuf/status/870734961778630656/photo/1")
end end
@@ -70,7 +68,6 @@ module Sources
context "A twitter summary card from twitter with a :large image" do context "A twitter summary card from twitter with a :large image" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/aranobu/status/817736083567820800") @site = Sources::Strategies.find("https://twitter.com/aranobu/status/817736083567820800")
end end
@@ -89,7 +86,6 @@ module Sources
context "The source site for a restricted twitter" do context "The source site for a restricted twitter" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://mobile.twitter.com/Strangestone/status/556440271961858051") @site = Sources::Strategies.find("https://mobile.twitter.com/Strangestone/status/556440271961858051")
end end
@@ -100,7 +96,6 @@ module Sources
context "The source site for twitter" do context "The source site for twitter" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://mobile.twitter.com/nounproject/status/540944400767922176") @site = Sources::Strategies.find("https://mobile.twitter.com/nounproject/status/540944400767922176")
end end
@@ -133,7 +128,6 @@ module Sources
context "The source site for a direct image and a referer" do context "The source site for a direct image and a referer" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:large", "https://twitter.com/nounproject/status/540944400767922176") @site = Sources::Strategies.find("https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:large", "https://twitter.com/nounproject/status/540944400767922176")
end end
@@ -148,7 +142,6 @@ module Sources
context "The source site for a direct image url (pbs.twimg.com/media/*.jpg) without a referer url" do context "The source site for a direct image url (pbs.twimg.com/media/*.jpg) without a referer url" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:large") @site = Sources::Strategies.find("https://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:large")
end end
@@ -167,7 +160,6 @@ module Sources
context "The source site for a https://twitter.com/i/web/status/:id url" do context "The source site for a https://twitter.com/i/web/status/:id url" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/i/web/status/943446161586733056") @site = Sources::Strategies.find("https://twitter.com/i/web/status/943446161586733056")
end end
@@ -189,7 +181,6 @@ module Sources
context "A tweet" do context "A tweet" do
setup do setup do
skip "Twitter key is not set" unless Danbooru.config.twitter_api_key
@site = Sources::Strategies.find("https://twitter.com/noizave/status/875768175136317440") @site = Sources::Strategies.find("https://twitter.com/noizave/status/875768175136317440")
end end