42 lines
1.1 KiB
Ruby
42 lines
1.1 KiB
Ruby
class TwitterService
|
|
def client
|
|
raise "Twitter API keys not set" if Danbooru.config.twitter_api_key.nil?
|
|
|
|
@client ||= begin
|
|
rest_client = Twitter::REST::Client.new do |config|
|
|
config.consumer_key = Danbooru.config.twitter_api_key
|
|
config.consumer_secret = Danbooru.config.twitter_api_secret
|
|
if bearer_token = Cache.get("twitter-api-token")
|
|
config.bearer_token = bearer_token
|
|
end
|
|
end
|
|
|
|
Cache.put("twitter-api-token", rest_client.bearer_token)
|
|
|
|
rest_client
|
|
end
|
|
end
|
|
|
|
def image_urls(tweet_url)
|
|
tweet_url =~ %r{/status/(\d+)}
|
|
twitter_id = $1
|
|
attrs = client.status(twitter_id).attrs
|
|
urls = []
|
|
attrs[:entities][:media].each do |obj|
|
|
urls << obj[:media_url] + ":orig"
|
|
end
|
|
attrs[:extended_entities][:media].each do |obj|
|
|
if obj[:video_info]
|
|
largest = obj[:video_info][:variants].select {|x| x[:url] =~ /\.mp4$/}.max_by {|x| x[:bitrate]}
|
|
urls.clear
|
|
urls << largest[:url] if largest
|
|
else
|
|
urls << obj[:media_url] + ":orig"
|
|
end
|
|
end
|
|
urls.uniq
|
|
rescue => e
|
|
[]
|
|
end
|
|
end
|