Notion APIを使ってデータベースにデータを自動保存する方法【備忘録】

IT・WEB

Notionのデータベースを「情報の貯蔵庫」として活用するための、API連携の基本手順をまとめます。

1. 事前準備:Notion側の設定

APIを利用するためには、Notionのワークスペース側で「通信の許可」を出す必要があります。

① インテグレーション(APIキー)の取得

  1. Notion My Integrations にアクセスします。

  2. 「新しいインテグレーション」を作成します。

  3. 発行された 「内部インテグレーションシークレット(アクセストークン)」 をコピーして保存します。

② データベースIDの確認

  1. 使用するデータベースをフルページで開きます。

  2. ブラウザのURLを確認します。

    • https://www.notion.so/【32桁の英数字】?v=...

    • この 32桁の英数字データベースID です。

③ データベースへのアクセス許可(重要)

これを忘れるとAPIが接続できません。

  1. 対象のデータベース画面右上の「」をクリックします。

  2. 一番下の「接続先」をクリックします。

  3. 先ほど作成したインテグレーション名を選択して追加します。


2. Pythonによるテスト実装

最小構成でデータを1件追加するプログラムです。

必要なライブラリ
pip install requests
フルコード
import requests
import json

# 設定情報
NOTION_TOKEN = 'あなたのアクセストークン'
DATABASE_ID = 'あなたのデータベースID'

headers = {
    "Authorization": "Bearer " + NOTION_TOKEN,
    "Content-Type": "application/json",
    "Notion-Version": "2022-06-28"
}

def add_to_notion(text_content):
    url = "https://api.notion.com/v1/pages"
    
    # 送信データの構造
    # ※「名前」というカラム(タイトル型)に保存する設定です
    data = {
        "parent": { "database_id": DATABASE_ID },
        "properties": {
            "名前": {
                "title": [
                    {
                        "text": {
                            "content": text_content
                        }
                    }
                ]
            }
        }
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(data))
    
    if response.status_code == 200:
        print("✅ 保存成功")
    else:
        print(f"❌ 失敗: {response.status_code}")
        print(response.text)

if __name__ == "__main__":
    add_to_notion("備忘録テスト投稿")

3. つまずきやすいポイント

  • 404エラーが出る場合:

    • データベースIDが間違っているか、手順1-③の「接続先」の追加が漏れています。

  • 400エラーが出る場合:

    • プロパティ名(コード内の "名前")が実際のデータベースのカラム名と一致しているか確認してください。

    • また、NotionのAPIバージョン(Notion-Version)が古い、または形式が違う可能性があります。

4. 今後の応用

この仕組みができると、以下のような自動化が可能になります。

  • Webスクレイピング: 特定のサイトから情報を抜き出し、自動でNotionにリスト化。

  • ログ保存: 自作ツールの実行結果やエラーログをNotionで管理。

  • SNS連携: 特定のハッシュタグが付いた投稿を収集。

一度基盤を作れば、data 内の properties を増やすだけで複雑なデータ管理も容易になります。

コメント

タイトルとURLをコピーしました