見出し画像

notionとdeepnoteの連携方法。

notionとdeepnoteの連携で躓いた箇所を記す。

deepnoteのホーム画面→Integrations→Add integration→Edit environment variablesへ。

keyとvalueを入力。
keyは適当な名前、valueはAPIキー等。
keyを小文字で入力したことで余計な時間がかかった。

たとえEdit environment variablesのkey欄は小文字で入力しても、
os.environ[]の中は必ず大文字で入力すること。
notionとdeepnoteの連携にまつわる記事が少ないので、忘れないようにメモを置く。

import os
import requests
import pandas as pd

# keys are stored in env vars to be hidden from users
api_key = os.environ["NOTION_API_KEY"] #[]の中は大文字で入力
database_id = os.environ["DATABASE_ID"] #[]の中は大文字で入力

# define request to Notion API
headers = {
    "Authorization": f"Bearer {api_key}",
    "Notion-Version": "2021-08-16",
    "Content-Type": "application/json",
}

# load first page
response = requests.post(
    f"https://api.notion.com/v1/databases/{database_id}/query", headers=headers
).json()

# iteratively load all pages
records = response["results"]
while response["has_more"]:
    response = requests.post(
        f"https://api.notion.com/v1/databases/{database_id}/query",
        json={"start_cursor": response["next_cursor"]},
        headers=headers,
    ).json()
    
# define a helper function to transform the JSON to a Pandas DF
def get_raw_value(item):
    item_type = item['type']
    if type(item[item_type]) is list:
        if item[item_type][0]['type'] == 'text':
            return item[item_type][0]['plain_text']
    return item[item_type]

# create Pandas DF
all_values = []   
for record in records:
    properties = record['properties']
    all_values.append({
        'Name': get_raw_value(properties['Name']),
        'Total': get_raw_value(properties['Total']),
    })

df = pd.DataFrame(all_values)
df

この記事が気に入ったらサポートをしてみませんか?