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)
|