---
title: "Procesamiento de la API de Groupon: Epílogo"
date: "2011-11-28"
categories: 
  - "applications"
tags: 
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "stylevision"
  - "xmlspy"
description: Este artículo analiza técnicas de depuración para aplicaciones de mapeo de datos que utilizan la API de Groupon, centrándose en la gestión de casos de datos inesperados y la mejora de la integración de datos.
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce #stylevision #xmlspy

Categories: [data-integration](/blog/es/category/data-integration.md)
# Procesamiento de la API de Groupon: Epílogo

Casos excepcionales pueden afectar el funcionamiento de aplicaciones de mapeo de datos que tienen una estructura poco integrada. Esto es especialmente cierto cuando se utilizan grandes conjuntos de datos disponibles a través de Internet y se tiene poca o ninguna influencia sobre los datos de origen. En este artículo, describimos una técnica de depuración que permite a los desarrolladores que trabajan en proyectos de mapeo y transformación de datos identificar y adaptar rápidamente datos inesperados provenientes de una fuente remota.

**El problema**
El verano pasado, escribimos una serie de artículos de blog que describían cómo [utilizar la API de Groupon](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html) para obtener un subconjunto de ofertas en todas las ciudades de Groupon y formatear la lista para un navegador web o un dispositivo móvil. 

[![Salida de MapForce obtenida a través de la API de Groupn, mostrada en un dispositivo móvil](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)

Concluimos con una línea de comandos para ejecutar un mapeo de datos en MapForce que llama a la API de Groupon más de 150 veces: una vez para cada ciudad de Groupon. Luego, se filtran los datos para extraer las ofertas vendidas a través de Internet, en lugar de en una ubicación física, y se formatean los resultados en HTML utilizando StyleVision. Cada mañana, ejecutamos la línea de comandos en un archivo por lotes que guarda la salida en HTML en un servidor local, para que nuestros colegas puedan consultarla con cualquier navegador web y encontrar ofertas interesantes de todo el país. El mapeo funcionó correctamente durante más de dos meses, hasta que un día falló con el siguiente mensaje de error: "El valor de origen \"\" de tipo dateTime no pudo ser convertido al tipo de destino dateTime." La explicación específica es que, en algún punto del mapeo donde esperábamos recibir un valor de tipo dateTime, recibimos un valor vacío. En un nivel más abstracto, el error sugiere un posible defecto en la lógica de nuestra estrategia de mapeo. Cada vez que llamamos a la API de Groupon, recibimos un flujo de datos XML bien formado, encerrado dentro de un elemento <response>, pero las especificaciones de la API no incluyen un esquema XML que defina los datos que se pueden devolver. Cuando desarrollamos nuestro mapeo, necesitábamos analizar los datos sin procesar y seleccionar la salida deseada, por lo que nuestro primer paso fue llamar a la API para capturar todas las ofertas de Groupon para una gran área metropolitana. Asumimos que obtendríamos una muestra de datos lo suficientemente grande como para incluir todas las opciones posibles en la respuesta de la API. Después de que nuestro mapeo se ejecutó correctamente durante dos meses, la API finalmente entregó un caso excepcional poco común que no se ajustaba al patrón que esperábamos.

**Herramientas de depuración**
MapForce proporciona ayuda para la depuración. Podemos ejecutar nuestro mapeo de datos utilizando el motor de ejecución integrado de MapForce para ver más detalles en la ventana de mensajes. 

[![La ventana de mensajes de MapForce muestra un error de mapeo de datos](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) 

Las líneas etiquetadas como "Ubicación relacionada" contienen enlaces que redirigen a los componentes del mapa donde se produjo el error. Al hacer clic en el mensaje de error, se accede a la función "format-dateTime". 

[![Función "format-dateTime" en 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) 

Podemos hacer clic en el mensaje de "error" o rastrear el conector de valores para identificar el elemento de entrada de la función "format-dateTime". De cualquier manera, localizamos el elemento que causó el error. 

[![(No se proporciona texto para traducir. Por favor, proporcione el texto en inglés que desea que traduzca al español.)](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) 

El elemento problemático se encuentra en el componente de entrada, que captura todos los datos devueltos por nuestras llamadas a la API de Groupon antes de que se realice cualquier filtro o conversión. Cuando diseñamos la configuración, el elemento "endAt" en nuestros datos de ejemplo siempre mostraba la fecha y hora de finalización de cada oferta de Groupon, pero por alguna razón, parece que hemos recibido un valor vacío en este campo. Si el error se hubiera producido al procesar un archivo de entrada local, podríamos simplemente examinar el contenido del archivo, pero en este caso, los datos provienen de múltiples URLs y solo se almacenan temporalmente hasta que se mapean al componente de salida. Afortunadamente, podemos aplicar un truco para modificar fácilmente la configuración y preservar todos los datos recibidos de la API de Groupon. Simplemente copiamos el componente de entrada y pegamos una copia en la configuración. Podemos conectar el elemento de respuesta del componente original a la copia, lo que simultáneamente mapea todos los elementos secundarios entre los componentes. 

[![(No se proporciona texto para traducir. Por favor, proporcione el texto en inglés que desea que traduzca al español.)](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) 

Nuestro componente de entrada original ahora está conectado a dos componentes de salida. Podemos seleccionar qué componente de salida será generado por el motor de ejecución integrado de MapForce haciendo clic en el icono de ojo ubicado en la esquina superior derecha de cualquier componente de salida. El nuevo componente de salida simplemente guarda una copia de todo lo que contiene el componente de entrada. Cuando examinamos los datos sin procesar utilizando XMLSpy, efectivamente encontramos un elemento vacío donde esperábamos encontrar una fecha y hora: 

[![(No se proporciona texto para traducir. Por favor, proporcione el texto en inglés que desea que traduzca al español.)](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) 

## La solución

Ahora que sabemos que una oferta podría no tener una fecha de finalización específica, podemos planificar esa posibilidad en el mapeo. En la versión revisada del elemento "endAt", realizamos una comprobación condicional antes de la función original "format-dateTime" y proporcionamos un resultado alternativo cuando el elemento "endAt" está vacío. 

[![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)

Tuvimos que trabajar rápidamente porque todos los datos de Groupon tienen una fecha de caducidad. El caso particular eventualmente expiraría y desaparecería del flujo de datos. Esta experiencia nos demostró lo importante que es contar con herramientas de depuración potentes y utilizarlas de manera creativa, incluso después de que uno piense que un proyecto de mapeo de datos está funcionando correctamente. Altova MapForce es [Disponible en una versión de prueba gratuita](https://www.altova.com/es/download-trial/) – El próximo caso límite que resuelva podría ser el suyo propio. 

**Nota del editor:** Nuestra serie original sobre la gestión de datos de la API de Groupon se publicó en tres partes, que puede consultar haciendo clic en los siguientes enlaces: La primera parte, titulada "[Gestión de la API de Groupon con Altova MapForce](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html)", describe cómo crear entradas dinámicas mediante la recopilación de datos de múltiples URLs. La segunda parte, "[Gestión de la API de Groupon con MapForce – Parte 2](https://www.altova.com/blog/2011/08/processing-groupon-api-with-mapforce.html)", explica cómo filtramos los datos de la API y definimos la salida para extraer únicamente los detalles más relevantes. La tercera parte, "[Gestión de la API de Groupon – Parte 3](https://www.altova.com/blog/2011/08/processing-groupon-api-part-3.html)", describe cómo formatear la salida como un único documento HTML optimizado para dispositivos de escritorio y móviles, y analiza diferentes métodos para automatizar la ejecución repetida.
