new file: README.md

new file:   app.py
	new file:   config.json
	new file:   requirements.txt
This commit is contained in:
SimolZimol
2026-08-03 22:39:09 +02:00
parent 87f58e2ff3
commit 13b72c2e8b
4 changed files with 395 additions and 0 deletions

79
README.md Normal file
View File

@@ -0,0 +1,79 @@
# 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: <http://localhost:5000/cool>
## 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 <http://localhost:8000> (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.