in unserer
Niederlassung {site_display}!
#!/usr/bin/env python3
"""
Willkommensseite-Generierung für CANCOM Simple Signage.
───────────────────────────────────────────────────────
Diese Hilfsdatei sucht anhand von Kundennamen Logos (via OpenAI + Brandfetch),
generiert daraus eine HTML-Willkommensseite und fügt sie in die Lobby-Playlist ein.
"""
import os
import json
from openai import OpenAI
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
MEDIA_DIR = os.path.join(BASE_DIR, "media")
WELCOME_FILENAME = "welcome.html"
# -------------------------------------------------
# OpenAI-Client
# -------------------------------------------------
def get_openai_client():
"""Initialisiert den OpenAI-Client mit dem API-Key.
Der Key ist aktuell direkt im Code hinterlegt – sollte in env var ausgelagert werden."""
api_key = "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"
if not api_key:
raise ValueError("OPENAI_API_KEY environment variable not set")
return OpenAI(api_key=api_key)
# -------------------------------------------------
# Brandfetch-Logo-Suche
# -------------------------------------------------
def get_brandfetch_logo(domain):
"""Versucht, ein Firmenlogo über Brandfetch CDN abzurufen.
Baut eine direkte CDN-URL: https://cdn.brandfetch.io/{domain}/logo"""
print(f"🔍 Generate - Versuche Brandfetch für Domain: {domain}")
logo_url = f"https://cdn.brandfetch.io/{domain}/logo?c=1idyd4Tpb2nKaXIIc8T"
print(f"✅ Generate - Brandfetch Logo gefunden: {logo_url}")
return logo_url
# -------------------------------------------------
# Logo-Ermittlung via OpenAI
# -------------------------------------------------
def search_customer_logo(customer_name):
"""
Sucht das Logo eines Kunden über einen zweistufigen Prozess:
1. OpenAI GPT-4 ermittelt die Domain des Unternehmens
2. Brandfetch CDN liefert das Logo zur Domain
Gibt die Logo-URL zurück oder None, wenn nichts gefunden wurde.
"""
print(f"✅ Generate - Suche nach Kundenlogo für: {customer_name}")
try:
client = get_openai_client()
response = client.chat.completions.create(
model="gpt-4",
messages=[
{
"role": "system",
"content": """Du bist ein Experte für die Suche nach Domain Namen. Du findest anhand des Firmennamens die richtige Domain dazu
Gib nur den Domain Namen zurück, keine weiteren Informationen.
FALLBACK: Wenn du kein direkt Aufrufbare Domain findest, antworte mit "FALLBACK"."""
},
{
"role": "user",
"content": f"Finde die Domain für dasUnternehmen: {customer_name}"
}
],
temperature=0.1,
max_tokens=100
)
logo_url = response.choices[0].message.content.strip()
print(f"🔍 OpenAI Logo-URL: {logo_url}")
if logo_url.upper() == "FALLBACK":
logo_url = None
if logo_url:
brandfetch_url = get_brandfetch_logo(logo_url)
if brandfetch_url:
return brandfetch_url
return None
except Exception as e:
print(f"❌ Logo search error: {e}")
return None
# -------------------------------------------------
# HTML-Generierung
# -------------------------------------------------
def md_to_html(text):
"""Wandelt einfaches Markdown in HTML um (fett, kursiv, code, zeilenumbrüche)."""
import re
text = re.sub(r'\*\*(.+?)\*\*', r'\1', text)
text = re.sub(r'\*(.+?)\*', r'\1', text)
text = re.sub(r'`(.+?)`', r'\1', text)
lines = text.split('\n')
return '
'.join(line.strip() for line in lines)
def generate_welcome_html(customer_names, logo_urls, contacts=None, site="stuttgart", background_url=None):
"""
Generiert den HTML-Code für die Willkommensseite.
- Links oben: CANCOM-Logo + "meets" + Kundenlogos
- Unter jedem Logo: Ansprechpartner-Kontaktdaten (Landscape)
- Portrait: Kontaktdaten links neben den Logos
customer_names: Liste der Kundennamen (max. 3)
logo_urls: Liste der Logo-URLs (gleiche Reihenfolge)
contacts: Liste der Ansprechpartner-Texte (Markdown, optional)
site: Standort-Name für die Anzeige
background_url: URLs zum Hintergrundbild (None → Standard-Wallpaper)
"""
site_display = site.capitalize()
names_str = ", ".join(customer_names) if customer_names else "Unbekannt"
print(f"✅ Generate - Willkommensseite wird generiert für: {names_str} (site: {site})")
site_display = site.capitalize()
if contacts is None:
contacts = [""] * len(customer_names)
bg_image = background_url if background_url else "/static/wallpaper.png"
cancom_svg = ''''''
logo_html = ""
for i, (name, url) in enumerate(zip(customer_names, logo_urls)):
if url:
contact_html = ""
if i < len(contacts) and contacts[i]:
contact_html = f'''