たぬ
こんにちは、グロースハッカーの たぬ ( @tanuhack )です。
Notion API を使って、データベースの構造を取得するには、下の URL を GET メソッドでリクエストします。
https://api.notion.com/v1/databases/{ データベースID }
公式リファレンス
https://developers.notion.com/reference/get-database
Pythonで Notion API を使用するには、公式の Notion SDK が用意されていないので、Requests モジュール などの HTTP 関数を使って直接 API を叩く必要があります。
この記事では、次の簡易的なデータベースのテーブル定義を取得する例を紹介します。
目次
準備
トークンを取得する
別の記事で紹介する予定なので割愛します。
Botとデータベースを紐付ける
データベースページのshare
ボタンで Bot(Integration)をデータベースを紐付けます。Bot ユーザーの権限はCan edit
のみ設定できます。
データベースIDを取得する
データベース ID は、データベースページの URL から取得できます。
https://www.notion.so/***********/{ データベースID(32文字) }?v=...
デスクトップアプリで確認する場合は、Share
からCopy link
を選択します。
インラインデータベースを使用している場合は、データベースがフルページで表示されていることを確認してください。
テーブル定義を取得する
では、実際に Requests モジュールを使って、Notion API からデータベースのテーブル定義を取得してみましょう。
import requests
NOTION_ACCESS_TOKEN = '{ トークン }'
NOTION_DATABASE_ID = '{ データベースID }'
url = f"https://api.notion.com/v1/databases/{NOTION_DATABASE_ID}"
headers = {
'Authorization': 'Bearer ' + NOTION_ACCESS_TOKEN,
'Notion-Version': '2021-05-13',
}
r = requests.get(url, headers=headers)
data = r.json()
以下のようなレスポンスが返ってくれば成功しています。
from pprint import pprint
pprint(data, sort_dicts=False)
# {'object': 'database',
# 'id': '{ データベースID }',
# 'created_time': '2021-07-01T03:54:36.941Z',
# 'last_edited_time': '2021-07-01T04:05:00.000Z',
# 'title': [{'type': 'text',
# 'text': {'content': 'フルーツテーブル', 'link': None},
# 'annotations': {'bold': False,
# 'italic': False,
# 'strikethrough': False,
# 'underline': False,
# 'code': False,
# 'color': 'default'},
# 'plain_text': 'フルーツテーブル',
# 'href': None}],
# 'properties': {'Price': {'id': 'S<|H',
# 'type': 'number',
# 'number': {'format': 'number'}},
# 'Color': {'id': 'mH\\?',
# 'type': 'select',
# 'select': {'options': [{'id': 'd0408e6e-4972-4954-aaa5-864b53054c7f',
# 'name': 'red',
# 'color': 'red'},
# {'id': 'fa4fabe1-9855-4f99-a753-a81f25849172',
# 'name': 'yellow',
# 'color': 'yellow'},
# {'id': 'bca0d2a9-a89d-45c6-a114-752733ed0892',
# 'name': 'Purple',
# 'color': 'purple'}]}},
# 'Name': {'id': 'title', 'type': 'title', 'title': {}}},
# 'parent': {'type': 'workspace', 'workspace': True}}
プロパティ名とプロパティタイプの辞書が欲しい場合は、辞書内包表記を使って取得できます。
print({k: v['type'] for k, v in data['properties'].items()})
# {'Price': 'number', 'Color': 'select', 'Name': 'title'}
コメント