【python】Twitter APIで特定ユーザのツイートを取得する方法

本ページには PR が含まれます。

PythonでTwitterアカウントのツイート情報を取得したい…

今回はPythonを使って特定のTwitterアカウントのツイート情報を取得する方法をご紹介します。

サンプルコードを見ながらサクサク処理を試せます。ぜひ参考にしてみてください。


なお、Twitter APIの利用には事前に利用登録が必要です。
登録がまだの方は以下の記事でわかりやすく解説しているので参考にしてみてください!!


目次

ライブラリのインストール

Twitter APIのアクセスにはOAuth認証を使用します。

OAuth認証をカンタンに実装できる「requests_oauthlib」ライブラリをインストールしましょう。

コマンドプロンプト(Windows)もしくはターミナル(macOS)で以下を実行します。

pip install requests_oauthlib

コンソールに「Successfully installed 〜〜〜」と表示されていればインストールは成功です。


OAuth認証でアカウントにアクセス

OAuth認証とは

OAuthは、ユーザアカウントのアクセストークンを使ってTwitter(サービス)へのアクセス権限をアプリに与え、 APIのスムーズな利用を可能にする認証規格です。

Twitter APIをより安全に利用するため、ユーザはアクセストークンを利用してTwitterサーバーと情報のやりとりを行います。

OAuth認証の実装 (サンプルコード)

インストールしたrequests_oauthlibライブラリを使ってPython自分のTwitterアカウント権限を通してみましょう。

# ライブラリのインポート
from requests_oauthlib import OAuth1Session

# キーの設定
API_KEY = "あなたのAPI Key" 
API_KEY_SECRET = "あなたのAPI Key Secret"
ACCESS_TOKEN = "あなたのAccess Token"
ACCESS_TOKEN_SECRET = "あなたのAccess Token Secret"

# OAuth認証を通して「twitter_oauth」という変数に格納
twitter_oauth = OAuth1Session(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

これでTwitter APIを自由に扱えるようになりました!!


特定アカウントのツイート取得

使用するAPIリソースURL

api_resource = "https://api.twitter.com/1.1/statuses/user_timeline.json"

APIリクエストに関する情報

レスポンスのフォーマットjsonフォーマット
認証が必要か必要
リクエスト上限回数/15分1500
リクエスト上限回数/24時間100000

APIリクエストには上限回数があります。
短時間に大量のリクエストを送信するとサーバーに負荷がかかってしまうため、なるべく間隔を空けましょう

さっそくTwitterアカウントのツイートを取得してましょう。

サンプルコード

import json
from requests_oauthlib import OAuth1Session

# キーの設定
API_KEY = "あなたのAPI Key" 
API_KEY_SECRET = "あなたのAPI Key Secret"
ACCESS_TOKEN = "あなたのAccess Token"
ACCESS_TOKEN_SECRET = "あなたのAccess Token Secret"

# OAuth認証
twitter = OAuth1Session(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

# APIリソースURL
api_resource = "https://api.twitter.com/1.1/statuses/user_timeline.json"

# 取得するデータの設定
params = {
    "screen_name": "junpei_style",
    "count": 150,
    "exclude_replies": "true",
    "include_rts": "false"
}

res = twitter.get(api_resource, params=params)
response = json.loads(res.text)
print(response)

変数paramsで取得したいデータを設定しています。

指定できる主なパラメータ

パラメータ指定する値の例意味
screen_name“junpei_style” などの文字列ツイートを取得するアカウント
user_id1336480837815037952などのint型同上。
count150 などのint型取得するツイートの上限数 (最大200)
exclude_replies“true”, “false”のどちらかリプライツイートを排除するか
include_rts“true”, “false”のどちらかリツイートを含めるか

実行結果(一部抜粋)

# 実行結果
[{'created_at': 'Fri Aug 26 10:58:10 +0000 2022',
  'id': 1563118601238085632,
  'id_str': '1563118601238085632',...
# 以下数百行と続く

指定したTwitterアカウントのツイートを取得できています!!

ですが、レスポンスそのままではデータが見づらいですね…。


出力データを見やすくする

ツイート情報を取得できましたが、jsonフォーマットのままだとわかりづらいですよね。

pandasのDataFrameにまとめて、csv出力していきましょう。

# pandasをインポート
import pandas as pd
import json
from requests_oauthlib import OAuth1Session

API_KEY = "あなたのAPI Key" 
API_KEY_SECRET = "あなたのAPI Key Secret"
ACCESS_TOKEN = "あなたのAccess Token"
ACCESS_TOKEN_SECRET = "あなたのAccess Token Secret"

twitter = OAuth1Session(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api_resource = "https://api.twitter.com/1.1/statuses/user_timeline.json"

params = {
    "screen_name": "junpei_style",
    "count": 150,
    "exclude_replies": "true",
    "include_rts": "false"
}
res = twitter.get(api_resource, params=params)
response = json.loads(res.text)

# pandasのDataFrameにまとめる
df = pandas.DataFrame(response)
# DataFrameをcsvに書き出す
df.to_csv("user_tweet_datas.csv", encoding="utf-8-sig")

jupyter notebookで出力確認すると以下のようになります。

出力結果

アカウントのツイート情報レスポンス

だいぶ見やすくなりましたね!!


データフレームの主要な列の意味

列名意味
created_atツイート日時
idツイートid
id_strツイートidの文字列型
textツイートの本文
truncatedツイート本文が省略されているか
entitiesハッシュタグやユーザメンション情報
sourceツイートのリンクURL
retweet_countリツイートされた数
favorite_countいいねされた数

これらのデータがあれば、著名なTwitterアカウントのツイートを分析することもできますね。

まとめ

今回はTwitter APIを使って特定アカウントのツイート取得を紹介しました。

Twitter分析にも活用できるので、ぜひ参考にしてみてください。


Twitter API活用方法も紹介しているので、合わせてどうぞ

よかったらシェアしてね!
目次