Twitch apiで複数件のデータを取得したときにページネーションの使い方が分からなかったのでメモ。
APIが既に叩ける前提で話を進めるので、APIを叩くための解説は省いています。
ページネーションの基本パラメーター
Twitch APIのページネーションのパラメーターはおそらく以下の3つ。
パラメーター | 説明 |
first | 一回のリクエストで取ってくるデータの数。デフォルト20。 1~100まで設定可能。 |
after | 次へ(firstで指定した件数よりヒットしたデータが多い場合有効) |
before | 前へ(firstで指定した件数よりヒットしたデータが多い場合有効) |
ちなみに今回使ったエンドポイントはGet Top Gamesです。
afterとbeforeの使い方
Get Top GamesはTwitch上で人気のゲームの情報取得できるエンドポイントです。
なので当然100件以上のデータが出てくるわけです。
単純にTOP100を取得するだけなら以下でOK。
curl -X GET 'https://api.twitch.tv/helix/games/top?first=100' \
-H 'Authorization: Bearer REPLACE ME' \
-H 'Client-Id: REPLACE ME'
問題は101件目以降のデータを取得したい場合。
afterパラメーターを渡してあげる必要があります。
afterパラメーターに渡す値は1や2などのページ数や101や201などのデータ件数ではありません。
欲しいデータの前についてくるpeginationのcursorを渡す必要があります。
101件目のデータが欲しい場合は、1~100をリクエストした時に返ってくるcursorを渡す必要があるということです。
#1~100件目のリクエストの返り値
{
"data": [
{
"id": "509658",
"name": "Just Chatting",
"box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/509658-{width}x{height}.jpg",
"igdb_id": ""
},
#中略
{
"id": "110758",
"name": "The Legend of Zelda: Breath of the Wild",
"box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/110758_IGDB-{width}x{height}.jpg",
"igdb_id": "7346"
}
],
"pagination": {
"cursor": "eyJzIjoxMDAsImQiOmZhbHNlLCJ0Ijp0cnVlfQ=="
}
}
この例で言うとeyJzI~~~を渡す必要があるということです。
リクエスト形式にすると以下の通り。
curl -X GET 'https://api.twitch.tv/helix/games/top?first=100&after=eyJzIjoxMDAsImQiOmZhbHNlLCJ0Ijp0cnVlfQ==' \
-H 'Authorization: Bearer REPLACE ME' \
-H 'Client-Id: REPLACE ME'
201件目~300件目が取りたい場合は、101~200の戻り値のcursorを使う感じです。
最終的な疑問
一発で101件目以降のデータを取れないのだろうか?
現状だと100件ずつ順次処理しないとcursorを入手できないので、欲しいのが501~600でも、余分に4回リクエストを送らないといけないので無駄が多く感じる。
コメント