9

ruby gem Twitter ( https://github.com/sferik/twitter ) を使用して、Twitter API からユーザーのフォロワーを取得しようとしています。

ドキュメント ( https://dev.twitter.com/docs/api/1/get/followers/ids ) によると、twitter は 1 回の要求で 5000 人のユーザーを返します。レート制限の設定により、Twitter では 15 分間に 15 回の通話が可能です ( https://dev.twitter.com/docs/rate-limiting/1.1/limits )

問題:

75000 人 (5000*15) を超えるフォロワーを持つユーザーのフォロワーを取得すると、「レート制限を超えました」というエラーが表示されます。

gem メソッド Twitter.followers_id(user) を使用すると、カーソルを使用して 5000 のバケットではなく、すべてのフォロワーを自動的に取得します。gem がこれを内部的に処理していると思われるため、これらのリクエストを制御または遅延することはできません。

gem のドキュメントには、レート制限の例 ( https://github.com/sferik/twitter#rate-limiting ) がありますが、それが既に取得したユーザーを処理するのか、最初からやり直すのかはわかりません。

私の質問は、すべてのフォロワーを取得するために、これにスロットルメカニズムをいつどのように適用するのですか?

よろしく

4

2 に答える 2

7

この問題の回避策については、こちらで詳しく説明されています

MAX_ATTEMPTS = 3
num_attempts = 0
begin
  num_attempts += 1
  retweets = Twitter.retweeted_by_user("sferik")
rescue Twitter::Error::TooManyRequests => error
  if num_attempts <= MAX_ATTEMPTS
    # 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
    retry
  else
    raise
  end
end
于 2013-08-17T04:42:24.903 に答える