Closed3

microCMSのコンテンツ情報を全件取得する

hanetsukihanetsuki

2021/08/18時点で、microCMSには以下のような仕様がある。

limit

取得件数を指定します。
デフォルト値は10です。
上限値はありませんが、レスポンスサイズ(レスポンスヘッダのcontent-lengthの値)が約5MBを超えるとエラーが発生します。
そのため、大量のコンテンツの全件取得をしたい場合は下記のoffsetパラメータと組み合わせてページング処理を行ってください。

https://document.microcms.io/content-api/get-list-contents#h4cd61f9fa1

全件取得するためにはページング処理等を行なって欲しいとのことなので、その備忘録

hanetsukihanetsuki

結論

再帰関数を用いてデフォルト10件ずつ取得してcontents情報を全て繋げる。
一度に取得できるデータ総量が5MBとという制約がある為、どちらにしても細切りにしてAPIを呼ぶのが無難

// getAllContents.js
const client = createClient({
  serviceDomain: process.env.MICROCMS_DOMAIN,
  apiKey: process.env.API_KEY
})

const getAllContents = async (limit=10, offset=0) => {
  const data = await client.get({
    endpoint: `{MICROCMS_ENDPOINT}`,
    queries: {
      offset,
      limit
    }
  })

  if (data.offset + data.limit < data.totalCount) {
    const contents = await getAllContents(data.limit, data.offset + data.limit)
    return [ ...data.contents, ...contents ]
  }

  return data.contents
}

export { getAllContents }

https://gist.github.com/tsuki-lab/1c3e9b94cdde3e6381b8423191fb35cb
MICROCMS_ENDPOINTにはAPIのエンドポイントを記載する。

今回はmicrocmsが提供しているSDKを用いた。
https://github.com/microcmsio/microcms-js-sdk

このスクラップは2021/08/18にクローズされました