株式会社TEMPのロゴ画像

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 接続用のデータベースを準備します。今回はテスト用に以下のようなデータベースを作成しました。

  • 名前:タイトルプロパティ
  • タグ:セレクトプロパティ
テスト用 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] と表示されている
「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] と表示されている
「タグ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 が付いたデータのみ取得することができた
💡

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

Notion API の公式ページ

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

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

おわりに

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

もっと Notion を学びたい方へ

初学者からでも安心して Notion を学べるオンラインコミュニティ「Notion 大学」を運営しています。会員数は現在300名以上。

  • 分からないことは24時間チャットツールでいつでも質問できる
  • コミュニティ内の限定勉強会でタスク管理や知識管理術が学べる
  • 1から学べる Notion 学習ロードマップで初心者からでも学習可能
  • Notion 大学限定の学習動画が100本以上
  • 定期的に開催している有料セミナーへの無料参加券
  • 過去の有料記事・有料テンプレートが全て閲覧可能
コンテンツや特典盛りだくさんです。参加方法は下記の記事をご覧ください。

この記事の執筆者

チャベスのアイコン画像

チャベス

Web ライター・ディレクター。Notion 公式のおすすめのテンプレートクリエイター。個人で Notion をちょっと便利にする Chrome 拡張機能を開発中。代表作は「NotionSidebarHider」「Notion文字数カウント」。本業はメーカーで研究開発をしているエンジニア。

Twitter / Notion