Twitterアカウントを削除する予定だけど、その前にツイートをデータで保存しておいたりできないかな?ということでネットで検索してみたら、たくさんの人がやってました。
ということで、私もいろいろな方のブログ記事などを参考に、TwitterのAPIで自分の過去ツイートの取得に挑戦しました。
やりたいこと
自分の過去のツイートを取得し、CSVとして保存する。
目的
- APIを使用してみる。
- 実践的なコードに慣れる。
- (アカウント削除前にツイートのバックアップをとっておく)
方法
- TwitterのAPIを取得
- requests_oauthlibを使ってツイート情報を取得
- pandasでデータを整理しCSV化
Twitter APIを取得
こちらの記事を参考にAPIを取得しました。
https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/
Elevated accessを取得する、というところまでいかないままコードを実行してエラーが出る状態でかなり悩みました。実はAPIの取得が完了していなかっただけだった…。
やってみる
ここからは以下の記事を参考にコードを書きました。(詳しく解説がありわかりやすいです。ありがたい・・・)
https://takun-physics.net/11760/
まずTwitterのAPI認証用のキーをまとめた.envファイルを作成しました。
# .env(ファイル名)
API_key=<取得したAPI KEY>
API_secret=<取得したAPI_secret>
access_tokun=<取得したaccess_tokun>
access_tokun_secret=<取得したaccess_tokun_secret>
次に、必要なライブラリをインストールします。
私はほぼライブラリを入れていないので、今回os,requests_oauthlib,python-dotenv,pandasをインストールしました。
今回のライブラリの使い方を簡単にまとめておきます。
- os:OSに依存しているさまざまな機能を利用するためのモジュール。.envファイルを読み込むときに使用した。
- requests_oauthlib:Twitter APIへの認証のために使用
- python-dotenv:.envファイルを読み込む
- pandas:dataframeの作成、CSV出力
ライブラリのインストールができたら、コードファイルを書きます。
ツイート日時、ツイート内容、いいね数を取得できるようにしました。
import os
import json
from requests_oauthlib import OAuth1Session
from dotenv import find_dotenv, load_dotenv
import pandas as pd
# .envファイルを読み込む
env_file = find_dotenv()
load_dotenv(env_file)
# APIキーの設定
API_key = os.environ.get('API_key')
API_secret = os.environ.get('API_secret')
access_tokun = os.environ.get('access_tokun')
access_tokun_secret = os.environ.get('access_tokun_secret')
twitter = OAuth1Session(API_key, API_secret, access_tokun, access_tokun_secret)
url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
# パラメータ設定(count:ツイート取得数、screen_name:アカウント名)
params = {
'count':200,
'screen_name':'<ツイートを取得したいアカウント名>'
}
#ツイートを取得
res = twitter.get(url, params=params)
# json形式に変換
timelines = json.loads(res.text)
# 空のリスト型を作成
list_created_at = []
list_text = []
list_favorite_count = []
#データを作成したリストに追加
for data in timelines:
list_created_at.append(data['created_at'])
list_text.append(data['text'])
list_favorite_count.append(data['favorite_count'])
#データごとのリストからDataframeを作成
df = pd.DataFrame({'time': list_created_at,
'text': list_text,
'favorite_count': list_favorite_count
})
#CSVに抽出
df.to_csv("tweets.csv")
これでツイート200件分をCSVで取得できました。
おわりに
丸一日TwitterAPI、コードと格闘し、なんとか自分のツイート200件分を取得することができました。一度に取得できるのは200ツイートまでのようです。
今回はすべてのツイートを保存することはできなかったので、複数回に分けてすべてのツイートを取得できるよう改善していきたいと思います。
また、ツイート時間はイギリス時間になっています。こちらも日本時間に変換したいですが、今回は体力切れなので次回にまわそうと思います。
また、今回は自分でもよくわかっているCSVデータで出力しましたが、jsonファイルが扱えるようになれれば、幅が広がるような気がしたので、そのあたりも今後の課題にしたいと思います。(今回ももしかしてただCSV形式にするだけなら、もっとコンパクトなコードがあったのかも‥?)
わからないことだらけですが、何とか途中まではでき、勉強になりました。

