前提・実現したいこと
Twitter APIを用いて、特定の期間に投稿された、指定のハッシュタグ付きのツイートを全て取得したいです。
以下のコードで500ツイートごとのデータ取得をnext_tokenがなくなるまで繰り返しています。
発生している問題・エラーメッセージ
TwitterConnectionError: HTTPSConnectionPool(host='api.twitter.com', port=443): Read timed out. (read timeout=5)
該当のソースコード
Python
1#ツイートを保存するデータフレームを作成 2df = pd.DataFrame() 3 4api = TwitterAPI(consumer_key, 5 consumer_secret, 6 auth_type='oAuth2', 7 api_version='2') 8 9#最初のquery('next_token'なし) 10q = {'query':'(#abc -RT lang:en)', 11 'start_time': "2017-10-16T00:00:00Z", 12 'end_time': "2018-03-31T23:59:59Z", 'tweet.fields':'created_at', 'max_results': '500'} 13 14#ツイートをdfに保存 15r = api.request('tweets/search/all', q) 16response_data = r.json() 17df_a = pd.DataFrame(response_data['data']) 18df = pd.concat([df, df_a]) 19 20#'next_token'が出て来なくなるまでデータ取得を繰り返す 21while 'next_token' in response_data["meta"]: 22 #rate limitを避けるため4秒間スリープ 23 time.sleep(4) 24 token = response_data["meta"]['next_token'] 25 #query('next_token'付き) 26 q = {'query':'(#abc -RT lang:en)', 27 'start_time': "2017-10-16T00:00:00Z", 28 'end_time': "2018-03-31T23:59:59Z", 29 'tweet.fields':'created_at', 30 'max_results': '500', 31 'next_token': token} 32 r = api.request('tweets/search/all', q) 33 if r.status_code == 200: 34 response_data = r.json() 35 df_a = pd.DataFrame(response_data['data']) 36 df = pd.concat([df, df_a]) 37 else: 38 print("ERROR: %d" % res.status_code)
試したこと
おそらくリクエスト回数が上限を超えてエラーが起きたため、15分間に300回のリクエストが上限のため、リクエストごとに4秒間のスリープを入れた。