Hilfetexte ergänzt
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user