Open8

Notion APIを使ってみたメモ

AshAsh

とりあえず、Notionのデータベースにアクセスできるところまでやってみる。

環境

  • Notion API Version : 2022-02-22
AshAsh

以下のURLにアクセスして APIを使えるようにする。
https://www.notion.so/my-integrations

  1. Create new integration
  2. Nameは適当な名前、適当なロゴ、関連付けるワークスペースを確認、あとはそのまま
  3. Integrationが作成されたらSecretsをメモしておく
AshAsh

データベースにAPIがアクセスできるように設定する。

  1. 適当なデータベースを作る
  2. データベースのページでShare->Invite
  3. 先で作成したIntegrationが表示されているので選択してInviteする

Privateなページでも使えるのはイイネ

AshAsh

データベースIDを確認する。
URLの{database_id}部分 (UUIDv4)

https://www.notion.so/{workspace}/{database_id}?v={view_id}
AshAsh

対象データベースの情報を取得する。

GET https://api.notion.com/v1/databases/{database_id}

ヘッダ
{Secret}にはIntagrationでメモしたSecretを設定する。

Name Value
Authorization Bearer {Secret}
Notion-Version 2022-02-22

正常に処理されると、データベースの情報がJSONで返される。

レスポンス
https://developers.notion.com/reference/database

AshAsh

Notion APIを使いたくなる主なユースケースは、何かのトリガーでNotionのデータベースにレコードを追加したいってことが多い気がするので、まずは追加を試してみる。

以下のようなデータベースがあることを想定。

API

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

ヘッダ

Name Value
Authorization Bearer {Secret}
Notion-Version 2022-02-22
Content-Type application/json
Body
{
    "parent": {
        "type": "database_id",
        "database_id": "2156****************************"
    },
    "icon": {
        "type": "emoji",
        "emoji": "📖"
    },
    "properties": {
        "タイトル": {
            "type": "title",
            "title": [
                {
                    "text": {
                        "content": "Notionで実現する新クリエイティブ仕事術"
                    }
                }
            ]
        },
        "分類": {
            "multi_select": [
                {
                    "name": "仕事効率化"
                },
                {
                    "name": "ツール"
                }
            ]
        },
        "購入日": {
            "date": {
                "start": "2022-04-24"
            }
        }
    }
}

結果

アイコンをランダムで設定する方法はないっぽい。
送信する側でご自由にってことかな。

AshAsh

検索(フィルタ)のあれこれ

POST https://api.notion.com/v1/databases/{database_id}/query
タイトルに特定文字を含む場合
{
    "filter": {
        "property": "タイトル",
        "title": {
            "contains": "Notion"
        }
    }
}
複合フィルタ
{
    "filter": {
        "and": [
            {
                "property": "読了",
                "checkbox": {
                    "equals": true
                }
            },
            {
                "or": [
                    {
                        "property": "分類",
                        "multi_select": {
                            "contains": "プログラミング"
                        }                       
                    },
                    {
                        "property": "分類",
                        "multi_select": {
                            "contains": "ツール"
                        }     
                    }
                ]
            }
        ]
    }
}
ソート
{
    "filter": {
        "property": "タイトル",
        "title": {
            "contains": "Notion"
        }
    },
    "sorts": [
        {
            "property": "購入日",
            "direction": "descending"
        }
    ]
}

https://developers.notion.com/reference/post-database-query-filter