diff --git a/import_references_to_notion.py b/import_references_to_notion.py new file mode 100644 index 00000000..1f5eb4fd --- /dev/null +++ b/import_references_to_notion.py @@ -0,0 +1,143 @@ +import json +import os +import requests +import sys + +# Configuration +JSON_FILE = 'analysis_robo-planet.de.json' +TOKEN_FILE = 'notion_token.txt' +# Root Page ID from notion_integration.md +PARENT_PAGE_ID = "2e088f42-8544-8024-8289-deb383da3818" +DB_TITLE = "Competitive Radar - References" + +def load_json_data(filepath): + """Loads the analysis JSON data.""" + try: + with open(filepath, 'r') as f: + return json.load(f) + except FileNotFoundError: + print(f"Error: File '{filepath}' not found.") + sys.exit(1) + except json.JSONDecodeError: + print(f"Error: Failed to decode JSON from '{filepath}'.") + sys.exit(1) + +def load_notion_token(filepath): + """Loads the Notion API token.""" + try: + with open(filepath, 'r') as f: + return f.read().strip() + except FileNotFoundError: + print(f"Error: Token file '{filepath}' not found.") + sys.exit(1) + +def create_database(token, parent_page_id): + """Creates the References database in Notion.""" + url = "https://api.notion.com/v1/databases" + headers = { + "Authorization": f"Bearer {token}", + "Notion-Version": "2022-06-28", + "Content-Type": "application/json" + } + + payload = { + "parent": {"type": "page_id", "page_id": parent_page_id}, + "title": [{"type": "text", "text": {"content": DB_TITLE}}], + "properties": { + "Reference Name": {"title": {}}, + "Competitor": {"select": {}}, + "Industry": {"select": {}}, + "Snippet": {"rich_text": {}}, + "Case Study URL": {"url": {}} + } + } + + print(f"Creating database '{DB_TITLE}'...") + response = requests.post(url, headers=headers, json=payload) + + if response.status_code != 200: + print(f"Error creating database: {response.status_code}") + print(response.text) + sys.exit(1) + + db_data = response.json() + print(f"Database created successfully! ID: {db_data['id']}") + return db_data['id'] + +def add_reference(token, db_id, competitor, reference): + """Adds a single reference entry to the database.""" + url = "https://api.notion.com/v1/pages" + headers = { + "Authorization": f"Bearer {token}", + "Notion-Version": "2022-06-28", + "Content-Type": "application/json" + } + + ref_name = reference.get("name", "Unknown Reference") + industry = reference.get("industry", "Unknown") + snippet = reference.get("testimonial_snippet", "") + case_url = reference.get("case_study_url") + + # Truncate snippet if too long (Notion limit is 2000 chars for text block, but good practice anyway) + if len(snippet) > 2000: + snippet = snippet[:1997] + "..." + + properties = { + "Reference Name": {"title": [{"text": {"content": ref_name}}]}, + "Competitor": {"select": {"name": competitor}}, + "Industry": {"select": {"name": industry}}, + "Snippet": {"rich_text": [{"text": {"content": snippet}}]} + } + + if case_url and case_url.startswith("http"): + properties["Case Study URL"] = {"url": case_url} + + payload = { + "parent": {"database_id": db_id}, + "properties": properties + } + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() + print(f" - Added: {ref_name}") + except requests.exceptions.HTTPError as e: + print(f" - Failed to add {ref_name}: {e}") + # print(response.text) # Uncomment for debugging + +def main(): + token = load_notion_token(TOKEN_FILE) + data = load_json_data(JSON_FILE) + + # Check if we have reference analysis data + ref_analysis = data.get("reference_analysis", []) + if not ref_analysis: + print("Warning: No reference analysis data found in JSON.") + # We proceed anyway to create the DB and show it works, + # but in a real scenario we might want to exit or use dummy data. + + # 1. Create Database (You could also check if it exists, but for this script we create new) + # Ideally, we would search for an existing DB first to avoid duplicates. + # For this task, we create it. + db_id = create_database(token, PARENT_PAGE_ID) + + # 2. Iterate and Import + print("Importing references...") + count = 0 + for entry in ref_analysis: + competitor = entry.get("competitor_name", "Unknown Competitor") + refs = entry.get("references", []) + + if not refs: + print(f"Skipping {competitor} (No references found)") + continue + + print(f"Processing {competitor} ({len(refs)} references)...") + for ref in refs: + add_reference(token, db_id, competitor, ref) + count += 1 + + print(f"\nImport complete! {count} references added.") + +if __name__ == "__main__": + main()