---
title: "Het verwerken van de Groupon API met MapForce – Deel 2"
date: "2011-08-16"
categories: 
  - "data-integration"
tags: 
  - "altova-xmlspy"
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "missionkit"
  - "xml-editor"
  - "xml-schema"
  - "xmlspy"
description: Ontdek hoe u de Groupon API effectief kunt gebruiken met Altova MapForce, inclusief technieken voor dynamische datatransformatie, het uitvoeren van queries en strategieën voor het filteren van de output.
---
Status: #blog

Tags:  #altova-xmlspy #data-integration #data-mapping #mapforce #missionkit #xml-editor #xml-schema #xmlspy

Categories: [data-integration](/blog/nl/category/data-integration.md)
# Het verwerken van de Groupon API met MapForce – Deel 2

In [Deel 1 van deze serie](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html) beschreven we hoe u [Altova MapForce](https://www.altova.com/nl/mapforce.html) kunt verbinden met de Groupon API. We hebben de API bevracht voor een lijst met Groupon-divisies en vervolgens deze lijst gebruikt om API-verzoeken te genereren voor alle actuele aanbiedingen van elke divisie. In dit deel zullen we de `/deals`-verzoeken uitvoeren en de resultaten filteren om de meest interessante gegevens te selecteren. De lijst met `/deals`-verzoeken die we eerder hebben samengesteld, ziet er als volgt uit: 

[![Lijst van vragen over Groupon-aanbiedingen, gegenereerd door 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) 

Om alle vragen te verwerken, kunnen we de lijst als een dynamisch invoerbestand koppelen aan een nieuwe mappingcomponent. De vorige keer dat we een nieuwe component nodig hadden, hebben we een API-/divisies-vraag in de mapping geplaatst en MapForce automatisch een XML-schema laten genereren. We kunnen hetzelfde hier doen door een API-/aanbiedingen-vraag als een XML-invoerbestand toe te voegen. Er is echter wel een klein probleem: hoewel de online documentatie van de Groupon API duidelijk beschrijft welke vragen we kunnen stellen, is het vaag over de informatie die wordt teruggegeven. Voordat we tientallen vragen naar de API sturen voor alle huidige aanbiedingen, willen we waarschijnlijk iets meer weten over de gegevens die we terugkrijgen. 

**Laten we een deal sluiten** 

Zoals Yogi Berra zei, kun je veel leren door gewoon te kijken. Laten we beginnen met het uitvoeren van een "/deals"-query in [XMLSpy](https://www.altova.com/nl/xmlspy.html). Dat stelt ons in staat om de reactie op een query voor één divisie te bekijken, voordat we een mogelijk grote hoeveelheid data ophalen. Het menu Bestand / Openen in XMLSpy bevat dezelfde optie "Schakel over naar URL" die we eerder in MapForce hebben gebruikt. Als we de "/deals"-API-query voor een divisie invoeren die een groot stedelijk gebied bestrijkt – bijvoorbeeld Dallas – dan krijgen we waarschijnlijk voldoende "deals"-instanties om de kenmerken van de gehele dataset te kunnen bepalen. XMLSpy opent de reactie op de "/deals"-API-query in de tekstweergave, net alsof we een lokaal bestand openen: 

[![Voorbeeld van een antwoord op een vraag over Groupon/aanbiedingen, weergegeven in 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) 

Zoals verwacht, hebben we een aanzienlijke hoeveelheid data ontvangen toen we alle transacties voor één specifieke afdeling opvragen. Een snelle manier om de structuur van deze data te analyseren is om de optie "XMLSpy DTD / Schema" te gebruiken om een .xsd-bestand te genereren op basis van de XML-data. Hieronder is een verkorte weergave van het volledige gegenereerde .xsd-bestand, gebaseerd op de reactie op de query "/deals" voor Dallas: 

[![Een XSD-bestand dat door XMLSpy is gegenereerd op basis van de Groupon-query](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) 

We kunnen nog dieper graven, zoals Yogi zei, alsof we dit al eerder hebben gezien. Door alle elementen te bekijken die bij het XML-schema horen, komen we enkele opmerkelijke anomalieën tegen. Zo zijn er bijvoorbeeld twee elementen met de naam "redemptionLocation" die verschillende definities hebben. Het eerste element bevat een reeks onderliggende elementen: 

[![Eerste gebruik van het element "redemptieLocatie"](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) 

En de tweede wordt gedefinieerd als een eenvoudige tekstreeks: 

[![Tweede gebruik van het element "redemptielocatie"](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) 

Bij het opnieuw bekijken van de XML-gegevens voor Dallas en het zoeken naar "redemptionLocation" worden de volgende voorbeelden weergegeven: 

[![Een voorbeeld van herstel. Locatie in de tekst van het antwoord](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) 

En: 

[![Een voorbeeld van herstel. Locatie in de tekst van het antwoord](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) 

En:

[![Een voorbeeld van herstel. Locatie in de tekst van het antwoord](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) 

Dit is erg interessant, omdat `redemptionLocation = "online"` aanbiedingen identificeert die overal kunnen worden ingeleerd, in plaats van door een bezoek aan een fysieke locatie binnen de divisie waar ze worden aangeboden. Wat als we de `/deals` API-query voor alle divisies uitvoeren en een lijst van alle online aanbiedingen extraheren? Dat zou een extreme Groupon-ervaring opleveren!

**Vraag alleen wat je nodig hebt**
De Groupon `/deals` API-query ondersteunt een optionele parameter, `&show=`, waarmee gebruikers de hoeveelheid geretourneerde data kunnen beperken. Door deze parameter toe te passen, kan bandbreedte worden bespaard en de verwerkingstijd voor de dataomzetting worden verkort, doordat ongewenste data uit de API-reactie worden verwijderd. We kunnen ons uiteindelijke resultaat ook vereenvoudigen door alleen de meest interessante informatie op te nemen, inclusief de link naar de Groupon-webpagina voor elke aanbieding. Nadat we ongewenste elementen hebben verwijderd uit het gegenereerde Dallas-schema, ziet de definitieve versie voor de samenvatting van online aanbiedingen er als volgt uit: 

[![XMLSpy-schemaweergave van het vereenvoudigde Groupon XSD-bestand](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) 

Wanneer we de parameter "&show=" toevoegen aan onze MapForce-mapping om alleen de elementen op te vragen die zijn opgenomen in het vereenvoudigde XML-schema, zien de queries er als volgt uit:

[![Aangepaste lijst van zoekopdrachten met de parameter "&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) 

Nu kunnen we het bijgewerkte .xsd-bestand in de mapping plaatsen en de lijst met API-/deal-vragen als dynamische invoer koppelen. We hoeven het tekstbestand dat we gebruikten om de lijst met vragen te verzamelen niet te verwijderen; dat kan in de toekomst nog nuttig zijn voor het opsporen van fouten. 

[![Dynamische invoerbestandsmapping in Mapforce](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) 

Deze wijzigingen voltooien de invoerzijde van de datamapping. 

**Het definiëren van de uitvoer van de datatransformatie** 

In XMLSpy kunnen we nog een paar aanpassingen maken aan het invoer-XML-schema om een nieuwe versie voor de uitvoer te ontwerpen: 

[![XMLSpy-schemaweergave van het uitvoerbestand 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) 

We hebben het respons-element verwijderd, omdat het geen toegevoegde waarde heeft, en het element "redemptionLocation" verwijderd, omdat we dit niet in de uitvoer willen opnemen. We hebben ook een datumveld toegevoegd voor een tijdstempel, omdat ons uitvoerbestand een momentopname van gegevens zal zijn die voortdurend veranderen. 

Nadat we deze versie van het .xsd-bestand in XMLSpy hebben opgeslagen, kunnen we het in de MapForce-mapping plaatsen. Hieronder is de uitvoerkant van de mapping te zien, met een gedeeltelijk verbonden uitvoercomponent. Het filter bovenaan leest het element "redemptionLocation" om alleen online aanbiedingen te selecteren, en de functie "nu" voegt de huidige datum toe:

[![Gedeeltelijke weergave van de mapping van het uitvoerbestand van 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) 

De laatste wijziging die we hebben aangebracht in het XML-schema voor de uitvoer, was het omzetten van verschillende elementtypes van "dateTime", "Boolean" en "integer" naar het string-datetype, om zo meer beschrijvende tekst mogelijk te maken. Hieronder volgt de volledige definitie van de mapping, met de definitieve koppelingen naar het uitvoercomponent: 

[![Data-mapping met Mapforce voor de Groupon API](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) 

**En nu het resultaat** 

Wanneer we op de knop "Uitvoer" klikken, verwerkt MapForce de volledige transformatie van begin tot eind met behulp van de ingebouwde uitvoeringsengine van MapForce. Hieronder volgt een overzicht van de stappen:

- Voer de query "/divisions" uit om de actuele lijst van divisies op te vragen
- Combine de tekstreeksen om de lijst met zoekopdrachten voor "/deals" voor alle divisies samen te stellen
- Voer de query's onder `/deals` uit om dynamische gegevens te genereren voor het invoerveld
- Filter de online aanbiedingen om het uitvoercomponent te genereren, voer de overige mappingfuncties uit en voeg de tijdstempel toe nadat alle aanbiedingen zijn verwerkt

MapForce voert al die stappen in slechts enkele seconden uit en genereert een uitvoerbestand met een reeks transacties die er ongeveer zo uitzien: 

[![Uitvoergegevens van de mapping die is gemaakt in MapForce voor de Groupon API](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)

In het derde deel van deze serie ontwerpen we een stylesheet die de XML-uitvoer van onze mapping automatisch omzet naar HTML, zodat deze aantrekkelijk wordt weergegeven in een webbrowser en op mobiele apparaten. Tot ziens bij het honkbalveld, Yogi! 

XMLSpy en MapForce zijn samen verkrijgbaar in de Altova MissionKit, die tegen een speciale prijs wordt aangeboden. Ontdek zelf hoe eenvoudig het is om de MissionKit te gebruiken om gegevens van een web-API om te zetten – [download een gratis proefversie van 30 dagen!](https://www.altova.com/nl/download/missionkit/software_development_tools_enterprise.html) 

**Redactienota:** Onze oorspronkelijke serie over het verwerken van data van de Groupon API bestond uit drie delen. U kunt deze bekijken door op de links hieronder te klikken: Deel 1, "[Het verwerken van de Groupon API met Altova MapForce](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html)", beschrijft hoe u dynamische invoer kunt creëren door data te verzamelen van meerdere URL's. Deel 2, "[Het verwerken van de Groupon API met MapForce – Deel 2](https://www.altova.com/blog/2011/08/processing-groupon-api-with-mapforce.html)", beschrijft hoe we data uit de API hebben gefilterd en de uitvoer hebben gedefinieerd om alleen de meest interessante details te extraheren. Deel 3, "[Het verwerken van de Groupon API – Deel 3](https://www.altova.com/blog/2011/08/processing-groupon-api-part-3.html)", beschrijft hoe we de uitvoer hebben opgemaakt als een enkel HTML-document, geoptimaliseerd voor desktop- en mobiele apparaten, en bespreekt manieren om de herhaalde uitvoering te automatiseren.
