我的应用程序习惯性地向 Twitter API 请求用户的时间线(用户的推文)。
顺便说一句,我正在使用 twitter gem 并配置了一个 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
——每 15 分钟有 900 个请求的速率限制。
如果我理解正确,有 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
这种方法的问题是,在我向 Twitter API 发出请求之前,我想知道我的应用程序可以安全地发出多少请求。我担心这种方法会让我的应用程序在达到速率限制后很久才 ping Twitter API,这会使我的应用程序受到 Twitter 的惩罚性行为(例如,我的应用程序被列入黑名单。)
第二种方法
第二种方法是向这个 Twitter 端点发出请求——该端点https://api.twitter.com/1.1/application/rate_limit_status.json
将有关给定速率限制的应用程序状态的数据发送回何处。
但同样,这个端点也有自己的速率限制(每 15 分钟 180 个请求)——这不是很高。我的应用程序会超过这个限制。在理想情况下,我想在向 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 的请求。或者有没有更简单的方法?