eventlens
eventlens ist ein selbst gehostetes MVP zum Beobachten von Kuenstlern und Events in Hamburg oder ganz Deutschland.
Funktionen
- Watchlist fuer Kuenstler oder Events
- Regionen
hamburgundgermany - Geplanter Event-Abgleich ueber mehrere Quellen
- E-Mail-Benachrichtigung bei neu gefundenen Terminen
- Markierung, ob Tickets gekauft wurden
- Erinnerung etwa eine Woche vor dem Termin
- Webfrontend ohne separaten Build-Step
- Docker-Deployment hinter NGINX
Projektstruktur
backend/: FastAPI-Anwendungdeploy/nginx/eventlens.conf: Beispiel fuer Reverse Proxydocker-compose.yml: App- und Datenbank-Container
Start
cp .env.example .env
docker compose up -d --build
Danach ist das Webfrontend lokal unter http://127.0.0.1:8001 erreichbar.
Die Swagger-Oberflaeche liegt unter http://127.0.0.1:8001/docs.
API-Statusinfo findest du unter http://127.0.0.1:8001/api.
Wichtige Umgebungsvariablen
TICKETMASTER_API_KEY: Ticketmaster Discovery APIJAMBASE_API_KEY: JamBase Data API Bearer TokenJAMBASE_USER_AGENT: eigene App-Kennung fuer JamBase-RequestsBANDSINTOWN_APP_ID: echte Bandsintown App-ID fuer Artist-EventsEVENTIM_ENABLED: aktiviert den Eventim-Website-ProviderEVENTLENS_AUTH_USERNAME,EVENTLENS_AUTH_PASSWORD: optionaler Passwortschutz fuer Webfrontend und APINOTIFICATION_EMAIL_TO: Empfaenger fuer BenachrichtigungenSMTP_HOST,SMTP_USER,SMTP_PASS: SMTP-Zugang fuer E-Mails
Beispielablauf
- Watch Item anlegen:
curl -X POST http://127.0.0.1:8001/watch-items \
-H "Content-Type: application/json" \
-d '{
"name": "AnnenMayKantereit",
"watch_type": "artist",
"region_scope": "hamburg"
}'
- Sync manuell anstossen:
curl -X POST http://127.0.0.1:8001/sync
- Events abfragen:
curl http://127.0.0.1:8001/events
- Ticketkauf markieren:
curl -X PATCH http://127.0.0.1:8001/events/1/purchase \
-H "Content-Type: application/json" \
-d '{"is_ticket_purchased": true}'
Hinweise fuer Debian 13 und NGINX
- NGINX kann nativ auf dem Host laufen und auf
127.0.0.1:8001proxyen. - Das Backend lauscht absichtlich nur auf
127.0.0.1, damit es nicht direkt aus dem Internet erreichbar ist. - Fuer produktiven Betrieb solltest du TLS im NGINX-Terminator aktivieren.
- Setze
EVENTLENS_AUTH_USERNAMEundEVENTLENS_AUTH_PASSWORD, wenn Eventlens ueber NGINX, VPN oder Tunnel erreichbar ist. - Das Frontend wird direkt vom FastAPI-Container ausgeliefert, es ist kein Node- oder Build-Container noetig.
Backup und Restore
Ein komprimiertes Datenbank-Backup kannst du so erstellen:
cd /opt/eventlens
bash scripts/backup-db.sh
Die Datei landet standardmaessig unter backups/. Einen anderen Zielordner kannst du ueber BACKUP_DIR setzen:
BACKUP_DIR=/srv/backups/eventlens bash scripts/backup-db.sh
Restore-Beispiel:
gunzip -c backups/eventlens-eventlens-YYYYMMDD-HHMMSS.sql.gz | \
docker compose exec -T db mariadb -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME"
Bekannte Betriebsfalle
Wenn MariaDB bereits mit aelteren Zugangsdaten initialisiert wurde, reicht eine Aenderung in .env allein nicht aus. In dem Fall bleibt das Docker-Volume bestehen und der App-User in MariaDB hat noch das alte Passwort.
Zum Angleichen auf die aktuellen Werte aus .env:
cd /opt/eventlens
sudo bash scripts/fix-db-user.sh
Wenn dir die Datenbank egal ist und du komplett frisch starten willst:
cd /opt/eventlens
sudo docker compose down -v
sudo docker compose up -d --build
Naechste sinnvolle Ausbaustufen
- Web-Frontend fuer Watchlist und Events
- Weitere Datenquellen neben Ticketmaster
- Telegram oder Push-Benachrichtigungen
- Nutzerverwaltung
Provider-Hinweise
- Ticketmaster nutzt die offizielle Discovery API.
- JamBase nutzt die JamBase Data API ueber
https://api.data.jambase.com/v3/eventsmit Bearer-Token undUser-Agent. - Bandsintown nutzt die offizielle Artist-Events-API und arbeitet deshalb vor allem fuer Watchlist-Eintraege vom Typ
artist. - Eventim nutzt eine beobachtete oeffentliche JSON-Web-API von eventim.de. Das ist keine offiziell dokumentierte Developer-API, aber stabiler als HTML-Scraping. Aenderungen an diesem Web-Endpoint koennen trotzdem Anpassungen noetig machen.
- Eventim kann serverseitig durch Eventim/Akamai geblockt werden. In dem Fall liefert
eventlensbewusst keine falschen Treffer, sondern ueberspringt den Provider und schreibt einen Hinweis ins Backend-Log. - Bandsintown benoetigt eine echte, von Bandsintown freigeschaltete App-ID. Ohne diese wird der Provider deaktiviert oder als
blockedangezeigt. - Barclays Arena wird ueber die offizielle Eventseite der Arena abgefragt.
- Fabrik wird ueber die offizielle Veranstaltungsseite der Fabrik Hamburg abgefragt.
- Fuer robuste persoenliche Ueberwachung koennen pro Watchlist-Eintrag direkte Quellen-URLs hinterlegt werden. Diese werden beim Sync gezielt per JSON-LD und HTML-Textscan durchsucht.