PythonでNotion APIを使う方法【サンプルコード付き】
この記事では、Python で Notion API を使う方法について解説します。
Notion API の概要や具体的な活用例、Notion API を活用したサービスなどを知りたい場合は以下の記事を参考にしてみてください。
Python 実行環境の準備
まず、Python で書かれたソースコードを動かすためには、お使いの PC に Python を実行できる環境を準備する必要があります。Python の実行環境がない場合は、以下のリンクよりダウンロードが可能です。
手元のマシンで Python を動かす環境が準備できない方は「 Google Colab 」や「 CodeSandbox 」など、ブラウザ上で Python を実行できるサービスをお使いいただくことも可能です。ご自身に合った環境をお選びください。
インテグレーションキー / データベース ID の取得
まずはじめに、Notion API で使用するインテグレーションキーを準備します。まだ準備していない方は以下の記事を参考に準備しておいてください。
ちなみに今回は、インテグレーションキーやデータベース ID などはコード内に直接記載します。コードを外部に公開する可能性がある場合は、インテグレーションキーなどが流出しないように環境変数に登録することをオススメします。
インテグレーションキーとデータベース ID が外部に漏れてしまうと、コネクトしたデータベースが外部から操作可能となってしまうのでご注意ください。
必要なライブラリのインストール
今回は、HTTP 通信に requests
というライブラリを使用します。以下のコマンドでインストールすることが可能です。
pip install requests
Python で Notion API を使用しデータベース内にページを作るサンプルコード
Notion API 接続用のデータベースを準備します。今回はテスト用に以下のようなデータベースを作成しました。
- 名前:タイトルプロパティ
- タグ:セレクトプロパティ
Notion API で実行する際に必要な、データベース ID を取得します。今回作成したテスト用のデータベースの URL は以下のようになっており、この中の 22e5dc3676004661a16a6c45e5ee1a4c
の部分がデータベース ID となります。
https://www.notion.so/chabesu-blog/22e5dc3676004661a16a6c45e5ee1a4c?v=1cc5044e126b415899a940fb284cab66
次に、Python のファイルを作成し、下記のコードを記載します。ファイル名は任意ですが、今回は main.py
としておきます。
import requests
NOTION_API_KEY = 'secret_*******************************************'
DATABASE_ID = '22e5dc3676004661a16a6c45e5ee1a4c'
url = 'https://api.notion.com/v1/pages'
headers = {
'Notion-Version': '2022-06-28',
'Authorization': 'Bearer ' + NOTION_API_KEY,
'Content-Type': 'application/json',
}
json_data = {
'parent': { 'database_id': DATABASE_ID },
'properties': {
'名前': {
'title': [
{
'text': {
'content': 'Pythonで追加'
}
}
]
},
'タグ': {
'multi_select': [
{
'name': 'Python'
}
]
},
},
}
response = requests.post(url, headers=headers, json=json_data)
print(response)
作成した python ファイルを python main.py
コマンドで実行します。成功していればログに <Response [200]>
と表示され、データベースに「Pythonで追加」が追加されています。200 以外の数値が出た場合は、 Notion API のステータスコード一覧 を参考に、どこに原因があるのかをコード内の不具合を調査してみてください。
Python で Notion API を使用し、データベースのページを更新するサンプルコード
上記のデータベースの「Pythonで追加」ページの「Python」タグを「タグ2」に変更するソースコードのサンプルを書いてみます。まずは「Pythonで追加」ページの URL を確認して、ページ ID を取得します。
https://www.notion.so/chabesu-blog/Python-037c1ac036d94ffc91ee96eec2104112
上記の URL の 037c1ac036d94ffc91ee96eec2104112
の部分がページ ID となります。
ページID を取得したら、ページを更新するコードを書いていきます。先ほどのページ作成のコードとの違いとして、以下のような点に注意してください。
-
method
がPOST
→PATCH
に変更 -
DATABASE_ID
をPAGE_ID
に変更 -
url
を変更
import requests
NOTION_API_KEY = 'secret_*******************************************'
PAGE_ID = '037c1ac036d94ffc91ee96eec2104112'
url = 'https://api.notion.com/v1/pages/' + PAGE_ID
headers = {
'Notion-Version': '2022-06-28',
'Authorization': 'Bearer ' + NOTION_API_KEY,
'Content-Type': 'application/json',
}
json_data = {
'properties': {
'タグ': {
'multi_select': [
{
'name': 'タグ2'
}
]
},
},
}
response = requests.patch(url, headers=headers, json=json_data)
print(response)
python main.py
コマンドを実行し、ログに <Response [200]>
と表示され、Notion 側のタグが「タグ2」に変更されていれば成功です。
Python で Notion API を使用しデータベースからページを取得するサンプルコード
データベース内から「タグ2」が付いたページのみを取得するサンプルコードについて解説します。
ページを検索するコードを記載します。以下に注意してください。
-
DATABASE_ID
を使用 -
method
がPOST
-
url
にはquery
を使用
import requests
from pprint import pprint
NOTION_API_KEY = 'secret_*******************************************'
DATABASE_ID = '22e5dc3676004661a16a6c45e5ee1a4c'
url = 'https://api.notion.com/v1/databases/' + DATABASE_ID + '/query'
headers = {
'Notion-Version': '2022-06-28',
'Authorization': 'Bearer ' + NOTION_API_KEY,
'Content-Type': 'application/json',
}
json_data = {
'filter': {
'property': 'タグ',
'multi_select': {
'contains': 'タグ2'
}
}
}
response = requests.post(url, headers=headers, json=json_data)
pprint(response.json())
python ma.py
コマンドを実行し、成功していれば以下のようにデータベース内から検索条件に一致するデータを取得することができます。
フィルタ条件の指定方法はプロパティ毎に違います。詳細は、下記の公式ページを参照して下さい。
Notion API の公式ページ
今回紹介した作成・更新・取得以外にも Notion API を使うことでさまざまな操作をすることが可能です。Notion API についてさらに詳しく知りたい方は、下記の公式ページを参考にしてみてください。
また、今回解説した内容は公式では以下のページにそれぞれ掲載されています。
- データベースにページを作成: Create a page
- データベースのページを更新: Update a database
- データベース内のページを検索(取得): Query a database
おわりに
今回は、Python で Notion API を使用する方法をサンプルコード付きで紹介しました。GAS や JavaScript で Notion API を使用する方法についても他の記事で解説しています。ぜひ合わせてお読みください。