204 heisst nur: Die Datei ist angekommen. Importiert wird sie danach im Hintergrund, und Fehler dabei meldet dir die API nicht mehr. Kontrolliere deshalb nach dem Upload die Rangliste auf der öffentlichen Seite.
Datei richtig senden
Schicke das XML als rohen Body, nicht als Formular-Upload. Mit GZip sieht das so aus:
gzip -c resultlist.xml | curl -i -X POST --data-binary @- \ -H "Authorization: Bearer DEIN_TOKEN" \ https://ol-events.ch/api/iof/v1/races/42/resultlist
Die Kodierung liest die API als Text aus der XML-Deklaration. Sie akzeptiert genau encoding="UTF-8", encoding="utf-8" und encoding="windows-1252". Abgelehnt werden unter anderem:
-
encoding="Windows-1252"mit grossem W encoding="ISO-8859-1"- Einfache Anführungszeichen wie
encoding='UTF-8', die manche XML-Bibliotheken schreiben - Eine Deklaration ohne
encoding
Was die API sofort antwortet
| Antwort | Bedeutung | Was du tust |
|---|---|---|
204 |
Empfangen. Der Inhalt ist noch nicht geprüft. | Rangliste kontrollieren |
403 |
Token fehlt, ist falsch oder gehört zu einem anderen Lauf. | Token und Id des Laufs prüfen |
404 |
Diesen Lauf gibt es nicht. | Id des Laufs prüfen |
422 mit unknown encoding
|
Kodierung fehlt oder ist nicht zugelassen. | XML-Deklaration anpassen |
422 mit invalid gzip payload
|
Das GZip ist beschädigt. | Neu komprimieren und senden |
429 |
Mehr als 300 Anfragen pro Minute. | Seltener senden |
Was im Hintergrund schiefgehen kann
-
Ungültiges XML oder Liste ohne
ClassResult: Es wird nichts importiert. -
Unbekannter Status: Der Import stoppt bei dieser Person. Alles davor ist drin, die weiteren Personen und Kategorien fehlen. Es wird nichts zurückgerollt. Erlaubt sind die Werte der IOF-Norm in genauer Schreibweise, also
OKund nichtok. - Falsch geschriebene Kategorie: Sie wird als neue Kategorie angelegt und erscheint öffentlich.
Es gibt keine Wiederholung und keine Meldung an dich. Korrigiere die Datei und sende sie noch einmal. Dieselbe Datei erneut zu senden ändert nichts Vorhandenes. Findest du den Grund nicht, melde dich mit Lauf und Uhrzeit beim Support.
Was ein Upload überschreibt
Für jede Person in der Datei schreibt der Import alle Felder neu. Fehlt ein Feld, wird es geleert.
- Startliste nach den Resultaten: Eine Startliste enthält weder Zeit noch Rang noch Status. Lädst du sie nach den Resultaten hoch, sind diese Werte bei allen Personen in der Datei weg. Lade die Startliste deshalb nur vor dem ersten Resultat hoch.
- Resultatliste ohne Startnummer oder Startzeit: Die Werte aus der Startliste werden geleert. Schicke sie in jeder Datei mit.
-
Startliste ohne
StartTime: Als Startzeit gilt der Zeitpunkt des Imports. -
Person fehlt in der Datei: Ihre Zeile bleibt unverändert. Ein Upload löscht nie eine Person. Wer nicht startet, bekommt einen Status, zum Beispiel
DidNotStart. - Korrigierte Zwischenzeit: Die alte Zwischenzeit bleibt neben der neuen stehen. Sauber wird es nur mit alle Resultate löschen und neuem Upload.
-
Coursein der Datei: Es überschreibt die Bahn der Kategorie. FehlenLength,ClimboderNumberOfControls, stehen sie danach auf 0. SchickeCoursevollständig oder gar nicht. -
Vakante Plätze: Ein
PersonStartmit dem Nachnamenvakantwird übersprungen.
Import prüfen
Öffne deinen Lauf. Sobald Zeilen da sind, erscheint der Knopf Startliste, am Lauftag Live-Resultate, danach Resultate. Dahinter steht pro Kategorie die Anzahl im Ziel und das Total, zum Beispiel H20 (12/34). Vergleiche diese Zahlen mit deiner Software.
Die API eignet sich nur begrenzt zum Prüfen:
-
GET startlistzeigt die Anmeldungen auf ol-events.ch, nicht deinen Upload. -
GET resultlistliefert keine Zwischenzeiten und Team-Mitglieder als einzelne Personen. Die Ränge sind neu nach Zeit berechnet, gleiche Zeiten ergeben also nicht denselben Rang. -
GET resultlistantwortet mit500, sobald eine Zeile keinen Status oder kein Geschlecht hat. Das trifft zum Beispiel jede Zeile, die nur aus der Startliste stammt.
Kommentare
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.