Files
Brancheneinstufung2/scripts/query_notion_db.py
2026-02-17 19:44:42 +00:00

107 lines
3.5 KiB
Python

import os
import requests
import json
from dotenv import load_dotenv
load_dotenv(dotenv_path="/home/node/clawd/.env")
def find_db_by_name(query_name):
token = os.getenv("NOTION_API_KEY")
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
url = "https://api.notion.com/v1/search"
payload = {
"query": query_name,
"filter": {"value": "database", "property": "object"}
}
# print(f"Searching for '{query_name}' database...")
resp = requests.post(url, headers=headers, json=payload)
if resp.status_code != 200:
print(f"Error searching DB: {resp.text}")
return None
results = resp.json().get("results", [])
if not results:
# print(f"No database named '{query_name}' found via search.")
return None
db = results[0]
return db['id']
def dump_db_content(db_id, db_name="DB"):
token = os.getenv("NOTION_API_KEY")
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28"
}
# Get all pages
url = f"https://api.notion.com/v1/databases/{db_id}/query"
resp = requests.post(url, headers=headers, json={})
if resp.status_code != 200:
print(f"Error querying DB: {resp.text}")
return
pages = resp.json().get("results", [])
print(f"\n--- Content of '{db_name}' ({len(pages)} rows) ---")
rows = []
for page in pages:
props = page['properties']
# Extract Name (Title) - Robust Logic
name = "N/A"
if "Vertical" in props and props["Vertical"]["title"]:
name = props["Vertical"]["title"][0]["plain_text"]
elif "Name" in props and props["Name"]["title"]:
name = props["Name"]["title"][0]["plain_text"]
elif "Role" in props and props["Role"]["title"]:
name = props["Role"]["title"][0]["plain_text"]
# Extract Status/Freigabe
freigabe = ""
if "Freigabe" in props:
if props["Freigabe"]["type"] == "status":
freigabe = props["Freigabe"]["status"]["name"] if props["Freigabe"]["status"] else ""
elif props["Freigabe"]["type"] == "select":
freigabe = props["Freigabe"]["select"]["name"] if props["Freigabe"]["select"] else ""
# Extract Notes
notes = ""
if "Notes" in props and props["Notes"]["rich_text"]:
notes = props["Notes"]["rich_text"][0]["plain_text"]
# Extract KPIs
kpis = ""
for kpi_key in ["KPIs", "KPI", "Quantitative Value"]:
if kpi_key in props and props[kpi_key]["rich_text"]:
kpis = props[kpi_key]["rich_text"][0]["plain_text"]
break
rows.append({"name": name, "freigabe": freigabe, "notes": notes, "kpis": kpis})
# Print clean table
print(f"{'Name':<40} | {'Freigabe':<15} | {'KPIs':<20} | {'Notes'}")
print("-" * 120)
for r in rows:
# Nur Zeilen mit Inhalt anzeigen (Filter empty names)
if r['name'] != "N/A":
print(f"{r['name']:<40} | {r['freigabe']:<15} | {r['kpis']:<20} | {r['notes']}")
if __name__ == "__main__":
db_id_ind = find_db_by_name("Industries")
if db_id_ind:
dump_db_content(db_id_ind, "Industries")
db_id_roles = find_db_by_name("Personas")
if db_id_roles:
dump_db_content(db_id_roles, "Personas")