SIGFOOD API

Die sigfood-API orientiert sich grob an der XML-Api von NamNam. Da jedoch sigfood wesentlich mehr Informationen liefert, ist das nur sehr bedingt moeglich.

Abruf

Die derzeit einzige implementierte API-Funktion ist die Ausgabe des Speiseplans eines Tages. Diese wird abgerufen ueber die URL:
https://www.sigfood.de/?do=api.gettagesplan&datum=YYYY-MM-DD
Der datums-Parameter ist optional und im Format Jahr(4stellig)-Monat(2stellig)-Tag(2stellig) also z.B. 2011-11-11 anzugeben. Wird kein datum angegeben, so wird der Speiseplan des aktuellen bzw. naechsten Mensatages ausgegeben.
Statt https kann auch http verwendet werden.

Ausgabe

Als Ausgabe liefert der Server ein "XML-artiges" Dokument mit dem Content-type text/xml.
Im Falle schwerer Fehler kann stattdessen einfacher Text der Form
API ERROR: Erklaerender Text
geliefert werden. Natuerlich sind auch leere Dokumente oder die ueblichen HTTP Server Errors denkbar und sollten behandelt werden.

Dokumentenstruktur

<Mensa>

Bsp.: <Mensa name="Studentenwerk-Erlangen-Nuernberg-Mensa-Erlangen-Sued">
Dies ist der aeusserste Tag und gibt den Namen der Mensa an auf den sich der folgende Speiseplan bezieht. Da sigfood nur eine Mensa kennt, ist dieser Teil effektiv eine Konstante.

<firstDate> und <lastDate>

Bsp.: <firstDate>2011-11-23</firstDate>
Unterhalb von <Mensa>. Auch dieser Teil stammt aus der NamNam-API und ist hier eigentlich unnuetz: Anders als NamNam geben wir immer nur den Speiseplan eines Tages aus, firstDate und lastDate enthalten daher immer das gleiche Datum, das dem angeforderten entspricht.

<Tagesmenue>

Das Tagesmenue-Tag liegt unterhalb von <Mensa> und taucht auf sigfood immer genau einmal auf, da immer genau ein Tag ausgegeben wird.

<tag>

Bsp.: <tag>2011-11-23</tag>
Unterhalb von <Tagesmenue> oder von <bild>. Gibt den Tag an fuer den dieser Speiseplan ist, bzw. den Tag an dem das Gericht fotografiert wurde.

<vorherigertag> und <naechstertag>

Bsp.: <vorherigertag>2011-11-23</vorherigertag>
Unterhalb von <Tagesmenue>. Liefert - falls vorhanden - den vorherigen bzw. naechsten Tag ausgehend vom angeforderten Datum, fuer den der Server einen Speiseplan in der Datenbank hat.

<Mensaessen>

Bsp.: <Mensaessen moslem="false" rind="false" vegetarisch="true">
Unterhalb von <Tagesmenue>. Leitet eine neue Essensausgabe-Linie ein, wiederholt sich folglich meist mehrfach. Wenn fuer einen Tag kein Speiseplan vorhanden ist, so werden einfach keinerlei <Mensaessen>-Tags ausgegeben. Die attribute beziehen sich auf das jeweilige Hauptgericht, und sind selbsterklaerend, bis auf das Attribut "moslem", das dem "kein Schweinefleisch" in Mensajargon entspricht (auch diese Bezeichnung ist aus der NamNam-API uebernommen, also bitte flamet die, nicht mich).

<linie>

Bsp.: <linie>1</linie>
Unterhalb von <Mensaessen>. Gibt die Bezeichnung der Linie an.

<hauptgericht>

Bsp.: <hauptgericht id="23">
Unterhalb von <Mensaessen>. Leitet die Beschreibung des Hauptgerichts der Linie ein. Existiert pro Linie genau einmal. Die ID ist die eindeutige ID des Gerichts in der Datenbank.

<beilage>

Bsp.: <beilage id="42">
Unterhalb von <Mensaessen>. Leitet die Beschreibung einer Beilage der Linie ein. Mehrere Beilagen auf einer Linie sind moeglich, ebenso gibt es Hauptgerichte ohne Beilage. Das Tag kann also zwischen 0 und 100 mal auf einer Linie vorkommen. Die ID ist die eindeutige ID des Gerichts in der Datenbank.

<bezeichnung>

Bsp.: <bezeichnung><![CDATA[2 Schweinsbratw&uuml;rste im Knuspermantel mit Paprikadip]]></bezeichnung>
Unterhalb von <hauptgericht> oder <beilage>. Bezeichnung des Hauptgerichts bzw. der Beilage.

<bewertung>

Bsp.: <bewertung> <anzahl>23</anzahl> <schnitt>4.2</schnitt> <stddev>1.34</stddev> </bewertung>
Unterhalb von <hauptgericht>, oder <beilage>. Hat typischerweise das Untertag <anzahl>, das die Anzahl der bisher abgegebenen Bewertungen angibt. Falls die Anzahl groesser als 0 ist, existieren normalerweisse auch noch die Untertags <schnitt> und <stddev>, welche den bisherigen Durchschnitt der Bewertungen (Wertebereich 0.0 bis 5.0) und die Standardabweichung der Bewertungen angeben.

<bild>

Bsp.: <bild id="42">
Unterhalb von <hauptgericht> (nicht unterhalb von <beilage>!). Beginnt die Beschreibung eines Bildes das das Hauptgericht zeigt. Dieses Tag taucht nur auf wenn der Server ueberhaupt ein Bild hat, Platzhalterbilder werden darueber also nicht geliefert. Wenn mehr als (derzeit) 10 Bilder vorhanden sind, werden nur die neuesten geliefert. Die ID ist wiederum eine eindeutige ID fuer das Bild. Das Bild selbst kann ueber die URL https://www.sigfood.de/?do=getimage&bildid=ID&width=BreiteInPixel
vom Server abgerufen werden (auch per http statt https).

<kommentar>

Bsp.: <kommentar>
Unterhalb von <hauptgericht>, oder <beilage>. Leitet die Beschreibung eines Kommentars ein.

<mitbeilage>

Bsp.: <mitbeilage id="10"> <bezeichnung>Reis</bezeichnung> </mitbeilage>
Unterhalb von <Bild>. Falls das Bild ein Gericht mit Beilage zeigt, gibt dieses Tag an welche. Die Bezeichnung der Beilage wird aus Gruenden der Einfachheit in einem entsprechenden Untertag mitgeliefert, die eigentlich relevante Information ist jedoch die ID der Beilage.

<timestamp>

Bsp.: <timestamp>1234567890</timestamp>
Unterhalb von <kommentar> oder <Bild>. Unix-Timestamp, gibt an wann der Kommentar gepostet bzw. das Bild hochgeladen wurde.

<formattedtime>

Bsp.: <formattedtime>2011-11-23 11:42</formattedtime>
Genau wie <timestamp>, aber schon vom Server in ein menschenlesbares Format konvertiert.

<text>

Bsp.: <text><![CDATA[Dieser Kartoffelsalat verstoesst mit Sicherheit gegen die Genfer Konventionen.]]></text>
Unterhalb von <kommentar>. Gibt den Text des Kommentars wieder.

<preisstud>, <preisbed> und <preisgast>

Bsp.: <preisstud>240</preisstud>
Unterhalb von <hauptgericht>, oder <beilage>. Gibt den Preis fuer Studenten bzw. fuer Bedienstete bzw. fuer Gäste (d.h. Externe) laut Speiseplan an. Der Preis fuer Beilagen wird erst seit 01.07.2013 und nur sehr selten erfasst - der Hauptgrund ist, dass die Beilagenpreise nicht im gedruckten bzw. Online-Speiseplan stehen, und selbst in der Mensa oft nirgends angeschrieben sind. Üblicherweise gibt es also nur einen Preis beim Hauptgericht, auch wenn die Beilagen meist nicht im Hauptgerichtspreis enthalten sind.
Der Preis für Gäste wurde erst irgendwann 2012 (?) eingeführt und wird erst seit 01.07.2013 auf sigfood erfasst - er kann auch bei Gerichten nach diesem Datum fehlen wenn er nicht bekannt ist.
Aus Kompatibilitätsgründen ist der Hauptgerichtspreis zusätzlich auch eine Ebene höher, also unterhalb der Linie, vorhanden - dieser sollte in neuem Code aber nicht verwendet werden.

<ausgegangen> und <gabsgarnicht>

Bsp.: <ausgegangen />
Unterhalb von <hauptgericht> oder <beilage>. <ausgegangen /> zeigt an, dass das Gericht aktuell bzw. (in der Vergangenheit) deutlich vor Ende der Oeffnungszeiten ausgegangen ist. <gabsgarnicht /> markiert, dass das Essen nur in der Fantasie des Speiseplanschreibers existiert, und an dem Tag wo es im Speiseplan stand ueberhaupt nicht ausgegeben wurde.