1

Twitter gemfriendsのメソッドについて混乱しています。Twitter::REST::FriendsAndFollowers#friendsGET 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 人の Twitter 友達を持っているとしましょう。(印象的です!) これはレート制限などの問題になると思います.すべての友達を取得し、それらすべてを反復処理する最も安全な方法は何ですか?

カーソルに関する宝石のドキュメントを理解しようとしましたが、friends22の結果が返されたという事実は私を失望させています...

4

2 に答える 2

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 に答える
0

言及した 20 は、API によって返されるページあたりのユーザー数です。gem はすべてのページを反復処理するため、レート制限内でできるだけ多くのユーザーを返します。

レート制限をどのように処理するかは、あなた次第です。ここに、プロセスをしばらくスリープさせてから再試行する例があります。もう 1 つのオプションは、アプリを終了し、数分後に cron などを使用して再度実行することですが、明らかにアプリによって異なります。

于 2014-07-03T20:03:38.050 に答える