Skip to main content
Sorsa APIで一覧を取得すると、結果はページに分かれて返されます。すべてのデータを取得するには、カーソルを使って、続きがなくなるまでページを順に取得します。

カーソルによるページネーションの仕組み

Sorsaは従来のページ番号の代わりにカーソル方式を使います。新しい内容が常に追加されるソーシャルメディアのデータでは、オフセット方式だと取得漏れや重複が起きるため、カーソル方式のほうが信頼性が高くなります。 ページネーション対応のすべてのエンドポイントで、手順は同じです。
  1. 最初のリクエストをカーソルなしで送信します。
  2. データとnext_cursorフィールドが返されます。
  3. 次のリクエストにnext_cursorの値を渡し、次のページを取得します。
  4. next_cursornullまたはレスポンスに存在しなければ、終端です。
すべてのエンドポイントがページネーションを使うわけではありません。/info/tweet-info/score/aboutなどは1つのオブジェクトを返し、カーソルはありません。/info-batch/tweet-info-bulkや、/top-followersなどの暗号資産分析の一覧も、1回のレスポンスで結果を返します。各エンドポイントのリファレンスでnext_cursorパラメーターの有無を確認してください。

レスポンスの構造

ページ分割されたレスポンスは、次のいずれかの形式です。
これらのユーザー・ツイート一覧では、データはusersまたはtweetsに入ります。next_cursorは中身を解釈せず、そのまま渡してください。null、空、または存在しない場合は終了します。カーソルを増分したり、JavaScriptのNumberに変換したりしないでください。 ラッパーとオブジェクトのスキーマについては、レスポンス形式を参照してください。

カーソルの渡し方

フィールド名は常にnext_cursorです。エンドポイントによって違うのは指定場所だけです。GETではクエリパラメーター、POSTではJSON本文に渡します。 GETエンドポイント/followers/follows/list-tweetsなど)では、next_cursorをクエリパラメーターに指定します。
POSTエンドポイント/search-tweets/user-tweets/commentsなど)では、next_cursorをJSON本文に指定します。

ページの件数は固定ではありません

Xのデータの性質上、1ページに返される件数は変動します。最大20件を返すエンドポイントでも、18件、12件、場合によっては5件しか返さないページがあり、その先にまだデータが続くことがあります。 件数だけで終端を判断しないでください。 想定より少ない件数でも、続きがないとは限りません。必ずnext_cursorを確認してください。存在し、nullでなければ、次のページを取得できます。

ページネーションの実装例

これらの例では、結果をメモリに蓄積します。大規模な処理では、各ページをストレージに書き込み、文字列のIDで重複を除去し、保存後にチェックポイントを記録してください。カーソルの利用中は、対象アカウント、検索条件、フィルター、並び順を変えないでください。ページ数やリクエスト数の上限を設定し、同じカーソルの繰り返しを検出して、意図しない無限処理を防ぎます。1つのループに待機時間を入れるだけでは、同じAPIキーを使う他のワーカーとの速度調整はできません。 Python:フォロワーを順に取得する(GET)
Python:検索結果を順に取得する(POST)
JavaScript:フォロワーを順に取得する(GET)
JavaScript:検索結果を順に取得する(POST)

エラー処理付きのページネーション

本番環境では、ページネーションに再試行処理を組み合わせてください。1ページの取得失敗で、収集処理全体が停止することを防げます。詳しいエラー処理はエラーコードを参照してください。

次のステップ