NotionデータベースをJSONでファイルに出力するPythonプログラム

Notionのデータベースの内容をファイルに出力するプログラムを作ったので公開します。将来NotionがEvernoteみたいになったときにデータを救出するために準備として作りました。

1. 準備

1.1. APIトークンの発行

Notion APIインテグレーション – Notion (ノーション)ヘルプセンターのページを参照して自分のNotionトークンを発行してください。
この値は大切に保存してください。

1.2.データベースIDの確認

「notion api データベースID」などでググってデータベースIDを確認してください。
データベースのURLの一部です。

1.3. Pythonおよび必要なライブラリのインストール

Pythonのインストールがまだの場合は、Welcome to Python.org からPythonをダウンロードしてインストールしてください。
詳細はPythonのインストールを説明したサイトが多くありますので、場合によりそちらを参照してください。基本的にはインストーラの通りに入れれば動くはずです。
次いで、`pip install notion-client`と入力してNotionのライブラリをインストールします。

※これが無くても100件以内ならPythonで取得できたのですが、どうしても100件以上のデータを取るにはライブラリ(API)を使った方法しかうまくいきませんでした。

2.データベースを取得するプログラム

以下の3行は上で取得したトークンやデータベースIDを直接指定してもかまいません。

import notion_param as n
notion_api_token = n.getApiKey()
database_id = n.getNotionDb()

以下を出力したいファイルのパスに書き換えてください。

 with open(c:\\data\\notion_data.txt", "w", encoding="utf-8") as file:

以下が実際にダウンロードに使用したプログラムです。
トークンやデータベースIDは上記のとおり、プログラム外から取得しています。

import json
import requests
import os
from notion_client import Client

# Notion Clientを使用するパターン
# Notion APIトークンとデータベースIDを設定してください
import notion_param as n
notion_api_token = n.getApiKey()
database_id = n.getNotionDb()
client = Client(auth=notion_api_token)

# Notionデータベースからデータを取得する関数
def get_notion_data():
    loop_cnt = 0
    next_cursor = ""
    response = client.databases.query(
        **{
            "database_id": database_id,
        }
        
    )
    data = []
    data += response["results"]
    has_more = response["has_more"]
    next_cursor = response["next_cursor"] if (has_more) else ""
    while has_more:
        loop_cnt += 1
        response = client.databases.query(
            **{
            "database_id": database_id,
            "start_cursor": next_cursor
            }
        )
        data += response["results"]
        has_more = response["has_more"]
        next_cursor = response["next_cursor"] if (has_more) else ""
        #無限ループ防止
        if loop_cnt > 20:
            has_more = False

    return data

# データをテキストファイルに書き込む関数
def write_to_text_file(data):
    #print(data)
    with open(c:\\data\\notion_data.txt", "w", encoding="utf-8") as file:
        for item in data:
            file.write(f"{item}\n")


if __name__ == "__main__":
    notion_data = get_notion_data()
    write_to_text_file(notion_data)
    print("Notionデータベースからテキストファイルにデータを書き込みました。")

それではうまくいきますように!


いいなと思ったら応援しよう!