Twitter :: Error :: GetFollowersController #index中的TooManyRequests

时间:2017-12-29 14:07:23

标签: ruby-on-rails twitter

如何解决这个问题?我正在使用' gem twitter'。但我无法获得粉丝列表:

@client.followers.collect {|f| @client.user(f).screen_name }  #=> Twitter::Error::TooManyRequests (Rate limit exceeded):

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试收集关注者的screen_names。但是,在collect区块中,您再次调用Twitter API。这导致许多API调用Twitter;并达到你的速度限制。

你不需要这样做。当您进行@client.followers通话时,您已拥有关注者的screen_names。试试这个:

@client.followers.map { |follower| follower.screen_name }

您可以查看GET followers/list的API文档,了解其他内容。它还告诉您它在15分钟的窗口内限制为15个请求。如果您已经多次测试过您的代码,那么很容易达到这个限制。

另一个问题是Twitter每次通话最多只返回200个粉丝。如果您有超过200个关注者,则您需要进行多次API调用才能检索所有关注者。如果您有超过3,000个关注者,则可能无法在15分钟的限速窗口内检索所有关注者。

twitter gem为您处理多个API调用。例如,如果您有1,000个关注者,gem将在幕后进行多个API调用。宝石有recommended way to handle rate limits。以下是他们的建议:

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

该错误表示您在给定的时间范围内提出了太多请求。你必须等到你的利率限制被清除。

这就是Twitter所说的:

  

API的速率限制主要基于每个用户 - 或者更准确地描述每个用户访问令牌。如果某个方法允许每个速率限制窗口有15个请求,则每个访问令牌每个窗口允许15个请求。

请参阅:https://developer.twitter.com/en/docs/basics/rate-limiting