我试图获取某个句柄的关注者用户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。
答案 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。如果您编写这样的代码,则需要包含一些可以防止重复循环迭代的内容。