メインコンテンツへスキップ
X API は、複数ページにわたる結果を返すエンドポイント(例: タイムライン、検索など)でページネーションを使用します。各 API 呼び出しのレスポンスには meta オブジェクトが含まれ、result_countprevious_tokennext_token が入ります。XDK は next_token を用いて複数回の API 呼び出しを自動処理するため、開発者は取得したいデータ量を指定するだけで、複数回の呼び出しを自前で行う必要はありません。 SDK は次の点でこれを簡素化します:
  • 組み込みイテレーター: ジェネレーター関数により、複数ページの取得をシームレスに実行。
  • 明示的なトークン処理: 必要に応じて pagination_token を渡して、手動で柔軟に制御可能。
  • 最大取得件数の順守: 呼び出しごとの max_results を順守(API の上限まで。例: 検索では 100)。
ページネーション対応のレスポンスに対して iterate() メソッドを使用し、すべての結果を遅延的に取得します。 例:ページネーション対応の検索
from xdk import Client

client = Client(bearer_token="your_bearer_token")

# 自動ページネーションで検索
all_posts = []
for page in client.posts.search_recent(
    query="python",
    max_results=100,  # ページあたり
    tweetfields=["created_at", "author_id"]  # オプションのexpansions
):
    all_posts.extend(page.data)
    print(f"{len(page.data)}件のPostを取得 (合計: {len(all_posts)}件)")

print(f"合計Post数: {len(all_posts)}件")
  • イテレーターは next_token を自動処理します。
  • next_token がない場合に停止します。
  • 429 errors を回避するためのレート制限バックオフに対応しています。

手動ページネーション

カスタムロジック(例:ページ単位での処理)で結果を制御する必要がある場合は、以下のように next_token を使用して手動でページネーションを行えます。
response = client.posts.search_recent(
    query="xdk python sdk",
    max_results=100,
    pagination_token=None  # 最初のページ
)

print(f"最初のページ: {len(response.data)} 件のPost")
next_token = response.meta.next_token

if next_token:
    next_response = client.posts.search_recent(
        query="xdk python sdk",
        max_results=100,
        pagination_token=next_token
    )
    print(f"2ページ目: {len(next_response.data)} 件のPost")
ヒント:
  • 最適化のため、常に max_results を指定してください(デフォルト値はエンドポイントごとに異なります)。
  • デバッグ目的で meta.result_count を監視してください。
  • 非常に大きなクエリでは、ブロッキングを避けるために非同期反復処理の利用を検討してください。