A W E S O M E . でブログを書いていると、Notion のブロック数を上限 50 までしか取れていないことがわかりました。
今回はその原因と対応方法についてを解説します。
原因と対応
Notion の API の仕様で、一度に取得するブロック数の上限は 100 までとなっています。
![Notion API のページより引用](https://prod-files-secure.s3.us-west-2.amazonaws.com/a0f002b4-eec2-4df2-8737-c6ae60d92dd2/b4cf4239-3f36-4e45-bba6-8b122ac5f0f6/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240727%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240727T084244Z&X-Amz-Expires=3600&X-Amz-Signature=ad7e42e8d5f9710923768818d167e655d296c870be0d0a0178174bae2e948066&X-Amz-SignedHeaders=host&x-id=GetObject)
上記の仕様であれば、デフォルトは 100 なので 100ブロックはとれそうです。
A W E S O M E . のソースコードを確認してみます。
export const getBlocks = async (blockId: string) => {
const response = await notion.blocks.children.list({
block_id: blockId,
page_size: 50,
});
return response.results as BlockObjectResponse[];
};
page_size が 50 になっていました。
page_size を 100 に変更すると、100ブロックまで取得することができます。
100ブロック以上取得するためには
100 ブロック以上取得するためには、 while 分などでブロックが無くなるまで何度かブロックを取得しなおすという対応が必要そうです。その際にはおそらく、上記の Notion API のページに記載されている start_cursor が使えそうです。
現状、100ブロック以上の記事は書いていないのでまだ対応していませんが、今後対応しようと思います。