我有一个应用程序,它设置为每天一次对多个 API 进行预定调用。这很好用,但我知道我正在调用的一些 API(例如 Twitter)有速率限制。随着我拨打的电话数量不断增加,任何人都可以推荐一种方法来限制我的通话,以便我可以每小时/分钟发送 x 次突发等?
我找到了Glutton Ratelimit gem,有人在用它吗?有用吗?还有其他我应该看的吗?
我有一个应用程序,它设置为每天一次对多个 API 进行预定调用。这很好用,但我知道我正在调用的一些 API(例如 Twitter)有速率限制。随着我拨打的电话数量不断增加,任何人都可以推荐一种方法来限制我的通话,以便我可以每小时/分钟发送 x 次突发等?
我找到了Glutton Ratelimit gem,有人在用它吗?有用吗?还有其他我应该看的吗?
如果您使用某种后台工作程序来执行 API 调用,您可以重新安排任务以在下一个时间段重新执行,此时速率限制已被重置。
class TwitterWorker
include Sidekiq::Worker
def perform(status_id)
status = Twitter.status(status_id)
# ...
rescue Twitter::Error::TooManyRequests
# Reschedule the query to be performed in the next time slot
TwitterWorker.perform_in(15.minutes, status_id)
end
end
但是,没有科学的解决方案,例如,如果您尝试在一天内执行比速率限制允许的更多的 API 调用,则可能会每次重新安排查询的风险。但在那之前,一些简单的事情可能会奏效!
我知道这是一个老问题,但想提一点,以防其他人遇到同样的问题。
如果可以使用 resque 将工作排队到作业,那么您可以使用我刚刚发布的 gem,它会在您达到 rate_limit 时暂停队列 - 并在稍后取消暂停。
另一种解决方案是购买允许您使用不同 IP 地址发送请求的代理
使用标准 http 库http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#method-c-Proxy
我不确定您是否会被阻止,但也许值得一试。随机选择的 IP 应该会增加您的限制