Files
kantine2ical/README.md

111 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Kantine BHZ Kiel-Wik Speiseplan zu iCal
Liest die PDF-Speisepläne von [kantine-bhz.de](http://kantine-bhz.de) aus und erzeugt eine iCal-Datei (`.ics`) für den Import in Google Kalender. Jeder Termin enthält alle Tagesgerichte (I. bis V.) und ist auf 12:00 Uhr mittags gesetzt.
## Voraussetzungen
- Python 3.9+ (für `zoneinfo`)
- Bestehendes venv unter `.venv`
## Installation
1. Virtuelle Umgebung aktivieren:
**Windows (PowerShell):**
```powershell
.venv\Scripts\Activate.ps1
```
**Windows (CMD):**
```cmd
.venv\Scripts\activate.bat
```
2. Abhängigkeiten installieren:
```bash
pip install -r requirements.txt
```
## Nutzung
```bash
python kantine2ical.py
```
Erzeugt standardmäßig die Datei `kantine_speiseplan.ics` im aktuellen Verzeichnis.
**Optionen:**
- `-o DATEI` / `--output DATEI` Ausgabedatei (Standard: `kantine_speiseplan.ics`)
- `--url URL` Basis-URL der Kantine (Standard: `http://kantine-bhz.de`)
Beispiel:
```bash
python kantine2ical.py -o mein_speiseplan.ics
```
## Google Kalender Import
1. [Google Kalender](https://calendar.google.com) öffnen
2. Neben „Meine Kalender“ auf das Drei-Punkte-Menü klicken → **Import**
3. Die erzeugte `.ics`-Datei auswählen und dem gewünschten Kalender zuordnen
Die Termine erscheinen mit der Zeitzone Europe/Berlin um 12:00 Uhr mit allen fünf Tagesgerichten in der Beschreibung.
---
## Server-Modus (abonnierbare URL)
Der Speiseplan kann als **externer Kalender** per URL angeboten werden. Ein Flask-Server liefert die iCal-Daten; Google Kalender und andere Clients können die URL direkt abonnieren. Im Hintergrund wird täglich nach neuen Speiseplan-PDFs gesucht und der Kalender aktualisiert.
**Startseite:** Unter der Stamm-URL (`/`) liefert der Server eine **Startseite** mit:
- der Abo-URL zum Kopieren (inkl. „Kopieren“-Button),
- einer Anleitung zur Einbettung in **Google Kalender** (Schritt für Schritt),
- Kurzhinweisen für **andere Kalender-Apps** (Outlook, Apple Kalender, Thunderbird, Android/iOS),
- der Angabe, **wann die Speisepläne zuletzt aktualisiert** wurden.
Die eigentliche iCal-Datei für Abos und direkten Download ist unter `/calendar.ics` erreichbar.
**Voraussetzung:** Für „Von URL hinzufügen“ in Google Kalender muss die Server-URL von außen erreichbar sein (öffentliche IP, Reverse-Proxy oder z. B. ngrok für Tests).
1. Abhängigkeiten installieren (inkl. Flask): `pip install -r requirements.txt`
2. Server starten:
```bash
python app.py
```
Oder mit Flask-CLI: `flask --app app run --host 0.0.0.0 --port 5000`
3. Im Browser die **Startseite** aufrufen: `http://<host>:5000/` dort die Abo-URL kopieren und die Anleitung nutzen.
4. Direkte Abo-URL: `http://<host>:5000/calendar.ics` (bzw. Port durch Ihren Host ersetzen).
5. In Google Kalender: „Andere Kalender hinzufügen“ → „Von URL“ → Abo-URL eintragen.
**Konfiguration (optional, Umgebungsvariablen):**
- `KANTINE_BASE_URL` Basis-URL der Kantine (Standard: `http://kantine-bhz.de`)
- `REFRESH_INTERVAL_SECONDS` Sekunden zwischen Aktualisierungen (Standard: 86400 = 24 h)
- `PUBLIC_URL` Öffentliche Basis-URL (z. B. `https://kantine.elpatron.me`). Wenn gesetzt, wird diese URL für die Kalender-Abo-URL auf der Startseite verwendet. **Empfohlen hinter HTTPS-Proxy**, falls der Proxy keine `X-Forwarded-Proto`/`X-Forwarded-Host`-Header sendet sonst erscheint dort weiterhin `http://`.
---
## Docker (Production)
Für den Betrieb als Container (z. B. auf einem Server):
**Build und Run:**
```bash
docker build -t kantine2ical .
docker run -p 8000:8000 -e PUBLIC_URL=https://kantine.elpatron.me kantine2ical
```
(Ersetzen Sie `https://kantine.elpatron.me` durch Ihre öffentliche HTTPS-URL. Dann zeigt die Startseite die Kalender-URL mit `https://`.)
- **Startseite** (Anleitung + Abo-URL): `http://<host>:8000/` bzw. Ihre HTTPS-URL
- **iCal-Abo:** `http://<host>:8000/calendar.ics` bzw. `https://<host>/calendar.ics`
**Mit Docker Compose:**
```bash
docker compose up -d
```
Der Container läuft auf Port 8000 und startet bei Bedarf neu (`restart: unless-stopped`).
**Hinweis:** Für den Einsatz in Production wird ein **Reverse-Proxy mit HTTPS** (z. B. Traefik, Caddy oder nginx) vor dem Container empfohlen, damit Google die Kalender-URL zuverlässig abrufen kann.