株式会社TEMPのロゴ画像

PythonでNotion APIを実行する方法

この記事では、PythonでNotion APIを使う方法について解説します。

Notion APIの概要や具体的な活用例、Notion APIを活用したサービスなどを知りたい場合は以下の記事を参考にしてみてください。

目次

Python実行環境の準備

まず、Pythonで書かれたソースコードを動かすためには、お使いのPCにPythonを実行できる環境を準備する必要があります。Pythonの実行環境がない場合は、以下のリンクよりダウンロードが可能です。

  • Python環境構築ガイド - python.jp
    手元のマシンでPythonを動かす環境が準備できない方は「Google Colab」や「CodeSandbox」など、ブラウザ上でPythonを実行できるサービスをお使いいただくことも可能です。ご自身に合った環境をお選びください。

インテグレーションキー / データベースIDの取得

まずはじめに、Notion APIで使用するインテグレーションキーを準備します。まだ準備していない方は以下の記事を参考に準備しておいてください。

ちなみに今回は、インテグレーションキーやデータベースIDなどはコード内に直接記載します。コードを外部に公開する可能性がある場合は、インテグレーションキーなどが流出しないように環境変数に登録することをオススメします。
インテグレーションキーとデータベースIDが外部に漏れてしまうと、コネクトしたデータベースが外部から操作可能となってしまうのでご注意ください。

必要なライブラリのインストール

今回は、HTTP通信にrequestsというライブラリを使用します。以下のコマンドでインストールすることが可能です。

pip install requests

PythonでNotion APIを使用しデータベース内にページを作るサンプルコード

Notion API接続用のデータベースを準備します。今回はテスト用に以下のようなデータベースを作成しました。

  • 名前:タイトルプロパティ
  • タグ:セレクトプロパティ

テスト用DB

テスト用DB

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のステータスコード一覧を参考に、どこに原因があるのかをコード内の不具合を調査してみてください。

実行結果Response [200] と表示されている

実行結果Response [200] と表示されている

「Pythonで追加」が追加

「Pythonで追加」が追加

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」に変更されていれば成功です。

実行結果Response [200] と表示されている

実行結果Response [200] と表示されている

「タグ1」がNotion APIによって「タグ2」に変更されている

「タグ1」がNotion APIによって「タグ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** **コマンドを実行し、成功していれば以下のようにデータベース内から検索条件に一致するデータを取得することができます。

タグ2 が付いたデータのみ取得することができた

タグ2 が付いたデータのみ取得することができた

フィルタ条件の指定方法はプロパティ毎に違います。詳細は、下記の公式ページを参照して下さい。

Notion APIの公式ページ

今回紹介した作成・更新・取得以外にもNotion APIを使うことでさまざまな操作をすることが可能です。Notion APIについてさらに詳しく知りたい方は、下記の公式ページを参考にしてみてください。

また、今回解説した内容は公式では以下のページにそれぞれ掲載されています。

おわりに

今回は、PythonでNotion APIを使用する方法をサンプルコード付きで紹介しました。GASやJavaScriptでNotion APIを使用する方法についても他の記事で解説しています。ぜひ合わせてお読みください。


参考:【初心者】Pythonを効率よく勉強するには?無料サイトや参考書・ロードマップを解説|レバテックフリーランス