Pythonパッケージのtweepy
を使ってTweet取得しました。少し前に短期間で実装したので、記憶が曖昧な部分も多いのですが、とりあえず記録に残しておきます。
search_tweets
関数を使う記事は多かったのですが、search_full_archive
関数を扱う記事が少なかったので残しておきます。search_tweets
関数は直近のTweetしか検索できません。
そもそもAPIのバージョンを意識しないでコピペしたので、Tweepy
のAPI V1.1を使っています(v2が最新)。V2のやり方を知りたい人はこちら。
環境
Python/パッケージ | Version |
---|---|
Python | 3.9.13 |
tweepy | 4.10.1 |
pandas | 1.4.3 |
手順
前提
Twitter APIの申請が終わっていることです。申請手順は先程と同じリンクに従えばすぐ終わります。
1. Sandbox作成
search_full_archive
関数はsandbox環境であれば無料で使用できます。そのための設定が必要です。以下のURLからDeveloper Portalにアクセス。
"Dev environment label"にPython側で指定する名前を入れ、"App"に申請したアプリケーション名を入力。
2. コードによる取得
適当なクエリで検索。-is_retweet -RT
でリツイート除去しています(もっと賢いリツイート除去方法があるかもしれない)。
認証部分はご自身で入れてください。
import pandas as pd
import tweepy
def get_twitter_api():
auth = tweepy.OAuthHandler(<CONSUMER_KEY>, <CONSUMER_SECRET>)
auth.set_access_token(<ACCESS_TOKEN, <ACCESS_SECRET>)
return tweepy.API(auth)
api = get_twitter_api()
tweets = tweepy.Cursor(api.search_full_archive, label='sandbox',
fromDate="201001010000", query='安倍晋三 -is_retweet -RT')\
.items(100)
#取得したツイートを一つずつ取り出して必要な情報をtweet_dataに格納する
tw_data = []
LABELS=['ツイート時刻', 'ツイート本文', 'いいね数', 'リツイート数', '返信数', 'place']
for tweet in tweets:
#tweet_dataの配列に取得したい情報を入れていく
tw_data.append([
tweet.created_at, #UTCだったかも
tweet.text,
tweet.favorite_count,
tweet.retweet_count,
tweet.reply_count,
tweet.place
])
df = pd.DataFrame(tw_data,columns=LABELS)
print(df)
取得結果。
ツイート本文 いいね数 リツイート数 返信数 place
0 #この人を国葬って正気ですか\nこのタグ使ってる奴らのツイート見れば、自民公明以外も宗教との... 0 0 0 None
1 安倍晋三に相応しい巨匠ですね https://t.co/4aDHALaVnV 0 0 0 None
2 安倍晋三さんのどこが国葬に値しない政治家なのか誰か教えてくれ(執筆:フジテレビ 上席解説委員... 0 0 0 None
3 #マイあさ\n安倍晋三氏の葬儀は、旧統一協会、国民会議、連立与党の公明党と合同し、自由民主党... 0 0 0 None
4 #この人を国葬って正気ですか \n例えるなら超みたいに理不尽な仕打ちをする全王に怒らずにダン... 0 0 0 None
.. ... ... ... ... ...
95 @MeMe79968641 @kazu10233147 統一教会よりも恐ろしい安倍晋三教。 0 0 0 None
96 安倍晋三さんのどこが国葬に値しない政治家なのか誰か教えてくれ | FNNプライムオンライン ... 0 0 0 None
97 安倍晋三さんのどこが国葬に値しない政治家なのか誰か教えてくれ(FNNプライムオンライン)\n... 0 0 1 None
98 #自民党気持ち悪い \nこの展開だとフリーザが安倍晋三真理教の信者に敵視されていてデマや誹謗... 0 0 0 None
99 安倍晋三さんのどこが国葬に値しない政治家なのか誰か教えてくれ(FNNプライムオンライン) -... 3 0 0 None
おまけ: メンションとリンク除去
メンションとリンクを後でツイート本文から除去しています(ハッシュタグは除去なし)。
import re
line = re.sub(r"@(\w+) ", "", line)
line = re.sub(r"https?://[\w/:%#\$&\?\(\)~\.=\+\-\"]+", "", line)