以前TwiterAPI V2を使用してツイート検索を行う記事を投稿したのですが、V2だと従来のV1.1と比較してツイート件数や取得できる情報に制限があったので今回はそれをできるだけなくす方法を紹介したいと思います。
以前の記事:【Python】TwitterAPI V2のBearer tokenを使ってツイート検索をしてみる
前準備:Tweepyのバージョン確認
本記事はTweepy バージョン4.0以上を想定しています。3.Xだと動作しないので注意してください。
PCにインストールされているtweepyのバージョンは以下で確認できます。
import tweepy print(f'tweepyのバージョンは{tweepy.__version__}です')
参照:Tweepyで 「API object has no attribute search;」のエラー出る原因と解決法
バージョンが3.Xの場合は以下のコマンドでバージョンをアップグレードしてください。
$ pip install tweepy --upgrade
Tweepy Paginatorを使用して100件以上のツイートを取得する
Tweepyには4.0から
tweepy.Paginator
を利用すると、ページネーションの処理を書かずに100件以上のツイートが取得できます。
書き方は以下のようになります。
import tweepy import pandas as pd from datetime import datetime,timedelta BAERER = 'xxxx' # 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_tweepy, 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)
コードの解説ですがまず
query = ‘コロナワクチン lang:ja -is:retweet’
の部分で検索クエリを指定しています。
今回はキーワードに加えて日本語のみ・リツイート削除を設定しています。
クエリのパラメーターについては以下が詳しくまとまっています
続いて
tweet_fields=[‘id’,’created_at’,’text’,’author_id’,’lang’,]
の部分は取得する情報についてを設定しています。
ここを何も指定しないとツイートのテキスト情報しか取得できません。
ここで使えるフィールドは以下の公式ドキュメントを参照してください
公式ドキュメント:https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user
(APIの権限によってはフィールドにも使えるものと使えないものもあります。)
コメント
[…] 関連記事:TweepyとTwitter API V2を使って大量のツイート+詳細情報をスクレイピングする […]
>>> 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)
…
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘start_time_twint’ is not defined
コードを拝見させていただき、実行してみましたが、
上記エラーでつまづいて、先に進めませんでした。
アドバイスいただけたら幸いです。
初心者で、現在勉強中です。
Twitterは、Essentialです。
権限をElevatedに昇格させました
コメントありがとうございます。
コードを一部修正しましたのでお手数が再度コピペして試してみていただけますと幸いです
もし他にも何かございましたら以下でご相談いただけますと幸いです。
https://menta.work/user/26168
よろしくお願いいたします。
お返事ありがとうございます。
無事作動しました。
触り始めなので、コピペしながら修正で、エラーの連続ですが、
今後、拝見させていただきます。
感謝申し上げます。
[…] 関連記事:TweepyとTwitter API V2を使って大量のツイート情報をスクレイピングする […]
[…] 関連記事:TweepyとTwitter API V2を使って大量のツイート情報をスクレイピングする […]