🛠️

X APIの利用方法

に公開

概要

本ページではX APIを利用するための認証キーの取得方法を記載します。
認証方法によってアクセスできる範囲が異なるため、利用目的に応じた方法を選択する必要があります。
以下では、2種類のトークンの取得方法について記載しています。

  • Bearer Token
    • 公開データ取得に使用
  • OAuth 2.0 User Context Token
    • ユーザー固有データにアクセスする際に必要

※参考:認証方法別にできることできないこと
https://docs.x.com/fundamentals/authentication/guides/v2-authentication-mapping

事前準備

まずは共通の事前準備について記載します。

1. Developer Platformにアクセス

https://docs.x.com/x-api/getting-started/about-x-api

下図のX APIから「Free」のGet Startedを選択 ※本ページでは無料枠の利用を想定しています
X API一覧

2. 利用申請

X APIの利用目的を聞かれるので記載して、提出
agreement & policy
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は アプリケーション単位 で利用するトークンで、主に 公開データ取得(ツイートやユーザーの公開プロフィールなど) に使えます。

手順

  1. Developer Portalにログイン
    https://developer.x.com にアクセスし、自分のアカウントでログイン。

  2. プロジェクト & アプリを作成

    • 「Projects & Apps」から新規アプリを作成。
    • 名前、説明などを入力。
  3. 認証情報の確認

    • アプリ作成後、 Keys and Tokens タブを開く。
    • Bearer Token が発行されているのでコピー。
  4. 利用例

    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」「いいね」「フォロー関係」などユーザー固有データにアクセスする際に必要となります。

手順

  1. アプリ設定でOAuth 2.0を有効化

    • 「App Settings」から User authentication settings を編集
    • 下図のように、設定し保存
      • callbackURL: http://localhost:8080/callback
      • webURL: 何でもよい

  2. Client ID / Client Secretを確認

    • Client IDとClient secretが払い出されるので保存する
  3. ユーザー認証フローを実装 (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」を押してください
毎度画面上での認証をしたくない方へ

毎回認証をしたくない方は初回認証時に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")
  1. 利用例

    curl -H "Authorization: Bearer USER_ACCESS_TOKEN" \
         "https://api.x.com/2/users/me"
    

    → 認証したユーザーのプロフィール情報を取得できる。

Discussion