【Python】Twitter API V2 でツイートを取得する
準備
Twitter APIを使用するためにはTwitterアカウントと開発者アカウントの登録が必要です。https://developer.twitter.com/から登録申請を行います。
Twitter APIの利用用途などを英語で書く必要があります。Google翻訳やDeepL翻訳を使って書けば問題なく申請は通ると思います。
ツイート取得
ツイートを取得するためにSearch Tweetsを使いました。このAPIでは直近7日間のツイートを検索することができます。
「toeic」というキーワードを含むリツイートを除いたツイートを取得するPythonプログラムを以下のように作成してみました。検索したツイートはファイルへ出力します。
import requests
import pandas as pd
import emoji
import re
# 発行したBearer tokenを指定する
bearer_token = 'xxx'
# Twitter APIのURL
search_url = "https://api.twitter.com/2/tweets/search/recent"
# 検索クエリ
query_params = {'query': 'toeic -is:retweet', 'tweet.fields': 'author_id', 'max_results': 100}
def create_headers(bearer_token):
headers = {"Authorization": "Bearer {}".format(bearer_token)}
return headers
def connect_to_endpoint(url, headers, params):
has_next = True
c = 0
result = []
while has_next:
response = requests.request("GET", search_url, headers=headers, params=params)
if response.status_code != 200:
raise Exception(response.status_code, response.text)
response_body = response.json()
result += response_body['data']
rate_limit = response.headers['x-rate-limit-remaining']
print('Rate limit remaining: ' + rate_limit)
c = c + 1
has_next = ('next_token' in response_body['meta'].keys() and c < 300)
# next_tokenがある場合は検索クエリに追加
if has_next:
query_params['next_token'] = response_body['meta']['next_token']
return result
# Pandasのデータフレームを使ってデータを加工
def create_data_frame(json_data):
df = pd.DataFrame(json_data)
# ツイート中のURLを削除
df['text'] = df['text'].apply(lambda x: re.sub(r'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+', '', x))
# ツイート中の絵文字を削除
df['text'] = df['text'].apply(lambda x: ''.join(c for c in x if c not in emoji.UNICODE_EMOJI))
return df
# データフレーム中のツイートデータをCSVファイルへ出力、 indexは出力しない
def write_csv(data_frame):
data_frame['text'].to_csv('toeic.csv', index = False)
headers = create_headers(bearer_token)
json_response = connect_to_endpoint(search_url, headers, query_params)
data_frame = create_data_frame(json_response)
write_csv(data_frame)
1リクエストでは最大100件まで取得できます。検索結果が100件より多い場合はレスポンス中にnext_tokenというキー名でトークンが返されます。次の100件の結果を取得するためにはリクエストパラメータにnext_tokenを追加する必要があります。