Twitter APIでツイート取得してみた

python

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形式にするだけなら、もっとコンパクトなコードがあったのかも‥?)

わからないことだらけですが、何とか途中まではでき、勉強になりました。

タイトルとURLをコピーしました