Die Verarbeitung der Groupon-API – Epilog

Seltene Sonderfälle können Anwendungen zur Datenverarbeitung, die lose gekoppelt sind, beeinträchtigen. Dies gilt insbesondere dann, wenn große Datenmengen über das Internet verarbeitet werden und man wenig oder keinen Einfluss auf die Quelldaten hat. In diesem Artikel beschreiben wir eine Debugging-Technik, mit der Entwickler, die an Projekten zur Datenverarbeitung und -transformation arbeiten, unerwartete Daten in einem Datenstrom von einer externen Quelle schnell identifizieren und berücksichtigen können. Das Problem Letztes Jahr haben wir eine Reihe von Blogbeiträgen veröffentlicht, in denen wir beschrieben haben, wie man.. Die Groupon-API nutzen um eine Teilmenge von Angeboten aus allen Städten, in denen Groupon verfügbar ist, abzurufen und die Liste für die Anzeige in einem Webbrowser oder auf einem mobilen Gerät zu formatieren.

Wir schlossen mit einer Befehlszeile ab, um eine MapForce-Datenzuordnung auszuführen, die die Groupon-API mehr als 150 Mal aufruft – einmal für jede Stadt, in der Groupon Angebote hat. Anschließend werden die Daten gefiltert, um nur Angebote anzuzeigen, die online und nicht in einem physischen Geschäft verkauft werden, und die Ergebnisse werden mit StyleVision in HTML formatiert. Jeden Morgen führen wir diese Befehlszeile in einer Batch-Datei aus, die die HTML-Ausgabe auf einem lokalen Server speichert, sodass unsere Kollegen sie mit jedem Webbrowser überprüfen können, um interessante Angebote aus dem ganzen Land zu finden. Die Zuordnung lief problemlos für mehr als zwei Monate, bis eines Tages ein Fehler auftrat und die folgende Fehlermeldung angezeigt wurde: „Quellwert „“ vom Typ dateTime konnte nicht in den Zieltyp dateTime konvertiert werden.“ Die genaue Ursache ist, dass an einer Stelle in der Zuordnung, an der wir einen Wert vom Typ dateTime erwarteten, ein leerer Wert empfangen wurde. Auf einer abstrakteren Ebene deutet der Fehler auf einen potenziellen Fehler in der Logik unserer Zuordnungsstrategie hin. Jedes Mal, wenn wir die Groupon-API aufrufen, erhalten wir einen wohlgeformten XML-Datenstrom, der in einem -Element eingeschlossen ist. Die API-Spezifikationen enthalten jedoch kein XML-Schema, das die zurückgegebenen Daten definiert. Als wir unsere Zuordnung entwickelten, mussten wir die Rohdaten analysieren und die gewünschten Ausgaben auswählen. Daher war unser erster Schritt, die API aufzurufen, um alle Groupon-Angebote für eine große Metropolregion zu erfassen. Wir gingen davon aus, dass wir eine ausreichend große Datenmenge erhalten würden, um alle möglichen Optionen in der API-Antwort zu berücksichtigen. Nachdem unsere Zuordnung zwei Monate lang erfolgreich lief, lieferte die API schließlich einen seltenen Sonderfall, der nicht dem erwarteten Muster entsprach.

Debugging-Tools MapForce bietet Hilfestellungen zur Fehlersuche. Wir können unsere Datenzuordnung mit der in MapForce integrierten Ausführungsumgebung ausführen, um im Nachrichtenfenster detailliertere Informationen anzuzeigen.

Die Zeilen mit der Bezeichnung "Verwandte Position" enthalten Hyperlinks, die zu den entsprechenden Elementen in der Karte zurückführen, wo der Fehler aufgetreten ist. Durch Klicken auf den Fehlerhinweis gelangt man zu einer Funktion namens "format-dateTime".

Wir können entweder auf die Fehlermeldung klicken oder den Wertverbindungspfeil verfolgen, um das Eingabeelement für die Funktion "format-dateTime" zu identifizieren. In jedem Fall finden wir das Element, das den Fehler verursacht hat.

Das problematische Element befindet sich im Eingabekomponenten, der alle Daten erfasst, die von unseren Anfragen an die Groupon-API zurückgegeben werden, bevor irgendeine Filterung oder Konvertierung stattfindet. Bei der Gestaltung der Zuordnung gab das Element "endAt" in unseren Beispieldaten immer das Enddatum und die Endzeit für jedes Groupon-Angebot an, aber aus irgendeinem Grund haben wir offenbar einen leeren Wert in diesem Feld erhalten. Wenn der Fehler beim Ausführen einer lokalen Eingabedatei aufgetreten wäre, könnten wir einfach den Inhalt der Datei überprüfen, aber in diesem Fall stammen die Daten von mehreren URLs und werden nur vorübergehend gespeichert, bis sie in die Ausgabekomponente übertragen werden. Glücklicherweise können wir einen Trick anwenden, um die Zuordnung einfach zu ändern und alle Daten, die von der Groupon-API empfangen wurden, zu erhalten. Wir kopieren einfach die Eingabekomponente und fügen eine Duplikat davon in die Zuordnung ein. Wir können das Response-Element von der ursprünglichen Komponente mit dem Duplikat verbinden, wodurch gleichzeitig alle Unterelemente zwischen den Komponenten zugeordnet werden.

Unser ursprüngliches Eingabeelement ist nun mit zwei Ausgabeelementen verbunden. Wir können auswählen, welches Ausgabeelement von der in MapForce integrierten Ausführungsumgebung generiert wird, indem wir auf das Augen-Symbol in der oberen rechten Ecke jedes Ausgabeelements klicken. Das neue Ausgabeelement speichert einfach eine Kopie aller Daten aus dem Eingabeelement. Wenn wir die Rohdaten mit XMLSpy untersuchen, stellen wir fest, dass sich anstelle eines erwarteten Datums und einer Uhrzeit ein leeres Element befindet:

Die Lösung

Da wir jetzt wissen, dass ein Angebot möglicherweise kein spezifisches Enddatum hat, können wir diese Möglichkeit bei der Datenverarbeitung berücksichtigen. In der überarbeiteten Behandlung des Elements "endAt" führen wir vor der ursprünglichen Formatierungsfunktion für Datums- und Zeitangaben eine Bedingungsprüfung durch und liefern eine alternative Ausgabe, wenn das Element "endAt" leer ist.

Wir mussten schnell arbeiten, da alle Groupon-Daten zeitkritisch sind. Der spezielle Fall würde schließlich ablaufen und aus dem Datenstrom verschwinden. Diese Erfahrung hat uns gezeigt, wie wichtig es ist, über leistungsstarke Debugging-Tools zu verfügen und diese kreativ einzusetzen, selbst wenn man glaubt, dass ein Datenmapping-Projekt erfolgreich läuft! Altova MapForce ist in einer kostenlosen Testversion verfügbar – der nächste spezielle Fall, den Sie lösen, könnte Ihr eigener sein.

Anmerkung des Herausgebers: Unsere ursprüngliche Serie über die Verarbeitung von Daten aus der Groupon-API wurde in drei Teilen veröffentlicht. Sie können die einzelnen Teile über die folgenden Links einsehen: Teil 1, "Verarbeitung der Groupon-API mit Altova MapForce", beschreibt, wie man dynamische Eingaben erstellt, indem man Daten von mehreren URLs sammelt. Teil Verarbeitung der Groupon-API mit MapForce – Teil 2 beschreibt, wie wir Daten aus der API gefiltert und die Ausgabe definiert haben, um nur die interessantesten Details zu extrahieren. Teil Verarbeitung der Groupon-API – Teil 3 beschreibt, wie die Ausgabe als ein einzelnes HTML-Dokument formatiert wurde, das für Desktop- und mobile Geräte optimiert ist, und gibt einen Überblick über Möglichkeiten zur Automatisierung wiederholter Ausführungen.