SIGFOOD API
Die sigfood-API orientierte sich grob an der XML-Api von
NamNam (existiert nicht mehr).
Da jedoch sigfood wesentlich mehr Informationen liefert,
war 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ü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.