Untis-Vertretungsplan: Download + JSON-Parser
  • Python 95.4%
  • Shell 2.9%
  • Dockerfile 1.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Pablo1732 47dfee246b Version 0.1.1
Feinschliff.

- Standard-INTERVAL_SECONDS in der docker-compose.yml von 60 auf 30 Sekunden gesenkt.
2026-09-15 14:30:59 +02:00
scripts Version 0.1.0 2026-09-15 14:30:58 +02:00
.gitattributes Version 0.1.0 2026-09-15 14:30:58 +02:00
.gitignore Version 0.1.0 2026-09-15 14:30:58 +02:00
docker-compose.yml Version 0.1.1 2026-09-15 14:30:59 +02:00
Dockerfile Version 0.1.0 2026-09-15 14:30:58 +02:00
download.py Version 0.1.0 2026-09-15 14:30:58 +02:00
entrypoint.sh Version 0.1.0 2026-09-15 14:30:58 +02:00
parser.py Version 0.1.0 2026-09-15 14:30:58 +02:00
README.md Version 0.1.1 2026-09-15 14:30:59 +02:00

vplan-parser

Laedt den Schul-Vertretungsplan herunter und wandelt ihn in eine vertretungen.json um -- automatisch in einem einstellbaren Intervall.

Setup / Installation

1. Docker vorhanden?

docker version

2. Bei der Registry anmelden (einmalig)

docker login git.pablo1732.de

Zugangsdaten: eigener Forgejo-Benutzername + Zugriffstoken (Scope "package: Lesen").

3. Einstellungen anpassen

In der docker-compose.yml mindestens die Serveradresse setzen:

DOWNLOAD_URL: "http://192.168.2.11"   # <- IP/Adresse deines Vertretungsplan-Servers

4. Starten

docker compose pull
docker compose up -d

Ergebnis:

  • ./data/html/ -- heruntergeladene HTML-Dateien
  • ./data/json/vertretungen.json -- die fertige JSON

Kontrolle: docker compose logs -f (mit Strg+C wieder raus).

Bedienung / Anpassung

docker compose up -d      # startet im Hintergrund
docker compose logs -f    # Live-Logs ansehen
docker compose down       # stoppt und entfernt den Container
docker compose restart    # neu starten (z.B. nach Aenderung der Einstellungen)

Einstellungen

Einstellung Standard Bedeutung
INTERVAL_SECONDS 30 Sekunden zwischen zwei Durchlaeufen. 0 = nur einmal laufen.
DOWNLOAD_URL http://192.168.2.11 IP oder Webadresse des Vertretungsplan-Servers.
DOWNLOAD_ENABLED true false = kein Download (nur umwandeln).
PARSER_ENABLED true false = keine JSON (nur herunterladen).
CLEAN_HTML_BEFORE_DOWNLOAD true HTML-Ordner vor jedem Download leeren.
TZ Europe/Berlin Zeitzone. Wichtig, weil nach "heute + Zukunft" gefiltert wird.
PARSER_ARGS (leer) Zusatzoptionen fuers Umwandeln, z.B. --debug.
DOWNLOAD_ARGS (leer) Zusatzoptionen fuers Herunterladen.

Die drei Betriebsarten

Alles (Standard): herunterladen -> umwandeln, immer wieder im Intervall.

Nur umwandeln (HTML selbst hinlegen, kein Download):

DOWNLOAD_ENABLED: "false"

Nur herunterladen (keine JSON):

PARSER_ENABLED: "false"

Eigene Skripte statt der eingebauten (ohne Neubau)

  1. Eigenes Skript unter volumes: einhaengen:
    - ./mein_parser.py:/custom/parser.py:ro
    
  2. Pfad unter environment: setzen:
    PARSER_SCRIPT: "/custom/parser.py"
    
  3. docker compose up -d -- kein Neubau noetig.

Vertrag:

  • Download-Skript: Aufruf python3 <skript> <ADRESSE> <ZIELORDNER> [DOWNLOAD_ARGS...]. Ausgabe: HTML-Datei(en) im Zielordner. Nicht-interaktiv (ein Zeilenumbruch auf stdin), muss von selbst enden.
  • Parser-Skript: Aufruf python3 <skript> <EINGABEORDNER> <AUSGABEORDNER> [PARSER_ARGS...]. Ausgabe: vertretungen.json im Ausgabeordner. Exitcode egal.

Beide eingebauten Skripte brauchen nur die Python-Standardbibliothek.

Problem?

  • "image not found": docker compose pull ausgefuehrt? (docker images pruefen)
  • Keine/leere JSON: Logs ansehen. Stimmt DOWNLOAD_URL? Ist der Server erreichbar?
  • Falsches Datum gefiltert: TZ pruefen (Standard Europe/Berlin).

Image selbst bauen

IMAGE_TAG=0.1.1 sh scripts/build-images.sh

Baut Multi-Arch (amd64+arm64) und pusht nach git.pablo1732.de/schule/vplan-parser. Voraussetzung: einmalig docker login git.pablo1732.de (Token-Scope "package: Lesen und Schreiben").