The twitter gem had several problems: * It's been unmaintained for over a year. * It pulled in a lot of dependencies, many of which were outdated. In particular, it locked the `http` gem to version 3.3, preventing us from upgrading to 4.2. * It raised exceptions on normal error conditions, like for deleted tweets or suspended users, which we really don't want. * We had to wrap it to provide caching. Changes: * Fixes #4226 (Exception when creating new artists entries for suspended Twitter accounts) * Drop support for scraping images from summary cards. Summary cards are the previews you get when you link to a website in a tweet. These preview images aren't always the best image.
27 lines
764 B
Ruby
27 lines
764 B
Ruby
class TwitterApiClient
|
|
extend Memoist
|
|
|
|
attr_reader :api_key, :api_secret
|
|
|
|
def initialize(api_key, api_secret)
|
|
@api_key, @api_secret = api_key, api_secret
|
|
end
|
|
|
|
def bearer_token(token_expiry = 24.hours)
|
|
http = Danbooru::Http.basic_auth(user: api_key, pass: api_secret)
|
|
response = http.cache(token_expiry).post("https://api.twitter.com/oauth2/token", form: { grant_type: :client_credentials })
|
|
response.parse["access_token"]
|
|
end
|
|
|
|
def client
|
|
Danbooru::Http.auth("Bearer #{bearer_token}")
|
|
end
|
|
|
|
def status(id, cache: 1.minute)
|
|
response = client.cache(cache).get("https://api.twitter.com/1.1/statuses/show.json?id=#{id}&tweet_mode=extended")
|
|
response.parse.with_indifferent_access
|
|
end
|
|
|
|
memoize :bearer_token, :client
|
|
end
|