Updated all Notion Verticals with sharpened Pains/Gains based on internal strategy (Ops vs Infra focus). Updated SuperOffice Connector README to reflect the 'Static Magic' architecture.
118 lines
3.9 KiB
Python
118 lines
3.9 KiB
Python
import os
|
|
import requests
|
|
import json
|
|
from dotenv import load_dotenv
|
|
|
|
# Load environment variables
|
|
load_dotenv()
|
|
|
|
NOTION_API_KEY = os.getenv("NOTION_API_KEY")
|
|
NOTION_DB_ID = "2ec88f4285448014ab38ea664b4c2b81" # ID from the user's link
|
|
|
|
if not NOTION_API_KEY:
|
|
print("Error: NOTION_API_KEY not found in environment.")
|
|
exit(1)
|
|
|
|
headers = {
|
|
"Authorization": f"Bearer {NOTION_API_KEY}",
|
|
"Notion-Version": "2022-06-28",
|
|
"Content-Type": "application/json"
|
|
}
|
|
|
|
def get_vertical_data(vertical_name):
|
|
url = f"https://api.notion.com/v1/databases/{NOTION_DB_ID}/query"
|
|
payload = {
|
|
"filter": {
|
|
"property": "Vertical",
|
|
"title": {
|
|
"contains": vertical_name
|
|
}
|
|
}
|
|
}
|
|
|
|
response = requests.post(url, headers=headers, json=payload)
|
|
|
|
if response.status_code != 200:
|
|
print(f"Error fetching data for '{vertical_name}': {response.status_code} - {response.text}")
|
|
return None
|
|
|
|
results = response.json().get("results", [])
|
|
if not results:
|
|
print(f"No entry found for vertical '{vertical_name}'")
|
|
return None
|
|
|
|
# Assuming the first result is the correct one
|
|
page = results[0]
|
|
props = page["properties"]
|
|
|
|
# Extract Pains
|
|
pains_prop = props.get("Pains", {}).get("rich_text", [])
|
|
pains = pains_prop[0]["plain_text"] if pains_prop else "N/A"
|
|
|
|
# Extract Gains
|
|
gains_prop = props.get("Gains", {}).get("rich_text", [])
|
|
gains = gains_prop[0]["plain_text"] if gains_prop else "N/A"
|
|
|
|
# Extract Ops Focus (Checkbox) if available
|
|
# The property name might be "Ops. Focus: Secondary" based on user description
|
|
# Let's check keys to be sure, but user mentioned "Ops. Focus: Secondary"
|
|
# Actually, let's just dump the keys if needed, but for now try to guess
|
|
ops_focus = "Unknown"
|
|
if "Ops. Focus: Secondary" in props:
|
|
ops_focus = props["Ops. Focus: Secondary"].get("checkbox", False)
|
|
elif "Ops Focus" in props: # Fallback guess
|
|
ops_focus = props["Ops Focus"].get("checkbox", False)
|
|
|
|
# Extract Product Categories
|
|
primary_product = "N/A"
|
|
secondary_product = "N/A"
|
|
|
|
# Assuming these are Select or Multi-select fields, or Relations.
|
|
# User mentioned "Primary Product Category" and "Secondary Product Category".
|
|
if "Primary Product Category" in props:
|
|
pp_data = props["Primary Product Category"].get("select") or props["Primary Product Category"].get("multi_select")
|
|
if pp_data:
|
|
if isinstance(pp_data, list):
|
|
primary_product = ", ".join([item["name"] for item in pp_data])
|
|
else:
|
|
primary_product = pp_data["name"]
|
|
|
|
if "Secondary Product Category" in props:
|
|
sp_data = props["Secondary Product Category"].get("select") or props["Secondary Product Category"].get("multi_select")
|
|
if sp_data:
|
|
if isinstance(sp_data, list):
|
|
secondary_product = ", ".join([item["name"] for item in sp_data])
|
|
else:
|
|
secondary_product = sp_data["name"]
|
|
|
|
return {
|
|
"name": vertical_name,
|
|
"pains": pains,
|
|
"gains": gains,
|
|
"ops_focus_secondary": ops_focus,
|
|
"primary_product": primary_product,
|
|
"secondary_product": secondary_product
|
|
}
|
|
|
|
verticals_to_check = [
|
|
"Krankenhaus",
|
|
"Pflege", # Might be "Altenheim" or similar
|
|
"Hotel",
|
|
"Industrie", # Might be "Manufacturing"
|
|
"Logistik",
|
|
"Einzelhandel",
|
|
"Facility Management"
|
|
]
|
|
|
|
print("-" * 60)
|
|
for v in verticals_to_check:
|
|
data = get_vertical_data(v)
|
|
if data:
|
|
print(f"VERTICAL: {data['name']}")
|
|
print(f" Primary Product: {data['primary_product']}")
|
|
print(f" Secondary Product: {data['secondary_product']}")
|
|
print(f" Ops. Focus Secondary: {data['ops_focus_secondary']}")
|
|
print(f" PAINS: {data['pains']}")
|
|
print(f" GAINS: {data['gains']}")
|
|
print("-" * 60)
|