Hilfetexte ergänzt

This commit is contained in:
Erik Thiele
2026-06-07 12:35:10 +02:00
parent 0efc5bb346
commit 0e192a615d
10 changed files with 339 additions and 170 deletions

View File

@@ -1,40 +1,61 @@
#!/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
# -------------------------------------------------
# Customer / Willkommensseite
# -------------------------------------------------
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():
"""Initialize OpenAI client from environment variable"""
# api_key = os.getenv("OPENAI_API_KEY")
"""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):
"""Try to fetch a logo URL from Brandfetch CDN."""
"""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}")
# Direct CDN URL construction - Brandfetch provides logos via cdn.brandfetch.io
logo_url = f"https://cdn.brandfetch.io/{domain}/logo?c=1idyd4Tpb2nKaXIIc8T"
# if validate_logo_url(logo_url):
print(f"✅ Generate - Brandfetch Logo gefunden: {logo_url}")
return logo_url
# return None
# -------------------------------------------------
# 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}")
"""Search for customer logo URL using OpenAI and web search"""
try:
client = get_openai_client()
@@ -57,7 +78,7 @@ def search_customer_logo(customer_name):
)
logo_url = response.choices[0].message.content.strip()
print (f"🔍 OpenAI Logo-URL: {logo_url}")
print(f"🔍 OpenAI Logo-URL: {logo_url}")
if logo_url.upper() == "FALLBACK":
logo_url = None
@@ -72,7 +93,20 @@ def search_customer_logo(customer_name):
return None
# -------------------------------------------------
# HTML-Generierung
# -------------------------------------------------
def generate_welcome_html(customer_names, logo_urls, site="stuttgart"):
"""
Generiert den HTML-Code für die Willkommensseite.
- Links oben: CANCOM-Logo + "meets" + Kundenlogos (280px Breite)
- Rechts unten: "Herzlich Willkommen in unserer Niederlassung {Standort}"
customer_names: Liste der Kundennamen (max. 3)
logo_urls: Liste der Logo-URLs (gleiche Reihenfolge)
site: Standort-Name für die Anzeige
"""
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})")
@@ -174,8 +208,13 @@ def generate_welcome_html(customer_names, logo_urls, site="stuttgart"):
return html_content
# -------------------------------------------------
# Speichern + Playlist-Einfügung
# -------------------------------------------------
def save_welcome_page(customer_names, logo_urls, site="stuttgart"):
"""Save welcome page and return filename"""
"""Speichert die generierte Willkommensseite als welcome.html im Lobby-Verzeichnis.
Gibt den Dateinamen zurück oder None bei Fehler."""
try:
welcome_dir = os.path.join(MEDIA_DIR, site, "lobby")
os.makedirs(welcome_dir, exist_ok=True)
@@ -196,9 +235,10 @@ def save_welcome_page(customer_names, logo_urls, site="stuttgart"):
def add_customer_to_lobby_playlist(html_filename, site="stuttgart"):
"""Add customer welcome page to lobby playlist for a specific site"""
"""Fügt die Willkommensseite (welcome.html) an Position 0 in die Lobby-Playlist ein.
Entfernt vorher alle vorhandenen welcome.html-Einträge (als String oder Dict).
Importiert load_config/save_config aus app.py (kein Zirkelimport)."""
try:
# Import here to avoid circular imports
from app import load_config, save_config
config = load_config()
@@ -208,7 +248,8 @@ def add_customer_to_lobby_playlist(html_filename, site="stuttgart"):
lobby = screens.setdefault("lobby", {})
playlist = lobby.setdefault("playlist", [])
full_filename = f"{html_filename}"
full_filename = f"{html_filename}"
# Alte welcome.html-Einträge entfernen (sowohl String- als auch Dict-Form)
playlist[:] = [
item for item in playlist
if not (
@@ -222,4 +263,4 @@ def add_customer_to_lobby_playlist(html_filename, site="stuttgart"):
return True
except Exception as e:
print(f"❌ Generate - Error adding to playlist: {e}")
return False
return False