わたくし、最近Tweetを収集してセンチメント分析をすることを楽しんでいる(https://twitter.com/tweet_mood_ai
)のですが、先日までに書いたコードがAPI v1.1を利用したものになっていたことに気づきました。
遠からず使えなくなるAPIを使ったままにするのは忍びないので書き直しました。
TweepyからAPI V2を利用してたくさんのTweetを取得するサンプルコードはあまり見かけなかったので、お役に立てば幸いです。
tweepy.Paginator
を利用すると、ページネーションの処理を書かなくていいのでらくちんです。
22/5/19:取得したい時間幅の指定(通常のAPIでは過去7日まで)ができるようにしました。
TweepyからTwitter API V2を利用してTweetを取得するコード
import tweepy
import pandas as pd
from datetime import datetime,timedelta
BAERER = '*************' # Twitter Developerで取得したBearer Token
query = '吉野家 lang:ja -is:retweet' # 検索するキーワード 検索条件指定してOK
limit = 500 # 取得したいツイート数
# 取得対象のツイートの時間幅を指定する この例では実行前の24時間としています。
# iso形式のUTC時間で指定しないと正しく時間指定ができない模様。
# 指定した時間幅に、limitで指定した件数以上のツイートがあってもlimit以上は取得しません。
now = datetime.now()
now = now.replace(minute=0, second=0, microsecond=0)
end_time_tweepy = str(now.isoformat())+'+09:00'
start_time = now - timedelta(days=1)
start_time_tweepy = str(start_time.isoformat())+'+09:00'
client = tweepy.Client(BAERER)
df_tweet = pd.DataFrame()
for tweet in tweepy.Paginator(client.search_recent_tweets, query=query, start_time=start_time_twint, end_time=end_time_tweepy,
tweet_fields=['id','created_at','text','author_id','lang',],
max_results=100).flatten(limit=limit):
#print(tweet.text)
df_tweet = pd.concat([df_tweet, pd.DataFrame([tweet.data])], ignore_index=True)
print(df_tweet)