---
title: "Przetwarzanie API Groupon za pomocą MapForce – Część 2"
date: "2011-08-16"
categories: 
  - "data-integration"
tags: 
  - "altova-xmlspy"
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "missionkit"
  - "xml-editor"
  - "xml-schema"
  - "xmlspy"
description: Odkryj, jak efektywnie wykorzystać API Groupon za pomocą programu Altova MapForce, w tym metody dynamicznego mapowania danych, wykonywania zapytań oraz filtrowania wyników.
---
Status: #blog

Tags:  #altova-xmlspy #data-integration #data-mapping #mapforce #missionkit #xml-editor #xml-schema #xmlspy

Categories: [data-integration](/blog/pl/category/data-integration.md)
# Przetwarzanie API Groupon za pomocą MapForce – Część 2

W [części 1 tej serii](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html) opisaliśmy, jak połączyć [Altova MapForce](https://www.altova.com/pl/mapforce.html) z API firmy Groupon. Zapytaliśmy API o listę podziałów firmy Groupon, a następnie wykorzystaliśmy tę listę do tworzenia zapytań API dla wszystkich aktualnych ofert z każdego podziału. W tej części wykonamy zapytania do endpointu "/deals" i przefiltrujemy wyniki, aby uzyskać najbardziej interesujące dane. Lista zapytań do endpointu "/deals", którą utworzyliśmy wcześniej, wygląda następująco: 

[![Lista zapytań dotyczących ofert Groupona, wygenerowana przez program Altova MapForce](https://lh3.ggpht.com/-DuCz6NmnbUQ/Tkkced-kKNI/AAAAAAAAAdc/6GOLTV7epMk/clip_image001_thumb.png?imgmax=800 "List of Groupon /deals queries generated by Altova MapForce")](http://lh3.ggpht.com/-2Z-nwIU-LKI/TkkceMyFDeI/AAAAAAAAAdY/kDFXB-IdDhw/s1600-h/clip_image0013.png) 

Aby przetworzyć wszystkie zapytania, możemy połączyć listę jako dynamiczny plik wejściowy do nowego komponentu mapowania. Ostatnio, gdy potrzebowaliśmy nowego komponentu, umieściliśmy zapytanie API / podziały w komponencie mapowania i pozwoliliśmy MapForce automatycznie utworzyć schemat XML. Możemy zrobić to samo tutaj, umieszczając zapytanie API / oferty jako plik XML. Istnieje jednak jeden drobny problem – chociaż dokumentacja API Groupon online jasno opisuje zapytania, które możemy wysłać, jest niejasna co do informacji, które zostaną zwrócone. Zanim wyślemy dziesiątki zapytań do API w celu uzyskania danych o wszystkich aktualnych ofertach, prawdopodobnie chcielibyśmy dowiedzieć się więcej o danych, które zostaną zwrócone. 

**Propozycja, której nie można odrzucić** 

Jak powiedział Yogi Berra, można wiele się dowiedzieć, po prostu obserwując. Zacznijmy od wykonania zapytania /deals w programie [XMLSpy](https://www.altova.com/pl/xmlspy.html). Dzięki temu będziemy mogli przeanalizować odpowiedź na zapytanie dla jednego działu, zanim pobierzemy potencjalnie dużą ilość danych. Menu Plik / Otwórz w programie XMLSpy zawiera tę samą opcję "Przełącz na adres URL", której używaliśmy wcześniej w programie MapForce. Jeśli wprowadzimy zapytanie API /deals dla działu obejmującego duży obszar metropolitalny – powiedzmy Dallas – prawdopodobnie otrzymamy wystarczającą liczbę rekordów, aby określić charakterystykę całego zbioru danych. XMLSpy otwiera odpowiedź na zapytanie API /deals w trybie tekstowym, tak jakbyśmy otwierali lokalny plik: 

[![Przykład odpowiedzi na zapytanie dotyczące ofert Groupon, wyświetlony w programie XMLSpy](https://lh5.ggpht.com/-yuh3IG08N-M/TkkceylAHBI/AAAAAAAAAdk/v85ydqJD_IY/clip_image002_thumb.png?imgmax=800 "Response to a Groupon /deals query, shown in XMLSpy")](http://lh6.ggpht.com/-Eb1X5J799Yo/Tkkce1ixmfI/AAAAAAAAAdg/8gDhEldnKco/s1600-h/clip_image0023.png) 

Jak przewidywaliśmy, otrzymaliśmy dużą ilość danych, gdy poprosiliśmy o wszystkie transakcje dla jednego działu! Szybkim sposobem na analizę struktury tych danych jest użycie opcji menu XMLSpy DTD/Schema do wygenerowania pliku .xsd na podstawie danych XML. Poniżej przedstawiono skrócony widok całego wygenerowanego pliku .xsd, oparty na odpowiedzi na zapytanie /deals dla Dallas: 

[![Plik XSD wygenerowany przez program XMLSpy na podstawie zapytania do serwisu Groupon](https://lh5.ggpht.com/-kphWHOIh5FY/Tkkcfq0x1rI/AAAAAAAAAds/wP2tm-rh3sU/clip_image004_thumb.jpg?imgmax=800 "An XML Schema generated by XMLSpy from the Groupon query")](http://lh5.ggpht.com/-nFAolywZOlU/TkkcfVfixfI/AAAAAAAAAdo/ixbMzb4FjMM/s1600-h/clip_image0043.jpg) 

Możemy zagłębić się jeszcze bardziej, kierując się radą Yogiego, jakbyśmy przeżywali to wszystko po raz kolejny. Dokładne przeanalizowanie wszystkich elementów schematu XML ujawnia pewne ciekawe nieprawidłowości. Na przykład, istnieją dwa elementy o nazwie "redemptionLocation" z różnymi definicjami. Pierwszy z nich zawiera sekwencję elementów potomnych: 

[![Pierwsze użycie elementu "remdemptionLocation"](https://lh3.ggpht.com/-3_iJQ8vMJv4/TkkcgPTVebI/AAAAAAAAAd0/H5Y0Y4UhYag/clip_image005_thumb.png?imgmax=800 "First use of the remdemptionLocation element")](http://lh5.ggpht.com/-Ds65S--pYGo/Tkkcf6t47qI/AAAAAAAAAdw/ctfBMJDvkSI/s1600-h/clip_image0053.png) 

A drugim jest prosty ciąg znaków: 

[![Drugie użycie elementu "remdemptionLocation"](https://lh5.ggpht.com/-0f6ygtVStac/TkkcgsChc0I/AAAAAAAAAd8/kP4MfwN-nbo/clip_image006_thumb.png?imgmax=800 "Second use of the remdemptionLocation element")](http://lh6.ggpht.com/-TnjeC_B-xwo/TkkcgaD3N4I/AAAAAAAAAd4/QPsqdCH3_G8/s1600-h/clip_image0063.png) 

Po ponownym przeanalizowaniu danych XML dotyczących Dallas i wyszukaniu informacji o lokalizacji punktu wymiany, wyświetlane są następujące przykłady: 

[![Przykład odkupienia. Położenie w obrębie odpowiedzi](https://lh3.ggpht.com/-_jeVWegS2_E/TkkchCwxMBI/AAAAAAAAAeE/-WTenar_XWk/clip_image007_thumb.png?imgmax=800 "One example of redemptionLocation in the body of the response")](http://lh6.ggpht.com/-u8aUGljt0ak/Tkkcgyld0pI/AAAAAAAAAeA/BZPUZ9pzTvM/s1600-h/clip_image0073.png) 

A: 

[![Przykład odkupienia. Położenie w obrębie odpowiedzi](https://lh4.ggpht.com/-NmUZPlUkkZI/TkkchXZRqgI/AAAAAAAAAeM/PCRMkYPZYgE/clip_image008_thumb.png?imgmax=800 "One example of redemptionLocation in the body of the response")](http://lh6.ggpht.com/-0qhiOg-24LI/TkkchKG4nOI/AAAAAAAAAeI/LP_XSf5LwCM/s1600-h/clip_image0083.png) 

A:

[![Przykład odkupienia. Położenie w obrębie odpowiedzi](https://lh3.ggpht.com/-NwOgfSsxWmo/Tkkch7Nu2_I/AAAAAAAAAeU/DxwKHSBh6i8/clip_image009_thumb.png?imgmax=800 "One example of redemptionLocation in the body of the response")](http://lh4.ggpht.com/-ZPjMwCObxk0/TkkchpHYZiI/AAAAAAAAAeQ/wlLAu6yhnyY/s1600-h/clip_image0093.png) 

To jest naprawdę interesujące, ponieważ parametr `redemptionLocation = "online"` identyfikuje oferty, które można zrealizować z dowolnego miejsca, a nie tylko poprzez wizytę w fizycznym punkcie sprzedaży w regionie, w którym są reklamowane. Co by się stało, gdybyśmy wykonali zapytania do API `/deals` dla wszystkich regionów i wygenerowali listę wszystkich ofert dostępnych online? To byłaby ekstremalna wersja Groupon!

**Proś tylko o to, czego potrzebujesz**
Zapytanie do API `/deals` obsługuje opcjonalny parametr o nazwie `&show=`, który pozwala użytkownikom ograniczyć ilość zwracanych danych. Użycie tego parametru może zaoszczędzić przepustowość i skrócić czas przetwarzania danych poprzez usunięcie niepotrzebnych danych z odpowiedzi API. Możemy również uprościć nasz wynik, uwzględniając tylko najbardziej interesujące informacje, w tym link do strony internetowej Groupon dla każdej oferty. Po usunięciu niepotrzebnych elementów z wygenerowanego schematu dla Dallas, nasza ostateczna wersja podsumowania ofert dostępnych online wygląda następująco: 

[![Schemat XMLSpy przedstawiający uproszczony plik XSD firmy Groupon](https://lh4.ggpht.com/-iwVlq7FJKaI/TkkciR_RWlI/AAAAAAAAAec/40tefse9cdU/clip_image010_thumb.png?imgmax=800 "XMLSpy Schema diagram of the simplified Groupon xsd file")](http://lh3.ggpht.com/-lj5Ou5l1F2I/TkkciBixtCI/AAAAAAAAAeY/ZPWD35XiU1Q/s1600-h/clip_image0103.png) 

Kiedy dodamy parametr "&show=" do naszego mapowania w MapForce, aby zażądać tylko elementów zawartych w uproszczonym schemacie XML, zapytania będą wyglądać następująco:

[![Zmodyfikowana lista zapytań z parametrem "&show="](https://lh6.ggpht.com/-U_NgQfTyMSI/Tkkci5k9peI/AAAAAAAAAek/a_K8X4pljQ8/clip_image011_thumb.png?imgmax=800 "Modified list of queries with the &show= parameter")](http://lh5.ggpht.com/-k15Fug8YlDM/TkkciuNh8TI/AAAAAAAAAeg/z-vZ8UXA9uE/s1600-h/clip_image0113.png) 

Teraz możemy umieścić zaktualizowany plik .xsd w konfiguracji mapowania i połączyć listę zapytań API/oferty jako dynamiczne dane wejściowe. Nie musimy usuwać pliku tekstowego, którego używaliśmy do zbierania listy zapytań – może on nadal być przydatny do przyszłego debugowania. 

[![Mapforce: dynamiczne mapowanie plików wejściowych](https://lh5.ggpht.com/-1UHiT_Wo7wk/TkkcjQ4eRUI/AAAAAAAAAes/cIED363B0lM/clip_image012_thumb.png?imgmax=800 "Mapforce dynamic input file mapping")](http://lh5.ggpht.com/-yVH1tV-Hxww/TkkcjLLDrYI/AAAAAAAAAeo/kjoWneA91N8/s1600-h/clip_image0123.png) 

Te zmiany finalizują proces mapowania danych po stronie wejściowej. 

**Definiowanie wyniku transformacji danych** 

W programie XMLSpy możemy wprowadzić kilka dodatkowych modyfikacji do schematu XML, który jest używany jako dane wejściowe, aby zaprojektować nową wersję, która będzie używana jako dane wyjściowe 

[![Schemat XMLSpy dla pliku wynikowego o rozszerzeniu xsd](https://lh4.ggpht.com/-Ay_3WyFqFA8/Tkkcj1lL4eI/AAAAAAAAAe0/MbDOLQIx_eY/clip_image013_thumb.png?imgmax=800 "XMLSpy schema diagram of the output file xsd")](http://lh3.ggpht.com/-GpaXSUZ0Rvc/TkkcjsBzMVI/AAAAAAAAAew/8C0GzH_Y22A/s1600-h/clip_image0133.png) 

Usunęliśmy element "response" (odpowiedź), ponieważ nie wnosi on żadnej wartości, oraz element "redemptionLocation" (lokacja realizacji), który nie jest przeznaczony do uwzględnienia w wynikach. Dodaliśmy również element daty, który będzie zawierał znacznik czasu, ponieważ nasz plik wynikowy będzie przedstawiał migawkę danych, które ciągle się zmieniają. 

Po zapisaniu tej wersji pliku .xsd w programie XMLSpy, możemy go wstawić do mapowania w programie MapForce. Poniżej znajduje się strona wynikowa mapowania, z częściowo połączonym komponentem wynikowym. Filtr na górze odczytuje element "redemptionLocation", aby wybrać tylko oferty dostępne online, a funkcja "now" wstawia aktualną datę

[![Fragment widoku mapowania plików wyjściowych programu MapForce](https://lh3.ggpht.com/-dCMzbcgoV7o/TkkckSog8tI/AAAAAAAAAe8/E3WXT_hufz0/clip_image014_thumb.png?imgmax=800 "Partial view of the MapForce output file mapping")](http://lh4.ggpht.com/-Bw3lJz0IGRY/TkkckIAeytI/AAAAAAAAAe4/wRJ4iBcFJVY/s1600-h/clip_image0143.png) 

Ostatnia modyfikacja, którą wprowadziliśmy w schemacie XML wyjściowym, polegała na zmianie typu kilku elementów z typu dateTime, Boolean i integer na typ string, aby umożliwić użycie bardziej opisowego tekstu. Poniżej znajduje się pełna definicja mapowania wraz z ostatecznymi połączeniami z komponentem wyjściowym: 

[![Mapowanie danych za pomocą Mapforce dla API Groupon](https://lh4.ggpht.com/-nqTnqO-22FQ/Tkkck9jjGMI/AAAAAAAAAfE/S98nV4FP7uE/clip_image015_thumb.png?imgmax=800 "Mapforce data mapping for the Groupon API")](http://lh5.ggpht.com/-Pb7a5H2UpFs/TkkcknIB9_I/AAAAAAAAAfA/rsYL1Q1NHUk/s1600-h/clip_image0153.png) 

**A teraz przejdźmy do sedna sprawy** 

Po kliknięciu przycisku "Wyjście", MapForce przetwarza całą transformację danych od początku do końca, wykorzystując wbudowany silnik przetwarzania. Poniżej przedstawiono szczegółowy opis kroków:

- Uruchom zapytanie "/divisions", aby uzyskać aktualną listę działów
- Połącz ze sobą ciągi znaków, aby utworzyć listę zapytań dotyczących ofert dla wszystkich działów
- Uruchom zapytania `/deals`, aby wygenerować dynamiczne dane dla komponentu wejściowego
- Filtruj oferty dostępne online, aby wygenerować komponent wyjściowy, wykonaj pozostałe funkcje mapowania i dodaj znacznik czasu po przetworzeniu wszystkich ofert

MapForce wykonuje wszystkie te kroki w ciągu zaledwie kilku sekund i generuje plik wynikowy zawierający szereg transakcji, które wyglądają następująco: 

[![Dane wyjściowe z mapowania danych w MapForce dla API Groupon](https://lh5.ggpht.com/-nLw5_EH7G-c/TkkclUU6KzI/AAAAAAAAAfM/_GNvvf-Mlqc/clip_image016_thumb.png?imgmax=800 "Output data from the MapForce mapping for the Groupon API")](http://lh6.ggpht.com/-GkEs7wJOvcs/TkkclJCUb0I/AAAAAAAAAfI/eXjcgRriFbY/s1600-h/clip_image0163.png)

W trzeciej części tego cyklu zaprojektujemy arkusz stylów, który automatycznie przekształci dane XML generowane przez nasze narzędzie mapowania na format HTML, co umożliwi atrakcyjną prezentację w przeglądarce internetowej oraz na urządzeniach mobilnych. Do zobaczenia na stadionie, Yogi! 

XMLSpy i MapForce są dostępne razem w specjalnie wycenionym pakiecie Altova MissionKit. Sprawdź sam, jak łatwo jest użyć MissionKit do konwersji danych z interfejsu API – [pobierz bezpłatną 30-dniową wersję próbną!](https://www.altova.com/pl/download/missionkit/software_development_tools_enterprise.html) 

**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.
