Python

TwitterAPIでツイートを全件取得する方法【Python】

今回はPythonでTwitterAPIを使って特定のユーザーの投稿をすべて取得する方法について解説します。
使用するライブラリはTweepyというライブラリです。

TwitterDeveloperのアカウントさえ取得できれば、非常に簡単にTwitterAPIを使うことができるので、ぜひチャレンジしてみてください!

もくじ

  1. TwitterAPIを使うための準備
  2. Pythonの実行環境の準備
  3. ソースコード
  4. TwitterAPIでユーザーの全投稿を取得する
  5. 配列をTextファイルに書き込む
  6. まとめ

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に制限されているそうです。

あるみ
あるみ
僕のツイート数は2033!全然足りないよ!

もちろん回避策がありました。
Tweepyは、投稿の取得のためにPageという仕組みを用いており、取得上限200というのは、このPageに対する制限のようです。

つまり、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をつくる方法

POSTED COMMENT

  1. perilla より:

    こんにちは。
    かしわばゆきさんのソースコードを
    アクセスキーとアクセストークンのみ変更し、実行してみたのですが、
    tweepy.error.TweepError: [{‘code’: 32, ‘message’: ‘Could not authenticate you.’}]
    と出てきます。
    お忙しい中、大変恐れ入りますが、
    アドバイスをして頂けると大変嬉しいです。
    よろしくお願いいたします。

    • Kashiwaba Yuki より:

      コメントありがとうございます。
      回答が大変遅くなり申し訳ありません。

      エラーメッセージを見る限り認証がうまくいっていないようですね…。
      アクセスキーとアクセストークンが正しいかどうか一度確認しみてください。
      もしかしたら、古いトークンを利用している可能性もあるので、TwitterDeveloperからトークンの再発行をしてみると解決するかもしれません。

COMMENT

メールアドレスが公開されることはありません。