X APIの利用方法
概要
本ページではX APIを利用するための認証キーの取得方法を記載します。
認証方法によってアクセスできる範囲が異なるため、利用目的に応じた方法を選択する必要があります。
以下では、2種類のトークンの取得方法について記載しています。
- Bearer Token
- 公開データ取得に使用
- OAuth 2.0 User Context Token
- ユーザー固有データにアクセスする際に必要
※参考:認証方法別にできることできないこと
事前準備
まずは共通の事前準備について記載します。
1. Developer Platformにアクセス
下図のX APIから「Free」のGet Startedを選択 ※本ページでは無料枠の利用を想定しています
2. 利用申請
X APIの利用目的を聞かれるので記載して、提出
250字以上で入力する必要あり、自分は以下の通りに記載した(要約すると、収集し自己学習に役立てるため)
"The primary purpose of using the X API is to retrieve the latest information from my timeline and liked tweets in order to stay updated with current trends and developments in areas of personal and professional interest. I plan to use this data strictly for self-learning, research, and exploration of new ideas. By collecting and summarizing tweets on a daily basis, I can analyze emerging technologies, industry insights, and thought leadership shared on the platform. This information will help me enhance my skills as an engineer, broaden my knowledge, and support continuous personal growth. The data will not be used for commercial purposes, redistribution, or any activities beyond personal study and improvement."
日本語訳
「X API を利用する主な目的は、自分のタイムラインや「いいね」したツイートから最新情報を取得し、個人的および職業的な関心分野における動向や発展を把握することです。私はこのデータを、自己学習、研究、新しいアイデアの探求のためにのみ利用する予定です。ツイートを日次で収集・要約することで、新しい技術、業界の知見、そしてプラットフォーム上で共有されるリーダーの考えを分析できます。これにより、エンジニアとしてのスキルを高め、知識を広げ、継続的な自己成長を支えることができます。このデータは商業目的や再配布、個人の学習・改善以外の活動には使用しません。」
Bearer Tokenの取得手順
Bearer Tokenは アプリケーション単位 で利用するトークンで、主に 公開データ取得(ツイートやユーザーの公開プロフィールなど) に使えます。
手順
-
Developer Portalにログイン
→ https://developer.x.com にアクセスし、自分のアカウントでログイン。 -
プロジェクト & アプリを作成
- 「Projects & Apps」から新規アプリを作成。
- 名前、説明などを入力。
-
認証情報の確認
- アプリ作成後、 Keys and Tokens タブを開く。
- Bearer Token が発行されているのでコピー。
-
利用例
curl -H "Authorization: Bearer YOUR_BEARER_TOKEN" \ "https://api.x.com/2/tweets?ids=20"
→ ID=20のツイートを取得できる。
OAuth 2.0 User Context Tokenの取得手順
OAuth 2.0 User Context Tokenは ユーザーの同意を得て取得するアクセストークン で、
「自分のアカウント情報」「DM」「いいね」「フォロー関係」などユーザー固有データにアクセスする際に必要となります。
手順
-
アプリ設定でOAuth 2.0を有効化
- 「App Settings」から User authentication settings を編集
- 下図のように、設定し保存
- callbackURL:
http://localhost:8080/callback
- webURL: 何でもよい
- callbackURL:
-
Client ID / Client Secretを確認
- Client IDとClient secretが払い出されるので保存する
- Client IDとClient secretが払い出されるので保存する
-
ユーザー認証フローを実装 (by Python)
今回はFlaskを使ってユーザー認証を行いアクセストークンを取得する処理を記載します(※個人的にPythonで実装するアプリケーションに組み込むことを想定してたので、このような方法を例として載せています)。- 前段で取得したClient IDとClient secretはそれぞれ環境変数
CLIENT_ID
,CLIENT_SECRET
として設定しておいてください。
from flask import Flask, request, redirect import requests, os app = Flask(__name__) CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") REDIRECT_URI = "http://localhost:8080/callback" CODE_VERIFIER = "challenge" # 本来はランダム生成が望ましい # 1. 認可URLにリダイレクト @app.route("/") def login(): url = ( f"https://twitter.com/i/oauth2/authorize" f"?response_type=code" f"&client_id={CLIENT_ID}" f"&redirect_uri={REDIRECT_URI}" f"&scope=tweet.read%20users.read%20bookmark.read%20offline.access" f"&state=state123" f"&code_challenge={CODE_VERIFIER}" f"&code_challenge_method=plain" ) return redirect(url) # 2. コールバックで認可コード受け取り → アクセストークン取得 @app.route("/callback") def callback(): code = request.args.get("code") token_url = "https://api.twitter.com/2/oauth2/token" data = { "grant_type": "authorization_code", "code": code, "redirect_uri": REDIRECT_URI, "client_id": CLIENT_ID, "code_verifier": CODE_VERIFIER } resp = requests.post(token_url, data=data) tokens = resp.json() access_token = tokens.get("access_token") refresh_token = tokens.get("refresh_token") return access_token, refresh_token if __name__ == "__main__": app.run(port=8080, debug=True)
- 実行すると下図のような画面が立ち上がるので「Authorize app」を押してください
- 前段で取得したClient IDとClient secretはそれぞれ環境変数
毎度画面上での認証をしたくない方へ
毎回認証をしたくない方は初回認証時にrefresh_token
を取得しておけば、以後はそれをもとにaccess_token
が取得できます。
以下に refresh_token
から access_token
を取得するpythonの実装を記載します。
import os
import requests
CLIENT_ID = os.getenv("CLIENT_ID")
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
TOKEN_URL = "https://api.twitter.com/2/oauth2/token"
def refresh_access_token(refresh_token: str):
"""refresh_token を使ってアクセストークンを更新"""
data = {
"client_id": CLIENT_ID,
"grant_type": "refresh_token",
"refresh_token": refresh_token,
}
response = requests.post(
TOKEN_URL,
data=data,
auth=(CLIENT_ID, CLIENT_SECRET),
headers={"Content-Type": "application/x-www-form-urlencoded"},
)
tokens = response.json()
return tokens.get("access_token")
-
利用例
curl -H "Authorization: Bearer USER_ACCESS_TOKEN" \ "https://api.x.com/2/users/me"
→ 認証したユーザーのプロフィール情報を取得できる。
Discussion