メインコンテンツへスキップ
X API では、すべてのエンドポイントで認証が必要です。XDK は次の 3 つの認証方法をサポートしています:
  1. ベアラートークン(App のみ)
  2. OAuth 2.0(PKCE)
  3. OAuth 1.0a User Context
  • ベアラートークン: app-auth をサポートするエンドポイントに対する読み取り専用アクセスに使用します(例: Post の検索、ストリーミングエンドポイント)。
  • OAuth 2.0 PKCE: スコープに基づくユーザー承認アクセスのための安全な認証です(例: 認証済みユーザーの Post の non_public メトリクスの取得)。
  • OAuth 1.0a: DMs やメディアアップロードを含む完全な読み取り/書き込みアクセス向けのレガシー認証です。
: ユーザー承認アクセスには OAuth 1.0 から移行し、OAuth 2.0 の使用を推奨します。 開発者ポータル から認証情報を取得してください。承認済みの開発者アカウントと、適切な権限(例: 読み取り + 書き込み)を持つ App が必要です。

クライアントの作成

すべての認証フローで Client インスタンスが作成されます:
from xdk import Client

1. ベアラートークン(App-Only)

ユーザーコンテキストを伴わない読み取り専用の操作向け。 手順:
  1. 開発者ポータルで App 用のベアラートークンを生成します。
  2. Client に渡します。
:
client = Client(bearer_token="XXXXX")
使い方:
response = client.posts.search_recent(query="python", max_results=10)
print(response.data[0]['text'])  # 最初のPostにアクセス

2. OAuth 2.0 と PKCE(ユーザーコンテキスト)

この例では、Proof Key for Code Exchange(PKCE)を用いた OAuth 2.0 の使い方を示します。ユーザー単位のアクセス(例:ユーザーに代わっての投稿)や、ユーザー向けのメディアアップロードなどに使用します。 手順:
  1. 開発者ポータルで、リダイレクト URI(例:http://localhost:8080/callback)を指定して App を登録します。
  2. Client ID を取得します(PKCE では Client Secret は不要です)。
  3. フローを開始し、ユーザーを認可 URL に誘導してコールバックを処理します。
(コールバックに Web サーバーを使用):
from xdk.auth import OAuth2PKCE
from urllib.parse import urlparse
import webbrowser

# ステップ1: PKCEインスタンスを作成
auth = OAuth2PKCE(
    client_id="your_client_id",
    redirect_uri="http://localhost:8080/callback",
    scopes=["tweet.read", "users.read", "offline.access"]  # 必要に応じてスコープを調整
)

# ステップ2: 認可URLを取得
auth_url = auth.get_authorization_url()
print(f"認可するには以下のURLにアクセスしてください: {auth_url}")
webbrowser.open(auth_url)

# ステップ3: コールバックを処理(実際のアプリではFlaskなどのWebフレームワークを使用)
# callback_url = "http://localhost:8080/callback?code=AUTH_CODE_HERE" と仮定
callback_url = input("コールバックURLの全体をここに貼り付けてください: ")
parsed = urlparse(callback_url)
code = parsed.query.split("=")[1]

# ステップ4: 認可コードをトークンと交換
tokens = auth.fetch_token(authorization_code=code)
access_token = tokens["access_token"]
refresh_token = tokens["refresh_token"]  # 更新用に保存

# ステップ5: クライアントを作成
client = Client(oauth2_access_token=access_token)
トークン更新(長時間セッションでは SDK により自動):
# アクセストークンの有効期限が切れた場合、保存されているrefresh_tokenを使用して更新
tokens = auth.refresh_token(refresh_token=refresh_token)
client = Client(oauth2_access_token=tokens["access_token"])

3. OAuth 1.0a User Context

OAuth 1.0 を必要とするレガシーなエンドポイント向け。 手順:
  1. 開発者ポータルで Consumer Key/Secret と Access Token/Secret を生成します。
  2. クライアントを初期化する際にそれらを渡します。
:
from xdk.auth import OAuth1User

auth = OAuth1User(
    consumer_key="your_consumer_key",
    consumer_secret="your_consumer_secret",
    access_token="your_access_token",
    access_token_secret="your_access_token_secret"
)

client = Client(auth=auth)
注意:
  • 本番環境でシークレットをハードコードしないでください。環境変数やシークレットマネージャー(例:os.getenv("X_BEARER_TOKEN"))を使用してください。
  • PKCE を使用する場合は、本番環境のリダイレクト URI に必ず HTTPS を使用してください。
  • SDK はトークンを検証し、失敗時には xdk.AuthenticationError を送出します。