如何使用sleep for cursor方法来避免速率限制?

时间:2015-11-19 20:18:55

标签: ruby api twitter rate-limiting

我试图获得所有用户的关注者ID(75K +)而不达到速率限制。我想你可以在光标上放一个睡眠方法,以防止每15分钟超过15次呼叫。知道怎么做吗?提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

我猜您正在使用twitter gem与Twitter API进行交互。你的维基的one中描述了完整的场景:

follower_ids = client.follower_ids('justinbieber')
begin
  follower_ids.to_a
rescue Twitter::Error::TooManyRequests => error
  # NOTE: Your process could go to sleep for up to 15 minutes but if you
  # retry any sooner, it will almost certainly fail with the same exception.
  sleep error.rate_limit.reset_in + 1
  retry
end

我们的想法是,如果达到了费率限制,只需sleep一段时间,然后retry API调用。

如果您想完全避免速率限制,可以每隔limit - 1秒从返回的游标中获取x个元素。在你的情况下,取15个元素,然后睡15分钟。这是一个例子:

follower_ids = client.follower_ids('justinbieber')
loop do
  follower_ids.take(15)
  break if follower_ids.last?
  sleep 15 * 60 # 15 minutes
end