今回はPythonでTwitterAPIを使って特定のユーザーの投稿をすべて取得する方法について解説します。
使用するライブラリはTweepyというライブラリです。
TwitterDeveloperのアカウントさえ取得できれば、非常に簡単にTwitterAPIを使うことができるので、ぜひチャレンジしてみてください!
もくじTwitterAPIを使うための準備
PythonでTwitterAPIを使ってデータを抽出するためには、必要なものが3つあります。
1.TwitterAPIのアクセスキーとアクセストークン
2.Pythonの実行環境
3.TwitterAPIを操作するためのライブラリ
TwitterAPIのアクセスキーとアクセストークンは、Twitter Developerに登録すると取得できます。
ただ、年々規約が厳しくなっており、取得の審査にある程度の日数も必要なので注意が必要です。
登録方法がマイナーチェンジを繰り返していることもあり、混乱をさけるためにも今回はTwitterDeveloperの登録方法については割愛します。
ぜひその時点で最新の記事を参考にしていただければと思います。
今だとこちらの記事が参考になります。
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ
Pythonの実行環境の準備
今回のコードを動かすにあたって使用した環境は以下の通りです。
Python3.7.3 tweepy==3.8.0
Pythonの環境構築の方法はいくつか種類があります。
Windowsであれば、最近公開されたMicrosoftStore版のPythonや、全部入りのAnacondaなどがおすすめです。
ソースコード
細かい解説は後回しにして、先にコードを貼っておきますね。
こちらのプログラムを動かすと、@yuki_kashiwabaという、僕のTwitterアカウントの投稿を最大2200件取得してくれます。
import tweepy Consumer_key = 'TwitterAPI登録申請して取得した API key' Consumer_secret = 'TwitterAPI登録申請して取得したConsumer_secret' Access_token = 'TwitterAPI登録申請して取得したAccess_token' Access_secret = 'TwitterAPI登録申請して取得したAccess_secret' # OAuth認証 auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret) auth.set_access_token(Access_token, Access_secret) api = tweepy.API(auth) #ツイート取得 data = [] #最大2200件のツイートを取得するためのページ pages = [1,2,3,4,5,6,7,8,9,10,11] for page in pages: results = api.user_timeline(screen_name="yuki_kashiwaba", count=200, page=page) for r in results: #r.textで、投稿の本文のみ取得する data.append(r.text) line = ''.join(data) with open("text.txt", 'wt') as f: f.write(line)
TwitterAPIでユーザーの全投稿を取得する
では、コードを見てみましょう。
各種トークンさえ用意できれば、後はたったの一行、下のコードを書くだけで投稿を取得できる、・・・はずでした。
#IDが@yuki_kashiwabaというユーザーの投稿を取得 api.user_timeline(screen_name="yuki_kashiwaba")
残念ながら、api.user_timelineというメソッドは、投稿の取得上限が200に制限されているそうです。
もちろん回避策がありました。
この取得制限は、api.user_timelineというメソッドに対する制限なので、Pageの数を増やすことで対応可能です。Tweepyは、投稿の取得のためにPageという仕組みを用いており、取得上限200というのは、このPageに対する制限のようです。
2020年6月14日 修正
上記の内容に誤りがあり、修正しました。
つまり、Pageの値を指定してあげれば、最大で 200×Pageの数 のツイートを取得できるようになるわけです。
#ツイート取得 data = [] #最大2200件のツイートを取得するためのページ pages = [1,2,3,4,5,6,7,8,9,10,11] for page in pages: results = api.user_timeline(screen_name="yuki_kashiwaba", count=200, page=page) for r in results: data.append(r.text)
上のコードでは、僕の2033件のツイートをすべて取得するために、11ページまで参照するように指定していますね。
これで全ツイートを取得することができました!
配列をTextファイルに書き込む
これはおまけです。
取得したツイートを、テキストマイニングなどに使えるようにファイルに保存しましょう。
今回はTextファイルに保存することにします。
line = ''.join(data) with open("text.txt", 'wt') as f: f.write(line)
できました。
Pythonはべんり。
まとめ
今回は、取得したTweetを用いてテキストマイニングを行って、オリジナルのWordcloudを作ろうという企画の一環でした。
今回取得した投稿一覧のTextファイルを使ってWordcloudを作成します。
実はこのプログラムは、WordCloudで自分のツイートをビジュアライズする一環で作ったものでした。
WordCloudの作り方はこちらの記事にまとめてありますので、ぜひ読んでみてください。
Pythonで自分のツイートを分析して、WordCloudをつくる方法
こんにちは。
かしわばゆきさんのソースコードを
アクセスキーとアクセストークンのみ変更し、実行してみたのですが、
tweepy.error.TweepError: [{‘code’: 32, ‘message’: ‘Could not authenticate you.’}]
と出てきます。
お忙しい中、大変恐れ入りますが、
アドバイスをして頂けると大変嬉しいです。
よろしくお願いいたします。
コメントありがとうございます。
回答が大変遅くなり申し訳ありません。
エラーメッセージを見る限り認証がうまくいっていないようですね…。
アクセスキーとアクセストークンが正しいかどうか一度確認しみてください。
もしかしたら、古いトークンを利用している可能性もあるので、TwitterDeveloperからトークンの再発行をしてみると解決するかもしれません。
こんにちは。
本記事を参考にさせていただきました。
おかげさまで、3000件超ものツイートを取得できました。ありがとうございます。
ところが、過去180日のツイートしか取得できない事象に苛まれており、
TwitterAPI上の制限?とは睨んでいるのですが、公式のリソースも見つからず・・・。
お手数おかけしますが、アドバイスを頂戴できると幸いです。
よろしくお願いいたします。
Motoさん、コメントありがとうございます!
ちなみに本件、どのメソッドをご利用されているでしょうか??
こちらの記事を見ると、TwitterAPIの無料プランでは7日前まで、有料プランでも180日前までとのことで、こちらが関係あるのではと推察しております。
https://gaaaon.jp/blog/twitterapi