# Links – Flask Redirect & Link-Preview-Server Ein kleiner Flask-Webserver, der festgelegte Pfade auf externe URLs umleitet. Damit Social-Media-Plattformen (WhatsApp, Facebook, Twitter/X, LinkedIn …) eine korrekte **Link-Preview** der Zielseite anzeigen, bekommen Crawler eine HTML-Seite mit den **kopierten Open-Graph-Metadaten** der Original-Webseite. ## Funktionsweise - **Normale Browser** → `302`-Weiterleitung direkt zur Ziel-URL. - **Social-Media-Crawler / Preview-Bots** (anhand des User-Agents erkannt) → eine HTML-Seite mit den `og:`-Meta-Tags (Titel, Beschreibung, Bild) der Ziel-URL wird ausgeliefert. So funktionieren Previews mit *deinem* Pfad. Die Metadaten werden live von der Zielseite geholt und zwischengespeichert (TTL standardmäßig 1 Stunde), um die Zielseite nicht zu überlasten. ## Konfiguration Alle Routen stehen in **`config.json`**: ```json { "routes": { "/cool": "https://youtube.net", "/github": "https://github.com" } } ``` Einfach Paare aus **Server-Pfad** und **Ziel-URL** eintragen. Die Datei wird bei jeder Anfrage auf Änderungen geprüft – **kein Neustart nötig**. | Eintrag | Bedeutung | |------------------|--------------------------------------------| | `/cool` | `https://deine-domain.de/cool` | | Wert | Ziel-URL (z. B. `https://youtube.net`) | ## Umgebungsvariablen | Variable | Standard | Bedeutung | |--------------------------|----------|---------------------------------------------| | `LINKS_CONFIG` | `config.json` | Pfad zur Config-Datei | | `LINKS_CACHE_TTL` | `3600` | Cache-Zeit für Metadaten (Sekunden) | | `LINKS_FETCH_TIMEOUT` | `10` | Timeout beim Abrufen der Zielseite (Sek.) | | `PORT` | `5000` | Port im lokalen Debug-Modus | ## Lokal starten ```bash python -m venv .venv .venv\Scripts\activate # Windows pip install -r requirements.txt python app.py ``` Danach im Browser aufrufen: ## Mit Docker ```bash docker build -t links . docker run -p 8000:8000 \ -v "$(pwd)/config.json:/app/config.json" \ links ``` Der Server läuft dann unter (Gunicorn, Port 8000). ## Test der Preview Um zu prüfen, ob ein Social-Crawler die Metadaten korrekt ausliefert: ```bash curl -A "facebookexternalhit/1.1" http://localhost:5000/cool ``` Du solltest eine HTML-Seite mit `og:title`, `og:description` und `og:image` der Zielseite erhalten. Ohne diesen Header bekommst du die `302`-Weiterleitung.