NotionのデータベースアイテムのURL一覧を出力する方法

2023/08/25に公開

概要

データベースの各アイテムのURLをcURLとjqで出力する方法です。
シェル芸人ではなく、カーソルの処理が手動なのはご勘弁ください
(Notionのチャンピオンコミュニティで回答したものの焼き回しです。なんとなくもったいなかったのでメモですw)

参照ドキュメント

実装

リファレンスを見ると、APIで1度に取得可能な最大件数は100件でしたので、100件ずつ取得しカーソルの値を書き換えながら出力していく形で実装しました。
また、jqでは .キー名 でJSONの値を取得でき、 カンマで複数要素取得できるようだったので、URLと次のカーソルの値を取得し出力するようにしました。

初回の実行

実行コマンド

curl -X POST 'https://api.notion.com/v1/databases/データベースID/query' \
  -H 'Authorization: Bearer '"APIトークン"'' \
  -H 'Notion-Version: 2022-06-28' \
  -H "Content-Type: application/json" \
--data '{"page_size": 100}'  \
| jq '.results[].url, .next_cursor' >> notion_db_item_list.txt

出力内容

"https://www.notion.so/xxxx"
"https://www.notion.so/xxxx"
"https://www.notion.so/xxxx"
... 100件分
次のコマンドで使うカーソルの値

次の100件取得

出力で得られたカーソルの値をリクエストボディに含めてコマンドを実行します

curl -X POST 'https://api.notion.com/v1/databases/データベースID/query' \
  -H 'Authorization: Bearer '"APIトークン"'' \
  -H 'Notion-Version: 2022-06-28' \
  -H "Content-Type: application/json" \
--data '{"page_size": 10, "start_cursor": "前のコマンドで出力された次回指定のパラメータ"}'  \
| jq '.results[].url, .next_cursor' >> notion_db_item_list.txt

以降は次回のカーソルが取得できなくなるまで繰り返しになります。
今回件数が少なかったので、手作業で実施しましたが、GASなどで処理を書いたほうが良いかもしれません。

Discussion