NotionのAPIの基本のキ（公式Getting Startedのゆる翻訳）

[https://developers.notion.com/docs/getting-started](https://developers.notion.com/docs/getting-started)

こちらの記事をざっくり日本語訳したものになります。

# 前提

- 対象のワークスペースのAdminであること
- curlコマンド使えること
    - って書いてあるけど別にPostmanとか、HTTPリクエストが投げれれば良いはず

# 手順

## Integrationを作成する

[こちら](https://www.notion.com/my-integrations) から新しいIntegrationを作成します。

![スクリーンショット 2021-05-26 22.03.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182837/5c9ee91c-959d-f6a5-e2ae-e3f344da8f3a.png)

名前、画像、対象のワークスペースを入力し、次へ。

次の画面で`Internal Integration Token` というTokenが取得できるので、控えておきます。

![スクリーンショット 2021-05-26 22.13.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182837/214e14d0-fdbf-9c2b-7a65-355c1f24cf2c.png)


## Integrationと対象のページ、データベースを共有する

Integrationはユーザとの記事共有のような形式になります。Integrationは最初はどのページ、データベースにもアクセス権は有りません。APIを使うためには、Integrationと特定の記事やデータベースを共有する必要があります。

ユーザを招待するように、APIからアクセスしたいページ、データベースをIntegrationと共有します。
（今回はわかりやすいのでDatabaseで行います）

![スクリーンショット 2021-05-26 22.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182837/ec9ae5b8-9084-444f-7d0b-3f16ce6f3bce.png)

この時点で、Integrationは対象のデータベースに対して、read, write, edit権限を持ちます。この手順はどのユーザも作業可能です。

## データベース、ページのIDを取得

次に、データベースのIDが必要になります。

- アプリの場合
    - Share→Copy linkからURLを取得し、そのURLの最後のセグメントがIDをになります
- Webの場合
    - 対象のデータベースをフルページで開いて、URLの最後のセグメントがIDになります。

```jsx
https://www.notion.so/myworkspace/a8aec43384f447ed84390e8e42c2e089?v=...
                                  |--------- Database ID --------|
```

## データベースにアイテムを追加する

Notionにおいて、データベースの中のItemはページです。なので、`create a page` のエンドポイントを利用し、対象のデータベース配下にページを作成します。

以下のようなPOSTリクエストを送信します。(もちろんcurl以外でもなんでもOKです)

```bash
curl -X POST https://api.notion.com/v1/pages \
  -H "Authorization: Bearer {MY_NOTION_TOKEN}" \
  -H "Content-Type: application/json" \
  -H "Notion-Version: 2021-05-13" \
  --data '{
    "parent": { "database_id": "{DATABASE_ID}" },
    "properties": {
      "Name": {
        "title": [
          {
            "text": {
              "content": "Yurts in Big Sur, California"
            }
          }
        ]
      }
    }
  }'
```

成功すると、200で以下のようなレスポンスが返ってきます。

```bash
{
    "object": "page",
    "id": "31840a55-35d2-4320-91e9-＊＊＊＊＊＊＊＊＊",
    "created_time": "2021-05-26T13:35:16.271Z",
    "last_edited_time": "2021-05-26T13:35:16.271Z",
    "parent": {
        "type": "database_id",
        "database_id": "4a212d83-bfb3-4f2f-8dd1-e＊＊＊＊＊＊＊＊＊＊"
    },
    "archived": false,
    "properties": {
        "Name": {
            "id": "title",
            "type": "title",
            "title": [
                {
                    "type": "text",
                    "text": {
                        "content": "Yurts in Big Sur, California",
                        "link": null
                    },
                    "annotations": {
                        "bold": false,
                        "italic": false,
                        "strikethrough": false,
                        "underline": false,
                        "code": false,
                        "color": "default"
                    },
                    "plain_text": "Yurts in Big Sur, California",
                    "href": null
                }
            ]
        }
    }
}
```

ちゃんとデータが作成されていました。

![スクリーンショット 2021-05-26 22.36.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182837/5198f7d0-471b-ac71-dcfd-0565dca2f34e.png)

# まとめ

NotionのAPIの基本はこんな感じかと思います。

- 作成するユーザはAdmin権限が要る
- Integrationを作成、Tokenを取得
- 対象のデータベース、ページにIntegrationを追加する
- 対象のデータベース、ページのIDを取得
- 実現したい動作に合ったエンドポイントにリクエストを投げる

待ちにまったNotion APIのリリースですね！

データの収集はもちろん捗りそうですが、色々な使い方がありそうです。どんどん活用していきましょう。