Notionデータベースに作成されたページタイトルをMarkdownのリスト形式で取得するやつをCloudflare Workersで作ってみました。
認証の都合で自分専用の設定にしているため、試したい場合はローカル開発環境の起動、またはご自身のCloudflareアカウントにデプロイしてお試しいただければと思います。
GitHub: https://github.com/yomashishi/get-titles-from-notion-database
振る舞い
デプロイしたWorkersに認証ヘッダーとクエリパラメーターを渡すことで、ページタイトルをMarkdownのリスト形式で取得するようにしています。何かしらのHTTPクライアントを挟む前提で作っています。
Important
100件を超える取得には現状対応しておりません。
認証ヘッダー
どこからでもアクセスする前提で作成しているので、認証系の情報はWorkersに持たせず、都度渡すようにしています。Notionのシークレットの有効性はNotion APIを呼び出すまでわからないので、無駄なAPI呼び出しを減らすためにWorkersの呼び出し自体に簡易的な認証を挟めるようにしています。
- 必須
Authorization
: Notionインテグレーションのシークレット(読み取り権限)1を設定Authorization: Bearer {シークレット}
- 任意
x-secret
: WorkersのシークレットにWORKER_SECRET
を登録している場合に設定x-secret: {WORKER_SECRETの値}
クエリパラメーター
- 必須
database_id
: 読み込みたいNotionデータベースのID- NotionデータベースのIDはデータベースURLに含まれています。確認方法は開発者ドキュメント2に記載されています。
- 任意
indent
: 複数行で構成されたページタイトルの2行目以降をインデントさせるためのパラメーターdate
:YYYY-MM-DD
形式の取得したい日付- 渡さない場合は当日分のデータを取得します。
to_date
:YYYY-MM-DD
形式の検索期間の末日date
と組み合わせます。
curlコマンド例
全部盛りのcurlコマンドは以下のようになります。
curl -H "Authorization: Bearer $NOTION_SECRET" \
-H "x-secret: $WORKER_SECRET" \
"https://{Workersのドメイン}?database_id={NotionデータベースのID}&indent=&date={取得したい日付}&to_date={検索期間の末日}"
実行時のスクリーンショット
任意パラメーターのうち date
と indent
を渡した場合のスクリーンショットは以下です。

作成した経緯
筆者は日々の記録をObsidianのデイリーノートで行っています。PCとスマートフォン間でデータを同期しているので、外出時にスマートフォンから記録することもできます。 しかしながら、電車内などの周囲に人がいる環境ではノートを開くことに抵抗があるため、一時的に別の場所へ記録するようにしています。
一時的な記録場所として、現在はこにゃ様の記事「Notionで運用するSNSライクな「つぶやき帳」|こにゃ」の影響で、Notionデータベースのタイトルに諸々を記録するようにしています。AndroidアプリであるHTTP Shortcutsを使用してNotion APIを叩いて記録しているので、これまでのデータを表示させずに記録できます。 以前は個人用DiscordサーバーのWebhookに対してテキストを投げることもしていました。
別の場所に記録したデータは最終的にObsidianのデイリーノートへ持ってくるのですが、Notionの画面でページタイトルをコピーするためには、ページを一度開く必要があります。それを各ページに対して行うのは面倒であるため、Notion API経由で一気に持ってくるものをCloudflare Workersで作ってみました。
最後までご覧いただきありがとうございました。
-
Build your first integration https://developers.notion.com/docs/create-a-notion-integration#getting-started ↩︎
-
Retrieve a database https://developers.notion.com/reference/retrieve-a-database ↩︎