---
title: "Przetwarzanie API Groupon – Zakończenie"
date: "2011-11-28"
categories: 
  - "applications"
tags: 
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "stylevision"
  - "xmlspy"
description: W tym artykule omówiono techniki debugowania aplikacji do mapowania danych, wykorzystujących API firmy Groupon, ze szczególnym uwzględnieniem obsługi nieoczekiwanych przypadków danych oraz poprawy integracji danych.
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce #stylevision #xmlspy

Categories: [data-integration](/blog/pl/category/data-integration.md)
# 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](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html), 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. 

[![Wyjście MapForce generowane przez API Groupn, wyświetlane na urządzeniu mobilnym](https://lh4.ggpht.com/-QZjPbYC7-LA/Tspu1d6EDiI/AAAAAAAAAj4/yCjai-3pxpU/clip_image001_thumb.png?imgmax=800 "MapForce output from the Groupn API")](http://lh4.ggpht.com/-Q5Fuliv98jw/Tspu06W2rTI/AAAAAAAAAjw/Y1zVMdAW1JQ/s1600-h/clip_image001%25255B3%25255D.png)

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 <response>, 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. 

[![Okno "Wiadomości MapForce" wyświetla błędy mapowania danych](https://lh6.ggpht.com/-b1cUWq4TO6s/Tspu1zjU9tI/AAAAAAAAAkI/F1fqK3mu1H4/clip_image002_thumb.png?imgmax=800 "MapForce Messages window")](http://lh4.ggpht.com/-aaLuFh8g-5o/Tspu1iP_n7I/AAAAAAAAAkA/SZcyqjCaUiw/s1600-h/clip_image002%25255B3%25255D.png) 

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. 

[![Funkcja format-dateTime w programie MapForce](https://lh6.ggpht.com/-K3r_SwpjT_o/Tspu2o6VB_I/AAAAAAAAAkY/sPBjmx1X1Mk/clip_image003_thumb.png?imgmax=800 "MapForce format-dateTime function")](http://lh5.ggpht.com/-tGo-OsyDmA8/Tspu2IqSEII/AAAAAAAAAkQ/rWCM52S3hWY/s1600-h/clip_image003%25255B3%25255D.png) 

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. 

[![Obrazek](https://lh3.ggpht.com/-YHrc-ebzcN8/Tspu3HEowtI/AAAAAAAAAko/RRHKpl_y2QE/clip_image004_thumb.png?imgmax=800 "clip_image004")](http://lh5.ggpht.com/-ABexBoUezwE/Tspu2_oTjOI/AAAAAAAAAkg/3Boath9vSdg/s1600-h/clip_image004%25255B3%25255D.png) 

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. 

[![Obrazek](https://lh6.ggpht.com/-zirg0u2c5-s/Tspu32QIMOI/AAAAAAAAAk4/qEknuzEA-yY/clip_image005_thumb.png?imgmax=800 "clip_image005")](http://lh5.ggpht.com/-5mRDG72tuHY/Tspu3StJOhI/AAAAAAAAAkw/Z1EnXl8bWgY/s1600-h/clip_image005%25255B3%25255D.png) 

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: 

[![Obrazek](https://lh6.ggpht.com/-VkHxtsBRdIk/Tspu4haNB5I/AAAAAAAAAlI/G70KMzzM4io/clip_image006_thumb.png?imgmax=800 "clip_image006")](http://lh4.ggpht.com/-xYA8oU0hbYw/Tspu4KpB3oI/AAAAAAAAAlA/zE-fh7-uvGE/s1600-h/clip_image006%25255B3%25255D.png) 

## 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. 

[![Obrazek](https://lh3.ggpht.com/-0Uh2-8whtOQ/Tspu5Lxkh5I/AAAAAAAAAlY/n78OuQLIJ-s/clip_image007_thumb.png?imgmax=800 "clip_image007")](http://lh6.ggpht.com/-4lj33Go9j2A/Tspu41hgGTI/AAAAAAAAAlQ/3yT89qXGqRc/s1600-h/clip_image007%25255B3%25255D.png)

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](https://www.altova.com/pl/download-trial/) – 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](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html)", opisuje, jak tworzyć dynamiczne źródła danych, pobierając informacje z wielu adresów URL. [Przetwarzanie API Groupon za pomocą MapForce – Część 2](https://www.altova.com/blog/2011/08/processing-groupon-api-with-mapforce.html) 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](https://www.altova.com/blog/2011/08/processing-groupon-api-part-3.html) opisuje formatowanie wyniku jako pojedynczego dokumentu HTML, zoptymalizowanego dla urządzeń stacjonarnych i mobilnych, oraz omawia sposoby automatyzacji powtarzalnego wykonywania.
