Przetwarzanie API Groupon – Zakończenie

Rzadkie, nietypowe sytuacje mogą zakłócić działanie aplikacji do mapowania danych, które nie są ściśle powiązane. Jest to szczególnie ważne, gdy korzystamy z dużych zbiorów danych dostępnych w Internecie i mamy niewielki lub żaden wpływ na dane źródłowe. W tym artykule opisujemy technikę debugowania, która pozwala programistom pracującym nad projektami mapowania i transformacji danych szybko identyfikować i uwzględniać nieoczekiwane dane w strumieniu pochodzącym z zewnętrznego źródła.

Problem Zeszłego lata napisaliśmy serię wpisów na blogu, w których opisaliśmy, jak pracować z API Groupona, aby pobierać podzbiór ofert we wszystkich miastach, w których działa Groupon, i formatować listę do wyświetlenia w przeglądarce internetowej lub na urządzeniu mobilnym.

Podsumowując, używamy wiersza poleceń do uruchomienia procesu mapowania danych w MapForce, który wywołuje API Groupon ponad 150 razy – raz dla każdego miasta, w którym działa Groupon. Następnie dane są filtrowane, aby wyodrębnić oferty dostępne online, a nie w fizycznych punktach sprzedaży, a wyniki są formatowane w formacie HTML za pomocą narzędzia StyleVision. Codziennie rano uruchamiamy ten wiersz poleceń w pliku wsadowym, który zapisuje wynik w formacie HTML na lokalnym serwerze, aby nasi współpracownicy mogli go przeglądać za pomocą dowolnej przeglądarki internetowej i znaleźć interesujące oferty z całego kraju. Proces mapowania działał bez problemów przez ponad dwa miesiące, aż pewnego dnia wystąpił błąd z następującym komunikatem: „Wartość źródłowa „” typu dateTime nie mogła zostać przekonwertowana na typ docelowy dateTime.” Konkretne wyjaśnienie polega na tym, że w pewnym miejscu procesu mapowania, gdzie oczekiwaliśmy wartości typu dateTime, otrzymaliśmy wartość pustą. Na bardziej abstrakcyjnym poziomie, błąd sugeruje potencjalną wadę w logice naszej strategii mapowania. Za każdym razem, gdy wywołujemy API Groupon, otrzymujemy poprawny strumień danych XML, otoczony elementem , ale specyfikacja API nie zawiera schematu XML definiującego dane, które mogą zostać zwrócone. Podczas opracowywania procesu mapowania, musieliśmy przeanalizować surowe dane i wybrać dane wyjściowe, które chcieliśmy, dlatego pierwszym krokiem było wywołanie API w celu zebrania wszystkich ofert Groupon dla jednego dużego obszaru metropolitalnego. Zakładaliśmy, że otrzymamy wystarczająco dużą próbkę danych, aby uwzględnić wszystkie możliwe opcje w odpowiedzi API. Po tym, jak nasz proces mapowania działał pomyślnie przez dwa miesiące, API po raz pierwszy zwróciło rzadki przypadek, który nie pasował do oczekiwanego wzorca. Narzędzia do debugowania MapForce oferuje pomoc w debugowaniu. Możemy uruchomić proces mapowania danych za pomocą wbudowanego silnika wykonawczego MapForce, aby zobaczyć więcej szczegółów w oknie komunikatów.

Wiersze oznaczone jako "Powiązane lokalizacje" zawierają odnośniki prowadzące do elementów na mapie, w których wystąpił błąd. Kliknięcie na komunikat o błędzie przenosi nas do funkcji formatowania daty i czasu.

Możemy albo kliknąć komunikat o "błędzie", albo prześledzić połączenie wartości, aby zidentyfikować element wejściowy funkcji format-dateTime. W każdym przypadku, lokalizujemy element, który spowodował błąd.

Problem leży w komponencie wejściowym, który zbiera wszystkie dane zwracane przez nasze zapytania do API Groupon, zanim zostaną one przefiltrowane lub przekształcone. Podczas projektowania mapowania, element "endAt" w naszych danych testowych zawsze wskazywał datę i godzinę zakończenia dla każdej oferty Groupon, ale z jakiegoś powodu otrzymywaliśmy w tym polu wartość pustą. Gdyby błąd wystąpił podczas przetwarzania lokalnego pliku wejściowego, moglibyśmy po prostu sprawdzić zawartość pliku, ale w tym przypadku dane pochodziły z wielu adresów URL i są przechowywane tylko tymczasowo, aż zostaną przekształcone i przekazane do komponentu wyjściowego. Na szczęście, możemy zastosować prosty sposób, aby łatwo zmodyfikować mapowanie i zachować wszystkie dane otrzymane z API Groupon. Po prostu kopiujemy komponent wejściowy i wklejamy jego kopię do mapowania. Możemy połączyć element "response" z oryginalnego komponentu z jego kopią, co jednocześnie mapuje wszystkie elementy potomne między tymi komponentami.

Nasz oryginalny komponent wejściowy jest teraz połączony z dwoma komponentami wyjściowymi. Możemy wybrać, który z komponentów wyjściowych zostanie wygenerowany przez wbudowany silnik wykonawczy MapForce, klikając ikonę oka w prawym górnym rogu każdego komponentu wyjściowego. Nowy komponent wyjściowy po prostu zapisuje kopię wszystkich danych z komponentu wejściowego. Kiedy analizujemy surowe dane za pomocą XMLSpy, rzeczywiście znajdujemy pusty element w miejscu, gdzie spodziewaliśmy się daty i godziny:

Rozwiązanie

Teraz, gdy wiemy, że oferta może nie mieć określonego terminu zakończenia, możemy uwzględnić tę możliwość w procesie mapowania. W zmodyfikowanym sposobie obsługi elementu "endAt", przed zastosowaniem oryginalnej funkcji formatowania daty i czasu, przeprowadzamy test warunkowy i dostarczamy alternatywny wynik, gdy element "endAt" jest pusty.

Musieliśmy działać szybko, ponieważ wszystkie dane Groupon są aktualizowane w czasie rzeczywistym. Ten konkretny przypadek w końcu by się zakończył i zniknął z przepływu danych. To doświadczenie pokazało nam, jak ważne jest posiadanie wydajnych narzędzi do debugowania i wykorzystywanie ich w kreatywny sposób, nawet wtedy, gdy wydaje się, że projekt mapowania danych działa pomyślnie! Altova MapForce to Dostępne w wersji próbnej – rozwiązanie kolejnego nietypowego problemu może okazać się kluczowe dla rozwiązania problemu, z którym sami się zmierzymy.

Uwaga redakcji: Nasza oryginalna seria artykułów na temat mapowania danych z API Groupon składała się z trzech części, do których można sięgnąć, klikając poniższe linki: Część 1, zatytułowana "Przetwarzanie API Groupon za pomocą Altova MapForce", opisuje, jak tworzyć dynamiczne źródła danych, pobierając informacje z wielu adresów URL. Przetwarzanie API Groupon za pomocą MapForce – Część 2 wyjaśnia, jak filtrowaliśmy dane z API i definiowaliśmy wynik, aby wydobyć tylko najbardziej interesujące szczegóły. Przetwarzanie API Groupon – Część 3 opisuje formatowanie wyniku jako pojedynczego dokumentu HTML, zoptymalizowanego dla urządzeń stacjonarnych i mobilnych, oraz omawia sposoby automatyzacji powtarzalnego wykonywania.