Notion APIを使ってみた
Notionでネットの記事の積読を管理している。積読の数が1000を超え、ノイズになっていたので一度全て断捨離することにした。
状況・やりたかったこと
- Articleというデータベースで積読を管理
- Read StatusというSelectカラムでステータス管理
- 未設定:積読
- Read:読んだ
- Trash:やっぱ読むのをやめた、読まない
- → Read Statusが未設定のページのRead StatusをTrashにする
1000以上のページを手動で変更するのはできなくはなかったが、せっかくなのでNotion APIを使ってみた。
やったこと
- Getting started にしたがって作業
- Integrationを作成
- Articleデータベースを作成したIntegrationにシェア
- NotionのJavaScript SDKを使ってバッチ処理スクリプトを書いた
バッチ処理スクリプトの詳細
- メインの処理
- カーソルを使って対象のページを全件取得
- 1件ずつ直列で更新
- API:https://developers.notion.com/reference/patch-page
- Rate Limits (avg: 3rps)に引っかからないように直列にリクエスト
- さらに念のため、timersPromises.setTimeoutでsleepをかける
- サブ
- dotenv で環境変数を設定
- performance.now() を使って処理時間を計測
- Dry Runオプションをつけて、Dry Runの場合は更新処理をスキップ
実行結果
以下、試しに2件更新してみたときのRTT。
Update took 684.6306619644165ms. Update took 283.28467202186584ms.
以下、全件更新結果。
$ npm run start > notion-article-batch@1.0.0 start > node -r dotenv/config index.js Sun Aug 14 2022 hh:mm:ss GMT+0900 (日本標準時) Update started. Sun Aug 14 2022 hh:mm:ss GMT+0900 (日本標準時) 1055 pages updated. Update took 694149.2413560152ms.
特にエラーが出ることなく無事に全件更新された。