获取大型Twitter用户列表(并重试)

时间:2014-03-12 17:14:08

标签: ruby twitter

我试图获取某个句柄的关注者用户ID列表。像

这样的东西
client = Twitter::REST::Client.new(...)
client.follower_ids(handle).each { |id| puts id }

但是对于拥有数千名粉丝的句柄,我得到了Twitter::Error:TooManyRequests。我考虑过尝试

client = Twitter::REST::Client.new(...)
begin
  client.follower_ids(handle).each { |id| puts id }
rescue Twitter::Error::TooManyRequests => error
  sleep error.rate_limit.reset_in
  retry
end

但是,每当我获得each(从而永远不会完成)时,从一开始就重新启动TooManyRequests循环不会?

我正在使用twitter gem v5.8.0。

1 个答案:

答案 0 :(得分:1)

宝石仓库最近更新了example如何正确执行此操作。

关键是将循环放在块中。

client = Twitter::REST::Client.new(...)
follower_ids = client.follower_ids(handle)
begin
  follower_ids.each { |id| puts id }
rescue Twitter::Error::TooManyRequests => error
  sleep error.rate_limit.reset_in
  retry
end

警告:

我的例子不好!

此代码有效,因为游标会缓存每个请求的结果,因此每次重试时,它都不需要从一开始就请求所有内容。但是,在发出另一个请求之前遍历已缓存的所有内容。

每当重试发生时,此代码将多次输出ID。如果您编写这样的代码,则需要包含一些可以防止重复循环迭代的内容。