Open4

Notion のAPI について

yocyoc

Notion API の設定

https://www.notion.so/my-integrations

ログイン後、新しいインテグレーションを作成するをクリックする。

利用予定のワークスペースを設定したらシークレットトークンが発行される
次にNotionアプリから、共有 > 招待で作成したインテグレーションを追加します。

以上でAPIが叩けるようになります。

詳細な手順については公式ページを参照
https://developers.notion.com/docs

yocyoc

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

Noiton の URL は下記の様な構成らしいので、database_id をメモしておく

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

サクッとデータベースの中身を取得するPythonスクリプト

import requests
from pprint import pprint


SECRET_TOKEN = 'your secret token'
DATABASE_ID = 'your database id'

url = f"https://api.notion.com/v1/databases/{DATABASE_ID}/query"
headers = {
    'Authorization': 'Bearer ' + SECRET_TOKEN,
    'Notion-Version': '2021-05-13',
    'Content-Type': 'application/json',
}
r = requests.post(url, headers=headers)

pprint(r.json(), sort_dicts=False)

トークンとデータベースがわかればリクエストするだけで取得できる

yocyoc

ページを作成する

データベースの1レコードもNotionではページとして扱っている。
そのため、新しいレコードを追加したい場合はページを作ればよい

データベース内にページを作成するスクリプト

import requests
import json
from pprint import pprint

SECRET_TOKEN = 'your secret token'
DATABASE_ID = 'your database id'

url = f"https://api.notion.com/v1/pages"
headers = {
          'Authorization': 'Bearer ' + SECRET_TOKEN,
            'Notion-Version': '2021-05-13',
              'Content-Type': 'application/json',
        }
body = {
  'parent': {
      'database_id': DATABASE_ID,
    },
  'properties':{
    'カラム名':{
      'プロパティのタイプ': [
          {
            'type': 'text',
            'text': {
              'content': "test用のtitle"
            }
          }
        ]
    }
  }
}
r = requests.post(url, headers=headers, data=json.dumps(body))

pprint(r.json(), sort_dicts=False)

ゴリゴリJSONを作っているので長いが、必要なオブジェクトをJSONにして /page へ Post すれば作成自体は簡単にできる。

ページのアイコンやカーバーなどの追加方法はこちらを参考にする。
https://developers.notion.com/reference/post-page

ページの要素や別のプロパティのタイプを使いたい場合はこのページを参考にJSONを作れば良さそう。
https://developers.notion.com/reference/page#property-value-object