- Python 100%
| .gitignore | ||
| com.mensaplan.plist | ||
| download.zip | ||
| explore_data.py | ||
| explore_data_copy.py | ||
| intercept_app_traffic.md | ||
| mensa_dashboard.py | ||
| mensaplan.py | ||
| mensaplan_daily.py | ||
| plot_error.png | ||
| README.md | ||
| requirements.txt | ||
Mensaplan
Es gibt verschiedene APIs, um den Mensaplan einzusehen.
- Webseite des Studierendenwerks: Wird auf https://www.studierendenwerk-goettingen.de/campusgastronomie/mensen/speiseplaene-der-mensen angezeigt
- Widget auf der eCampus Startseite
- Mensaplan App
Alle Quellen enthalten
- Datum
- Mensaname
- Name des Menüs (Tasty, Basic etc.)
- Essenstitel
- Essensuntertitel
- Allergene
- Text oder Icons für Vegan, Vegetarisch etc.
| Quelle | Webseite des Studierendenwerks | eCampus Widget | Mensaplan App | Studierendenwerk API |
|---|---|---|---|---|
| Link | https://www.studierendenwerk-goettingen.de/fileadmin/templates/php/mensaspeiseplan/cached/de/$datum/alle.html | https://addons.ecampus2.uni-goettingen.de/addon-portlet-mensaplan/ajaxresponse/getgerichte?mensa=$mensa&tag=$tag&preis=$preis | https://app.studentenwerk-goettingen.de/api/mensaplanAll?datum=$datum&token=a | https://api.studierendenwerk-goettingen.de/speiseplan/website/$datum?format=json |
| Parameter | $datum: Datum im YYYY-MM-DD Format |
$mensa: Zentralmensa, Mensa+am+Turm, CGiN oder Bistro+HAWK $tag: heute, morgen oder uebermorgen $preis: stu, mit oder gas |
$datum: Datum im YYYY-MM-DD Format |
$datum: Datum im DD.MM.YYYY Format |
| Tage in Vergangenheit | 0 | 0 | 28.05.2020 | |
| Tage in Zukunft | 6 | 2 | 02.10.2026 | |
| Zeigt Preis an | ❌ | ✅ | ✅ | |
| Auch auf Englisch | ✅ | ❌ | ✅ | |
| ID, Rezeptname, Rating | ❌ | ❌ | ✅ |
Weitere API Endpoints der App
- Öffnungszeiten: https://app.studentenwerk-goettingen.de/api/oeffnungszeiten
- Auslastung: https://app.studentenwerk-goettingen.de/api/frequenz
- News: https://app.studentenwerk-goettingen.de/api/messages
- News-Kategorien: https://app.studentenwerk-goettingen.de/api/topics
- Asta informiert (leider leer): https://app.studentenwerk-goettingen.de/api/asta/files
- Datenschutzerklärung: https://app.studentenwerk-goettingen.de/api/datenschutz
- Registrierung: https://app.studentenwerk-goettingen.de/api/register?os=Android&app_secret=sdff23
- Gibt einen Token zurück, der dann bei Anfragen als
token-Parameter gesetzt werden kann. Nur dermensaplanEndpoint verlangt, dass ein Token da ist, prüft ihn aber nicht, also kann ein beliebiger String übergeben werden
- Gibt einen Token zurück, der dann bei Anfragen als
Außerdem schickt die App beim Starten eine Request an
http://vm18004.virt.gwdg.de/api/push
Die gibt aber nur einen 404 zurück.
Auslastung
Allgemeine Informationen zur Auslastung, die man auch direkt in der App sieht, gibt es über den oben genannten Link. Für die Plots wird dieser Endpoint benutzt:
Parameter:
new: Keine Funktion, kann weggelassen werdenortwert: ID der Mensa, kann über denfrequenzendpoint gefunden werden.- Zentralmensa: 4014
- Mensa am Turm: 4155
- CGiN: 4209
- Bistro HAWK: 4272
linienwert: Quelle für die Vergleichswerte (die rote Linie)- 1-365: Vergleich mit Auslastung vor 1-365 Tagen
- -1: Vergleich mit Durchschnitt selber Wochentag
- -2: Vergleich mit Durchschnitt letztes Jahr
Leider wird der Plot serverseitig generiert und es wird nur ein Bild zurückgeliefert und keine Daten.
Ungültige Parameterwerte führen zu einem coolen Fehlerbild:
Mensa Dashboard
Im Mensa Dashboard sieht man die eigenen Transaktionen der letzten 20 Tage. Beim Klicken auf eine Transaktion werden Details über
https://mensa.studierendenwerk-goettingen.de/sales/$katrans_id/$datum/position
abgerufen. Dabei ist
$katrans_id: Transaktions ID- Transaktions-IDs werden pro Kasse hochgezählt
- Kann an einem Tag bei zwei unterschiedlichen Kassen die gleiche Transaktions ID erhalten werden
- Wie werden die verschiedenen Kassen in der API unterschieden, wenn man die Kassen-ID nicht in der URL angibt? Ist es möglich, bei zwei verschiedenen Kassen am gleichen Tag mit der gleichen Transaktions-ID zu bezahlen, und werden die dann in der gleichen API response angezeigt?
$datum: Datum imYYYY-MM-DDFormat
Nur Transaktionen der aktuell angemeldeten Person werden zurückgegeben, man kann also keine Transaktionen von anderen Personen sehen.
Zur Authentifizierung wird bei Anfragen an mensa.studierendenwerk-goettingen.de im response header über Set-Cookie der Cookie studierendenwerk_goettingen_session gesendet. Dieser ist 2 Stunden ab der letzten Anfrage gültig. Sendet man also alle 2 Stunden eine Anfrage, kann immer mit dem gleichen Cookie gearbeitet werden.
Folgenden Felder werden zurückgegeben:
kasse_idkassenamedatummenge: 1 beim Kaufen oder Aufwerten, -1 bei Stornierungenname: Name des Menüsepreis: Preis für Gästerabatt: Studirabattkatrans_idortnameartikelname: Name des Essens
Folgende Kassen sind bekannt:
| ID | Name | Ortname |
|---|---|---|
| 4071 | Kasse 1 Freeflow | Zentralmensa Küche |
| 4074 | Kasse 4 Freeflow | Zentralmensa Küche |
| 4151 | Mensa am Turm 1 | Mensa am Turm |
| 4152 | Mensa am Turm 2 | Mensa am Turm |
| 4158 | Aufwerter EC MaT Concardi | Mensa am Turm |
| 4199 | GCIN Autom.Kaffee(Spezial | CGIN Daily |
| 4200 | CGiN Basic Ks 1 | CGiN Küche |
| 4201 | CGiN Basic Ks 2 | CGiN Küche |
| 4202 | CGiN Tasty Ks 3 | CGiN Küche |
| 4203 | CGin Tasty Ks 4 | CGiN Küche |
| 4204 | CGiN Green vegan Ks 5 | CGiN Küche |
| 4205 | CGiN Green vegetar. Ks 6 | CGiN Küche |
| 4206 | Aufwerter CGIN Nexi | CGiN Küche |
| 4207 | Aufwerter CGIN Nexi | CGiN Küche |
| 4211 | CGiN Daily Ks 11 | CGIN Daily |
| 4212 | CGiN Pizza Ks 12 | CGIN Daily |
| 4215 | Aufwerter EC CGiN | CGiN Küche |
| 4217 | CGiN Green One Pott Ks 8 | CGiN Küche |
| 4218 | CGiN Teppan Yaki Ks 9 | CGiN Küche |
| 4219 | CGiN Tepp.Yaki vegan Ks10 | CGiN Küche |
- Wie lange werden Transaktionen gespeichert? Ein Link vom 19.06.2026 funktioniert immer noch.
