Notionはドキュメント作成、プロジェクト管理、データ管理などの機能を総合的に提供するインフォメーションプラットフォームサービスです。
今回 開発者向けのAPI 提供が Public Betaとして開始されましたので、さっそく試してみました。
Notion の Developerサイトにアクセスして、Notionのアカウントでサインインすることで利用を開始できます。
基本的には Get Started ガイド に沿って行けば問題なく進められます。事前に API を実行するための環境 (Postmanなど) をセットアップしておくとスムーズでしょう。
注意事項
API を利用してワークスペースにアクセスする場合には、その ワークスペースのAdmin 権限が必要です。
以降の操作は Admin としてサインインしている前提で進めます。
1. Integrationの新規作成
まずは My Integrations ページから Integration を作成します。(アプリケーション登録のようなもの)
[Create new integration] をクリックし
Integration に関する基本情報 (名前、アイコン、対象のワークスペース) を入力し [Submit] をクリックします。
情報を入力し終えると API 接続のためのシークレットと Integration typeが表示されます。
特にIntegration typeは変更せず、シークレットのメモを取っておきましょう。
これでIntegrationの作成は完了です。
2. アクセス権限付与
API で Notion内のテーブルにアクセスするにはあらかじめテーブルを Integration と Share (権限付与) しておく必要があります。
テーブルを選び、他のユーザーと共有する場合と同様の操作で、選択肢から先ほど作成した Integrationを選びます。
これでAPIから対象のテーブルにアクセスできるようになりました。
API を実行する際にはデータベースIDが必要になります。 これは対象のテーブルのリンクをコピーした際の /
以降の文字列ですので、後のためにメモしておきます。
3. API 実行
ここまでで API を実行する準備ができました。 Postmanなどのツールを起動して進めていきます。
API レファレンスは 以下を参照してください。
3-1. データベース取得
データベースのプロパティを取得します。
https://api.notion.com/v1/databases/database_id
URLに上記をセット (database_id はテーブルへのリンクから取得した値 )し、GETします。この時ヘッダーには
key | value |
---|---|
Notion-Version | 2021-05-13 |
Authorization | Bearer (Integration作成時のシークレット) |
を指定します。実行するとデータベースに関するプロパティ (列情報など) が取得できていることがわかります。
3-2. アイテム一覧 取得
データベースのアイテム一覧を取得します。
https://api.notion.com/v1/databases/database_id/query
一覧取得は POST です。 ヘッダーは先ほどと同様で、Bodyにはフィルターやソート条件を指定します。今回は簡単のためにソートだけ。
実際にはサンプルを見た通り、複数のフィルター条件、ソート条件を指定することができます。
{ "filter": { "or": [ { "property": "In stock", "checkbox": { "equals": true } }, { "property": "Cost of next trip", "number": { "greater_than_or_equal_to": 2 } } ] }, "sorts": [ { "property": "Last ordered", "direction": "ascending" } ] }
一覧でとれた各アイテムの id
プロパティは、アイテム更新時に必要になります。
3-3. アイテム新規登録
アイテムの新規登録は /databases
ではなく /pages
にかわります。
https://api.notion.com/v1/pages
「あれ?テーブルをどこで指定するの?」と思うかもしれません。テーブルの情報はPOSTするときのBodyで指定します。
{ "parent": { "database_id": "{DATABASE_ID}" }, "properties": { "Name": { "title": [ { "text": { "content": "Yurts in Big Sur, California" } } ] } } }
最も簡単なアイテム登録時のBodyです。 ここで登録対象のテーブル情報は "parent":{"database_id": "xxxxxx"}
部分で指定しています。
これで Name部分だけが入ったアイテムが作成されました。
以上で、テーブルの情報取得、アイテム取得、アイテム作成まで一通り完了です。
3-4. ページの情報取得
データベースのアイテムもpageですが、文章が書かれた所謂ページ も Notionではpageオブジェクトとして扱われます。
このようなぺージ を取得する際には
https://api.notion.com/v1/pages/page_id
このURLに対してGETリクエストを出しますが、ここでpage_id
に注意が必要です。
ワークスペースの直下にあるページの場合にはURLの末尾にはページ名も含まれてしまいます。
このため、文章のページを取得するときは -
ハイフン以降をコピーする必要があります。
面白いのは、この時のParentがworkspaceになっていることですね。
ちなみにネストしたページの場合には、Parentは親のページIDになっています。
このあたり、Notionの構成をより理解する必要がありそうです。
おわり
今回は パブリックベータの始まった Notion API を使ってみました。
さらに活用するためには Database - Pages あたりのデータ構成をもう少し深く理解する必要がありそうです。
とはいえ、使い始めるのは簡単ですので、まずはトライしてみてはいかがでしょうか。