爆速BrainDump：Notion編

# はじめに

最近、評判の高いNotionを導入し、個人的な情報やタスクを管理し始めました。
移動時間にはXを使って技術情報をチェックしたり、週末にやりたいことを思いついたら、Notionのデータベースにメモを残しています。
しかし、スマートフォンからNotionのデータベースに情報を入力しようとすると、クリック回数が多く（特にURLを入力する際には、クリックが多くなってしまいます）、利便性に欠けると感じました。
そこで、爆速（できれば1クリックで完了するような）でデータベースにメモを残せるような仕組みを構築したので、3回に分けて紹介していきます。

0. Notion / Notion API　← 今回
0. Google Apps Script
0. iPhone ショートカット

# アーキテクチャ構成

![アーキテクチャ図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/35e68fd5-ee40-bf2d-c579-ec8accc46121.png)

# 実装

Notion Databaseの作成とAPI経由で作成したデータベースにレコードを追加するための設定を行います。

## 要約

* Notionインテグレーションを作成する
    * シークレットを控える
* データベースを作成する
    * ページのコネクトにインテグレーションを追加する
    * データベースIDを控える

## A. データベースの作成

①任意のページにデータベースを作成する。
　Title、URL、Dateの3つのプロパティを設定する。
　・Title：技術記事のタイトル or やりたいことの概要
　・URL：技術記事のリンク
　・Date：追加した日時

![データベースの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/be13b921-d383-83f8-6bdc-15532b27ec4a.png)

②作成したデータベースの「設定」→「ビューのリンクをコピー」を押下し、データベースIDを取得する。
　ビューのリンクは、`https://www.notion.so/{workspace_name}/{database_id}?v={view_id}`のフォーマットで構成されているので、この`database_id`を控える。

![データベースのリンクを取得.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/de533215-87e1-3769-c0bb-774c0cb6d6df.png)

## B. インテグレーションの作成

①Notionの設定画面の「自分のコネクト」を選択し、「インテグレーションを作成または管理する」を押下する

![notionの統合作成画面を開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/c4120a29-9628-dc5e-fd0d-2b54549ad158.png)

②ブラウザで「私のインテグレーション」画面が開いたら、「新しいインテグレーション」を押下する。

![新しいインテグレーションを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/a62a48a2-2014-20f3-9278-2e9e3d8afe99.png)

③「基本情報」画面が開いたら、「関連ワークスペース」を選択、「名前」を入力し、「送信」を押下する。
　「関連ワークスペース」は、Aでデータベースを作成したワークスペースを選択する。
　「名前」は、任意の名前でOK（ここでは爆速BrainDumpとした）。

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/3c48ac4c-8c89-8d66-1536-0261e0618907.png">

④インテグレーションが作成できたら、「シークレット」が表示されるので、メモする
　「表示」を押下すると「コピー」ボタンが出てくるので、「コピー」を押下することでクリップボードにシークレットをコピーすることができる。

![作成したインテグレーションのシークレット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/640c39ee-c3bb-33b2-4b44-cb7dbbca248f.png)

## C. コネクトの追加

①Aで作成したデータベースがあるページを開き、右上の「設定」→「接続先」を押下し、Bで作成したインテグレーションを選択する。

![ページのコネクトにインテグレーションを追加する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/b4f69a9f-546d-96ed-885a-f48d9197129a.png)

②許可ダイアログが出てきた場合は、「はい」を押下する。

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/123fc405-2458-3f4d-df8e-f383cb657c37.png">

# 動作確認

## Notion API仕様

データベースにレコードを追加する際は、以下の仕様に則ってHTTPSリクエストする。
※データベースの各レコードは、Notionではページとして管理されている。

### URL

エンドポイント：`https://api.notion.com/v1/pages`
メソッド：`POST`

### Header

| キー名 | 値 | 備考 |
|:-:|:-:|:-:|
| Accept | application/json | |
| Notion-Version | 2022-06-28 | 公式リファレンスに記載されている最新のVersionを指定 |
| Authorization | Bearer ${secret} | Bで取得したシークレットを`${secret}`に入力  |

### Body

```json-doc
{
    "parent": {
        "type": "database_id",
        "database_id": "${database_id}"  // ${database_id}: Aで取得したデータベースIDを設定する
    },
    "properties": {
        "Title": {
            "title": [
                {
                    "text": {
                        "content": "${title}" // ${title}: 追加するレコードのTitleを設定する
                    }
                }
            ]
        },
        "URL": {
            "url": "${url}" // ${url}: 追加するレコードのURLを設定する
        },
        "Date": {
            "data": {
                "start": "${date}" // ${date}: 追加するレコードのDataを設定する
            }
        }
    }
}
```

## テストデータをリクエストする

API仕様の各変数に以下の値を設定して、リクエストする。

| 変数名 | 値 |
|:-:|:-:|
| title | 'Qiita' |
| url   | 'https://qiita.com/' |
| date  | '2024-04-14' |

## 結果

リクエストした内容でデータベースにレコードが登録されていることを確認する。

![最終動作確認結果OK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1561074/2ad6ff62-6bc3-e8ae-89a0-d48cc36d8535.png)

# 参考

### Notion公式リファレンス

#### インテグレーションの作成

https://developers.notion.com/docs/create-a-notion-integration#create-your-integration-in-notion

#### データベースにレコードを追加

https://developers.notion.com/docs/working-with-databases#adding-pages-to-a-database

#### Bodyに設定するレコードのデータ構造

https://developers.notion.com/reference/property-value-object