91 lines
3.3 KiB
Python
91 lines
3.3 KiB
Python
import os
|
|
import requests
|
|
import json
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
NOTION_API_KEY = os.getenv("NOTION_API_KEY")
|
|
NOTION_DB_ID = "2ec88f4285448014ab38ea664b4c2b81" # Verticals DB
|
|
PRODUCT_DB_ID = "2ec88f42854480f0b154f7a07342eb58" # Product Categories DB (from user link)
|
|
|
|
headers = {
|
|
"Authorization": f"Bearer {NOTION_API_KEY}",
|
|
"Notion-Version": "2022-06-28",
|
|
"Content-Type": "application/json"
|
|
}
|
|
|
|
# 1. Fetch Product Map (ID -> Name)
|
|
product_map = {}
|
|
def fetch_products():
|
|
url = f"https://api.notion.com/v1/databases/{PRODUCT_DB_ID}/query"
|
|
response = requests.post(url, headers=headers, json={"page_size": 100})
|
|
if response.status_code == 200:
|
|
results = response.json().get("results", [])
|
|
for p in results:
|
|
p_id = p["id"]
|
|
# Name property might be "Name" or "Product Category"
|
|
props = p["properties"]
|
|
name = "Unknown"
|
|
if "Name" in props:
|
|
name = props["Name"]["title"][0]["plain_text"] if props["Name"]["title"] else "N/A"
|
|
elif "Product Category" in props:
|
|
name = props["Product Category"]["title"][0]["plain_text"] if props["Product Category"]["title"] else "N/A"
|
|
|
|
product_map[p_id] = name
|
|
# Also map the page ID itself if used in relations
|
|
|
|
else:
|
|
print(f"Error fetching products: {response.status_code}")
|
|
|
|
# 2. Check Verticals with Relation Resolution
|
|
def check_vertical_relations(search_term):
|
|
url = f"https://api.notion.com/v1/databases/{NOTION_DB_ID}/query"
|
|
payload = {
|
|
"filter": {
|
|
"property": "Vertical",
|
|
"title": {
|
|
"contains": search_term
|
|
}
|
|
}
|
|
}
|
|
resp = requests.post(url, headers=headers, json=payload)
|
|
if resp.status_code == 200:
|
|
results = resp.json().get("results", [])
|
|
if not results:
|
|
print(f"❌ No vertical found for '{search_term}'")
|
|
return
|
|
|
|
for page in results:
|
|
props = page["properties"]
|
|
title = props["Vertical"]["title"][0]["plain_text"]
|
|
|
|
# Resolve Primary
|
|
pp_ids = [r["id"] for r in props.get("Primary Product Category", {}).get("relation", [])]
|
|
pp_names = [product_map.get(pid, pid) for pid in pp_ids]
|
|
|
|
# Resolve Secondary
|
|
sp_ids = [r["id"] for r in props.get("Secondary Product", {}).get("relation", [])]
|
|
sp_names = [product_map.get(pid, pid) for pid in sp_ids]
|
|
|
|
print(f"\n🔹 VERTICAL: {title}")
|
|
print(f" Primary Product (Rel): {', '.join(pp_names)}")
|
|
print(f" Secondary Product (Rel): {', '.join(sp_names)}")
|
|
|
|
# Pains/Gains short check
|
|
pains = props.get("Pains", {}).get("rich_text", [])
|
|
print(f" Pains Length: {len(pains[0]['plain_text']) if pains else 0} chars")
|
|
|
|
else:
|
|
print(f"Error fetching vertical: {resp.status_code}")
|
|
|
|
# Run
|
|
print("Fetching Product Map...")
|
|
fetch_products()
|
|
print(f"Loaded {len(product_map)} products.")
|
|
|
|
print("\nChecking Verticals...")
|
|
targets = ["Hospital", "Hotel", "Logistics", "Manufacturing", "Retail", "Reinigungs", "Dienstleister", "Facility"]
|
|
for t in targets:
|
|
check_vertical_relations(t)
|