2017-12-29 17 views

答えて

1

あなたのフォロワーのscreen_namesを収集しようとしているように見えます。しかし、あなたのcollectブロックでは、Twitter APIをもう一度呼び出すことになります。これは、Twitterに多くのAPI呼び出しをもたらします。レート制限を超えます。

このようにする必要はありません。 @client.followersコールを作成すると、すでにフォロワーのscreen_namesがあります。これを試してみてください:

@client.followers.map { |follower| follower.screen_name } 

あなたがそこにある他のものを見るためにGET followers/listのためのAPIドキュメントを見ることができます。また、レートは15分のウィンドウで15件に制限されています。コードを数回テストしたことがある場合は、その制限にかなり簡単に挑戦することができます。

Twitterは、1通話につき最大で200人のフォロワーしか返さないというもう一つの懸念があります。フォロワーが200人を超える場合は、フォロワーをすべて取得するために複数のAPI呼び出しを行う必要があります。フォロワーが3,000人を超える場合は、15分のレート制限ウィンドウ内でフォロワーをすべて取得できないことがあります。

twitter gemが複数のAPI呼び出しを処理します。たとえば、フォロワー数が1,000人の場合、宝石は背後で複数のAPI呼び出しを行います。宝石にはrecommended way to handle rate limitsがあります。ここでは、彼らが推薦するものです:

follower_ids = client.follower_ids('justinbieber') begin 
    follower_ids.to_a 
rescue Twitter::Error::TooManyRequests => error 
    # 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 + 1 
    retry 
end 

そのエラーは、与えられた時間枠内にあまりにも多くの要求を行ったと言っています。レート制限がクリアされるまで待つ必要があります。

これは、Twitterが言うことである:

Rate limiting of the API is primarily on a per-user basis — or more accurately described, per user access token. If a method allows for 15 requests per rate limit window, then it allows 15 requests per window per access token.

参照:https://developer.twitter.com/en/docs/basics/rate-limiting

+0

私は信者や友人との違いを取得する必要があります。 どのようにするのが最善の方法ですか?答えに感謝します。 – Jelle

+0

@result = @ client.followers ["users"]。{f | f | f ["screen_name"]}#=> NoMethodError(未定義のメソッド[<] for#): – Jelle

+0

申し訳ありません。コード例を更新しました。私はこれをテストしたので、今度はあなたのためにうまくいくはずです。 –

関連する問題