1

我对Twitter gemfriends中的方法感到困惑。我看到Twitter::REST::FriendsAndFollowers#friends使用GET 朋友/列表请求和方法。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 个 Twitter 朋友。(令人印象深刻!)我认为这将是速率限制等问题。获得所有朋友并迭代所有朋友的最安全方法是什么?

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

4

2 回答 2

0

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

至于如何处理速率限制,这取决于你。这里有一个例子,它只会让进程休眠一段时间,然后重试。另一种选择是退出应用程序并在几分钟内使用 cron 之类的东西再次运行它,但这显然取决于您的应用程序。

于 2014-07-03T20:03:38.050 回答
0

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

我可以看到迭代所有朋友是一个功能。但是,如果您只对前 20 位好友感兴趣,以下是不再请求好友的方法:

twitter_client.friends.to_h[ :users ]

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

twitter_client.friends.to_h[ :ids ]
于 2016-09-04T19:40:05.200 回答