Ruby的Twitter宝石:如何安全地迭代有很多朋友的朋友

时间:2014-04-15 00:34:57

标签: ruby-on-rails twitter gem iteration rate-limiting

我对Twitter gem中的friends方法感到困惑。我看到Twitter::REST::FriendsAndFollowers#friends使用GET friends/list请求和cursor_from_response_with_user方法。

GET friends/list的文档说请求仅限于20个用户。我认为这意味着每个请求将返回20个朋友。但是,假设我关注了22个人并且使用了以下内容:

twitter_client = Twitter::REST::Client.new { [my credentials here] }
twitter_client.friends

这将返回所有22个朋友的数组。我没有做任何弄乱游标的事情,所以为什么我得到全部22?关于我的主要问题......

在我的应用程序中,当有人导入他们的朋友时,我正在迭代他们并创建其他记录。像这样的东西

twitter_client.friends.each do |friend|
  SomeModel.do_what_you_need_to_with(friend)
  AnotherModel.do_something_else_with(friend)
end

假设某人有5001个推特朋友。 (令人印象深刻!)我认为这将是速率限制等问题。什么是让所有所有朋友,并迭代所有朋友的最安全的方法?

我试图找出有关游标的宝石文档,但friends返回22个结果的事实让我失望......

2 个答案:

答案 0 :(得分:0)

您提到的20是API返回的每页用户数。 gem将迭代所有页面,因此它将在速率限制内返回尽可能多的用户。

如何处理速率限制,这取决于你。有一个示例here只会使进程暂停一段时间然后重试。另一种选择是退出应用程序,并在几分钟内再次使用cron等运行它,但这显然取决于您的应用程序。

答案 1 :(得分:0)

这是一个很好的问题。我遇到了同样的问题。

我可以看到如何迭代所有朋友是一个功能。但是,如果您只对前20位朋友感兴趣,那么 如何请求更多朋友:

twitter_client.friends.to_h[ :users ]

由于朋友请求返回20,这可能不是那么有用。如果您想要friend_ids或follower_ids,API最多可返回5,000。对于许多用例,5,000个就足够了。

twitter_client.friends.to_h[ :ids ]