MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Notion API Public Betaを試してみる

f:id:mofumofu_dance:20210514143218p:plain

Notionはドキュメント作成、プロジェクト管理、データ管理などの機能を総合的に提供するインフォメーションプラットフォームサービスです。

今回 開発者向けのAPI 提供が Public Betaとして開始されましたので、さっそく試してみました。

Notion の Developerサイトにアクセスして、Notionのアカウントでサインインすることで利用を開始できます。

developers.notion.com

基本的には Get Started ガイド に沿って行けば問題なく進められます。事前に API を実行するための環境 (Postmanなど) をセットアップしておくとスムーズでしょう。


注意事項

API を利用してワークスペースにアクセスする場合には、その ワークスペースのAdmin 権限が必要です。

以降の操作は Admin としてサインインしている前提で進めます。


1. Integrationの新規作成

まずは My Integrations ページから Integration を作成します。(アプリケーション登録のようなもの)

[Create new integration] をクリックし

f:id:mofumofu_dance:20210514145629p:plain

Integration に関する基本情報 (名前、アイコン、対象のワークスペース) を入力し [Submit] をクリックします。

f:id:mofumofu_dance:20210514145927p:plain

情報を入力し終えると API 接続のためのシークレットと Integration typeが表示されます。

特にIntegration typeは変更せず、シークレットのメモを取っておきましょう。

f:id:mofumofu_dance:20210514150643p:plain

これでIntegrationの作成は完了です。

2. アクセス権限付与

API で Notion内のテーブルにアクセスするにはあらかじめテーブルを Integration と Share (権限付与) しておく必要があります。

テーブルを選び、他のユーザーと共有する場合と同様の操作で、選択肢から先ほど作成した Integrationを選びます。

f:id:mofumofu_dance:20210514151355p:plain

これでAPIから対象のテーブルにアクセスできるようになりました。

API を実行する際にはデータベースIDが必要になります。 これは対象のテーブルのリンクをコピーした際の / 以降の文字列ですので、後のためにメモしておきます。

f:id:mofumofu_dance:20210514151800p:plain

3. API 実行

ここまでで API を実行する準備ができました。 Postmanなどのツールを起動して進めていきます。

API レファレンスは 以下を参照してください。

developers.notion.com

3-1. データベース取得

データベースのプロパティを取得します。

https://api.notion.com/v1/databases/database_id

URLに上記をセット (database_id はテーブルへのリンクから取得した値 )し、GETします。この時ヘッダーには

key value
Notion-Version 2021-05-13
Authorization Bearer (Integration作成時のシークレット)

を指定します。実行するとデータベースに関するプロパティ (列情報など) が取得できていることがわかります。

f:id:mofumofu_dance:20210514153152p:plain

3-2. アイテム一覧 取得

データベースのアイテム一覧を取得します。

https://api.notion.com/v1/databases/database_id/query

一覧取得は POST です。 ヘッダーは先ほどと同様で、Bodyにはフィルターやソート条件を指定します。今回は簡単のためにソートだけ。

f:id:mofumofu_dance:20210514153453p:plain

実際にはサンプルを見た通り、複数のフィルター条件、ソート条件を指定することができます。

{
    "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"} 部分で指定しています。

f:id:mofumofu_dance:20210514154244p:plain

これで Name部分だけが入ったアイテムが作成されました。

f:id:mofumofu_dance:20210514154338p:plain

以上で、テーブルの情報取得、アイテム取得、アイテム作成まで一通り完了です。

3-4. ページの情報取得

データベースのアイテムもpageですが、文章が書かれた所謂ページ も Notionではpageオブジェクトとして扱われます。

このようなぺージ を取得する際には

https://api.notion.com/v1/pages/page_id

このURLに対してGETリクエストを出しますが、ここでpage_idに注意が必要です。

ワークスペースの直下にあるページの場合にはURLの末尾にはページ名も含まれてしまいます。

f:id:mofumofu_dance:20210514162720p:plain

このため、文章のページを取得するときは - ハイフン以降をコピーする必要があります。

f:id:mofumofu_dance:20210514162959p:plain

面白いのは、この時のParentがworkspaceになっていることですね。

ちなみにネストしたページの場合には、Parentは親のページIDになっています。

このあたり、Notionの構成をより理解する必要がありそうです。

おわり

今回は パブリックベータの始まった Notion API を使ってみました。

さらに活用するためには Database - Pages あたりのデータ構成をもう少し深く理解する必要がありそうです。

とはいえ、使い始めるのは簡単ですので、まずはトライしてみてはいかがでしょうか。