我对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个结果的事实让我失望......
答案 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 ]