77557


Twitter
APIで複数回のリクエストを繰り返してツイートを取得しようとしているのですが、リクエスト制限となりました。これを回避するためにはどうすれば良いのか教えていただけますでしょうか。

コードは以下の通りです。

[code]

    import json
    from requests_oauthlib import OAuth1Session
    
    twitter = OAuth1Session(consumer_key, consumer_secret, access_token_key, access_token_secret)
    
    url = "https://api.twitter.com/2/tweets/search/all/prod.json"
    
    #paramsに検索ワードや件数、日付などを入力
    params = {'query':'(#abc)', 
            'start_time': "2017-10-17T00:00:00Z",
            'end_time': "2017-10-18T00:00:00Z", 'tweet.fields':'created_at'}
    
    #上記で設定したパラメーターをget関数を使い指定URLから取得
    res = twitter.get(url, params = params)
    
    if res.status_code == 200:
    
        #後でpandasで処理するためリスト化
        created_at = []
        text = []
        retweet_count = []
        favorite_count = []
    
        #100件を超えるデータ用に繰り返し処理で対応
        while True:
            res = twitter.get(url, params = params)
            tweets = json.loads(res.text)
            tweet_list = tweets["results"]
            
            for tweet in tweet_list:
                created_at.append(tweet["created_at"]) #投稿日時
                text.append(tweet["text"]) #投稿本文
                retweet_count.append(tweet["retweet_count"]) #リツイート数
                favorite_count.append(tweet["favorite_count"]) #いいね数
                user = tweet["user"]
    
            #対象Tweetが101件以上となりnextページがある場合
            if "next"  in tweets.keys():
               #nextの値をパラメータに追加する
                params['next'] =  tweets["next"]
                print(params)
                tweet_list = tweets["results"]
            
            #nextページがない場合（100件以内の場合と最終ページ用）
            else:
                print("最終ページなので取得終了")
                break 
    
[/code]

以下のようにリクエスト制限がかかりました。

[code]

    {'title': 'Too Many Requests',
     'type': 'about:blank',
     'status': 429,
     'detail': 'Too Many Requests'}
    
[/code]


CC BY-SA 4.0
2021-06-13T11:53:57.260
77527
2021-06-27T06:53:12.490
2021-06-27T06:53:12.490
3060
45479
question
python twitter webapi
Twitter API でのリクエスト制限に対応するには？


`Too Many Requests`というメッセージから、Twitter
APIの利用制限にひっかかっているとわかります。[公式のドキュメント](https://developer.twitter.com/en/docs/twitter-
api/tweets/search/api-reference/get-tweets-search-all)を見てみると、Rate
limit（利用制限）という項には次のように書かれています（"15-minute window"というのは、「過去15分間で」という意味です）。

> App rate limit: 300 requests per 15-minute window  
>  App rate limit: 1 request per second

利用制限や、その回避方法については[ドキュメントで詳しく解説されています](https://developer.twitter.com/en/docs/twitter-
api/rate-
limits)。この場合、検索結果を一定期間保存しておいて、以降の同じクエリに対してAPIを呼び出さない方法が考えられます。開発の場面では試行錯誤を繰り返す間に制限にひっかかることもよくありますが、その場合は大人しく待つことになります。


CC BY-SA 4.0
2021-06-15T02:24:45.980
77557
2021-06-15T02:24:45.980
7500
77527
answer