Мое приложение обычно отправляет запрос в API Twitter на временную шкалу пользователя (твиты пользователя).
Кроме того, я использую драгоценный камень twitter и настроил клиент Twitter, чтобы мое приложение могло выполнить запрос:
client = Twitter::REST::Client.new do |config|
config.consumer_key = ENV["TWITTER_CONSUMER_KEY"]
config.consumer_secret = ENV["TWITTER_CONSUMER_SECRET"]
config.access_token = ENV["TWITTER_ACCESS_TOKEN"]
config.access_token_secret = ENV["TWITTER_ACCESS_TOKEN_SECRET"]
end
Конечная точка , к которой я делаю запрос - https://api.twitter.com/1.1/statuses/user_timeline.json
- имеет ограничение скорости 900 запросов каждые 15 минут.
Если я правильно понимаю, есть 2 распространенных способа определить, достигло ли мое приложение своего предела скорости, но и то, что мне нужно:
Первый подход:
Это функция, которую я написал, которая пытается сделать запрос на твиты пользователя, и если приложение имеет ограничение скорости, оно вызовет исключение.
def get_tweets_from_TwitterAPI(twitter_handle)
tweets = []
begin
tweets = CLIENT.user_timeline(twitter_handle)
rescue Twitter::Error::TooManyRequests => error
raise error
end
return tweets
end
Проблема с этим подходом состоит в том, что я хотел бы узнать, сколько еще запросов мое приложение может безопасно выполнить, прежде чем я сделаю запрос к API Twitter. Я боюсь, что у этого подхода будет мой приложение пингует API Twitter через долгое время после того, как оно достигнет предела скорости, и это откроет мое приложение для карательных действий со стороны Twitter (например, мое приложение занесено в черный список).
Второй подход
Второй подход состоит в том, чтобы сделать запрос к этой конечной точке Twitter - https://api.twitter.com/1.1/application/rate_limit_status.json
- который отправляет данные о том, где находится статус приложения для данного ограничения скорости.
Но, опять же, у этой конечной точки также есть собственный предел скорости (180 запросов каждые 15 минут), который не очень высок. Мое приложение взорвется за этот предел. В идеальном мире я хотел бы определить текущий статус ограничения скорости моего приложения, прежде чем я сделаю запрос к API вообще. И так:
def start_tweets_fetch
number_of_requests_in_last_15 minutes = WHERE DO I GET THIS NUMBER FROM??
if number_of_requests_in_last_15 minutes <= 900
get_tweets_from_TwitterAPI(twitter_handle)
end
end
Я представляю, что мне нужно увеличить число, которое я сохранил в своей базе данных, чтобы отслеживать запросы к API. Или есть более простой способ?