【Twitch API】ページネーションのパラメータについて

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回リクエストを送らないといけないので無駄が多く感じる。

コメント

タイトルとURLをコピーしました