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():
api_key = os.environ.get("OPENAI_API_KEY")
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, aufzählungen)."""
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')
parts = []
in_list = False
for line in lines:
stripped = line.strip()
is_li = stripped.startswith('- ') or stripped.startswith('* ')
if is_li:
if not in_list:
parts.append('