---
title: "Het verwerken van de Groupon API – Slotbeschouwing"
date: "2011-11-28"
categories: 
  - "applications"
tags: 
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "stylevision"
  - "xmlspy"
description: Dit artikel bespreekt technieken voor het opsporen van fouten in applicaties voor data-integratie die gebruikmaken van de Groupon API, met de nadruk op het omgaan met onverwachte datagevallen en het verbeteren van de data-integratie.
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce #stylevision #xmlspy

Categories: [data-integration](/blog/nl/category/data-integration.md)
# Het verwerken van de Groupon API – Slotbeschouwing

Zeldzame, specifieke situaties kunnen de werking van applicaties voor data-mapping verstoren, vooral wanneer u grote datasets via internet gebruikt en weinig tot geen invloed heeft op de brongegevens. In dit artikel beschrijven we een debugtechniek waarmee ontwikkelaars die werken aan projecten voor data-mapping en -transformatie, onverwachte data in een datastroom van een externe bron snel kunnen identificeren en verwerken. **Het probleem** Afgelopen zomer hebben we een reeks blogartikelen geschreven waarin we uitlegden hoe je [Werk met de Groupon API](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html) om een selectie van aanbiedingen uit alle steden waar Groupon actief is op te halen en de lijst zo te formatteren dat deze geschikt is voor een webbrowser of mobiel apparaat. 

[![De output van MapForce, gegenereerd door de Groupn API, weergegeven op een mobiel apparaat](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)

We sloten af met een commando om een MapForce datamapping uit te voeren die de Groupon API meer dan 150 keer aanroept – één keer voor elke stad waar Groupon actief is. Vervolgens filteren we de data om alleen de aanbiedingen weer te geven die online worden verkocht, in plaats van op een fysieke locatie, en formatteren we de resultaten in HTML met behulp van StyleVision. Elke ochtend voeren we dit commando uit in een batchbestand, waardoor de HTML-output wordt opgeslagen op een lokale server, zodat onze collega's deze kunnen bekijken met een webbrowser en interessante aanbiedingen uit het hele land kunnen vinden. De mapping functioneerde probleemloos gedurende meer dan twee maanden, totdat er op een dag een fout optrad met de volgende foutmelding: "De bronwaarde \"\" van het type dateTime kon niet worden omgezet naar het doeltype dateTime." De specifieke verklaring is dat er ergens in de mapping, waar we een dateTime-waarde verwachtten, een lege waarde werd ontvangen. Op een abstracter niveau suggereert de fout een mogelijk defect in de logica van onze mappingstrategie. Elke keer dat we de Groupon API aanroepen, ontvangen we een correct opgebouwde XML-datastroom, ingekapseld in een <response>-element, maar de API-specificaties bevatten geen XML-schema dat de data definieert die mogelijk wordt geretourneerd. Tijdens de ontwikkeling van onze mapping moesten we de ruwe data analyseren en de gewenste output selecteren. Daarom was onze eerste stap het aanroepen van de API om alle Groupon-aanbiedingen voor een groot stedelijk gebied te verzamelen. We gingen ervan uit dat we een voldoende grote dataset zouden ontvangen om alle mogelijke opties in de API-reactie op te nemen. Na twee maanden waarin de mapping succesvol draaide, leverde de API uiteindelijk een zeldzame uitzondering die niet overeenkwam met het patroon dat we verwachtten.

**Debughulpmiddelen**
MapForce biedt debughulpmiddelen. We kunnen onze datamapping uitvoeren met behulp van de ingebouwde uitvoeringsengine van MapForce om meer details te bekijken in het venster "Berichten". 

[![Het venster "MapForce-berichten" toont een foutmelding met betrekking tot de datamapping](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) 

De regels met de aanduiding "Gerelateerde locatie" zijn voorzien van hyperlinks die terugverwijzen naar de componenten in de kaart waar de fout is opgetreden. Door op de melding van de fout te klikken, wordt u naar een functie voor het formatteren van datums en tijden gebracht. 

[![De functie "format-dateTime" in 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) 

We kunnen ofwel op de "foutmelding" klikken, of de "waardeconnector" volgen om het invoerelement te identificeren dat wordt gebruikt door de functie "format-dateTime". In beide gevallen lokaliseren we het element dat de fout heeft veroorzaakt. 

[![clip_image004](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) 

Het probleem zit in het onderdeel dat de invoergegevens verzamelt, en dat alle data ophaalt die wordt geretourneerd door onze aanroepen aan de Groupon API, voordat enige filtering of conversie plaatsvindt. Toen we de mapping ontwierpen, gaf het element "endAt" in onze voorbeeldgegevens altijd de einddatum en -tijd weer voor elk Groupon-aanbod, maar om de reden dat we niet weten, hebben we blijkbaar een lege waarde in dit veld ontvangen. Als de fout was opgetreden bij het verwerken van een lokaal invoerbestand, konden we eenvoudig de inhoud van het bestand bekijken, maar in dit geval kwam de data van meerdere URL's en wordt deze slechts tijdelijk opgeslagen totdat deze wordt omgezet naar het uitvoeronderdeel. Gelukkig kunnen we een truc toepassen om de mapping eenvoudig te wijzigen en alle data die van de Groupon API is ontvangen, te behouden. We kopiëren eenvoudig het invoeronderdeel en plakken een kopie in de mapping. We kunnen het response-element van het originele onderdeel verbinden met de kopie, waardoor alle onderliggende elementen tussen de onderdelen tegelijkertijd worden gekoppeld. 

[![clip_image005](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) 

Ons oorspronkelijke invoercomponent is nu verbonden met twee uitvoercomponenten. We kunnen selecteren welke uitvoercomponent wordt gegenereerd door de ingebouwde uitvoerengine van MapForce, door op het oogicoon in de rechterbovenhoek van elke uitvoercomponent te klikken. De nieuwe uitvoercomponent slaat simpelweg een kopie op van alles wat zich in de invoercomponent bevindt. Wanneer we de ruwe data bekijken met XMLSpy, zien we inderdaad een leeg element waar we een datum en tijd verwachtten: 

[![clip_image006](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) 

## De oplossing

Nu we weten dat een aanbieding mogelijk geen specifieke eindtijd heeft, kunnen we die mogelijkheid meenemen in de dataverwerking. In de herziene verwerking van het element "endAt" voeren we een voorwaardelijke controle uit voordat we de oorspronkelijke functie voor het omzetten naar een datum- en tijdstempel gebruiken, en we bieden een alternatief resultaat wanneer het element "endAt" leeg is. 

[![clip_image007](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)

We moesten snel werken, omdat alle Groupon-gegevens tijdgebonden zijn. De specifieke situatie zou uiteindelijk verlopen en verdwijnen uit de datastroom. Deze ervaring liet ons zien hoe belangrijk het is om krachtige debugtools te hebben en deze creatief te gebruiken, zelfs nadat je denkt dat een datamappingsproject succesvol verloopt! Altova MapForce is [beschikbaar in een gratis proefversie](https://www.altova.com/nl/download-trial/) – de volgende specifieke situatie die je oplost, kan van jou zijn. 

**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.
