Files
Brancheneinstufung2/create_notion_db.py
Floke 66f759391b feat(notion): Initial PoC for Notion Integration
- Added documentation for Notion setup and resources (notion_integration.md).

- Added scripts for authentication test, database creation, and product insertion.

- Successfully tested connection and data mapping for 'RoboPlanet Product Master'.
2026-01-06 20:33:18 +00:00

72 lines
2.4 KiB
Python

import requests
import json
import os
TOKEN_FILE = 'notion_api_key.txt'
PARENT_PAGE_ID = "2e088f42-8544-8024-8289-deb383da3818" # "Roboplanet" page
def create_product_database(token):
print(f"Creating '📦 RoboPlanet Product Master' database under parent {PARENT_PAGE_ID}...")
url = "https://api.notion.com/v1/databases"
headers = {
"Authorization": f"Bearer {token}",
"Notion-Version": "2022-06-28",
"Content-Type": "application/json"
}
database_definition = {
"parent": {"type": "page_id", "page_id": PARENT_PAGE_ID},
"title": [{"type": "text", "text": {"content": "📦 RoboPlanet Product Master"}}],
"properties": {
"Model Name": {"title": {}},
"Brand": {"select": {"options": [
{"name": "VIGGO", "color": "blue"},
{"name": "PUDU", "color": "orange"}
]}},
"Category": {"select": {"options": [
{"name": "cleaning", "color": "green"},
{"name": "service", "color": "blue"},
{"name": "security", "color": "red"}
]}},
# Core Specs
"Battery Runtime (min)": {"number": {"format": "number"}},
"Charge Time (min)": {"number": {"format": "number"}},
"Weight (kg)": {"number": {"format": "number"}},
"Max Slope (deg)": {"number": {"format": "number"}},
# Cleaning Layer
"Fresh Water (l)": {"number": {"format": "number"}},
"Area Performance (m2/h)": {"number": {"format": "number"}},
# Metadata
"Manufacturer URL": {"url": {}},
"GTM Status": {"status": {}}
}
}
try:
response = requests.post(url, headers=headers, json=database_definition)
response.raise_for_status()
new_db = response.json()
print(f"\n=== SUCCESS ===")
print(f"Database created! ID: {new_db['id']}")
print(f"URL: {new_db.get('url')}")
return new_db['id']
except requests.exceptions.HTTPError as e:
print(f"\n=== ERROR ===")
print(f"HTTP Error: {e}")
print(f"Response: {response.text}")
return None
def main():
try:
with open(TOKEN_FILE, 'r') as f:
token = f.read().strip()
except FileNotFoundError:
print(f"Error: Could not find '{TOKEN_FILE}'")
return
db_id = create_product_database(token)
if __name__ == "__main__":
main()