---
title: "Procesamiento de la API de Groupon con MapForce – Parte 2"
date: "2011-08-16"
categories: 
  - "data-integration"
tags: 
  - "altova-xmlspy"
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "missionkit"
  - "xml-editor"
  - "xml-schema"
  - "xmlspy"
description: Descubra cómo utilizar eficazmente la API de Groupon con Altova MapForce, incluyendo técnicas de mapeo dinámico de datos, ejecución de consultas y estrategias de filtrado de resultados.
---
Status: #blog

Tags:  #altova-xmlspy #data-integration #data-mapping #mapforce #missionkit #xml-editor #xml-schema #xmlspy

Categories: [data-integration](/blog/es/category/data-integration.md)
# Procesamiento de la API de Groupon con MapForce – Parte 2

En la [Parte 1 de esta serie](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html), describimos cómo conectar [Altova MapForce](https://www.altova.com/es/mapforce.html) a la API de Groupon. Consultamos la API para obtener una lista de las divisiones de Groupon, y luego utilizamos esa lista para crear consultas a la API para todas las ofertas actuales de cada división. En esta parte, ejecutaremos las consultas de "/deals" y filtraremos la respuesta para obtener los datos más interesantes. La lista de consultas de "/deals" que creamos anteriormente es la siguiente: 

[![Lista de consultas relacionadas con Groupon/ofertas generadas por 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) 

Para procesar todas las consultas, podemos conectar la lista como un archivo de entrada dinámico a un nuevo componente de mapeo. La última vez que necesitábamos un nuevo componente, insertamos una consulta de la API /divisiones en el mapeo y dejamos que MapForce creara automáticamente un esquema XML. Podríamos hacer lo mismo aquí, insertando una consulta de la API /ofertas como un archivo de entrada XML. Solo hay un pequeño problema: aunque la documentación en línea de la API de Groupon describe claramente las consultas que podemos realizar, es vaga sobre la información que se devolverá. Antes de enviar docenas de consultas a la API para todas las ofertas actuales, probablemente queramos saber un poco más sobre los datos que se recibirán. 

**Hagamos un trato** 

Como dijo Yogi Berra, se puede aprender mucho simplemente observando. Empecemos ejecutando una consulta de "/deals" en [XMLSpy](https://www.altova.com/es/xmlspy.html). Esto nos permitirá examinar la respuesta a una consulta para una división antes de importar un volumen de datos potencialmente muy grande. El menú Archivo/Abrir de XMLSpy incluye la misma opción "Cambiar a URL" que utilizamos en MapForce en la publicación anterior. Si introducimos la consulta de la API "/deals" para una división que abarca una gran área metropolitana, como Dallas, es probable que obtengamos suficientes instancias de "deals" para poder extrapolar las características de todo el conjunto de datos. XMLSpy abre la respuesta a la consulta de la API "/deals" en la vista de texto, tal como si abriéramos un archivo local: 

[![Ejemplo de la respuesta a una consulta sobre Groupon/ofertas, mostrado en 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) 

Como era de esperar, obtuvimos una gran cantidad de datos cuando solicitamos todas las transacciones para una sola división. Una forma rápida de analizar la estructura de estos datos es utilizar la opción del menú XMLSpy DTD/Schema para generar un archivo .xsd a partir del archivo XML. A continuación, se muestra una vista reducida del archivo .xsd generado completo, basada en la respuesta a la consulta "/deals" para Dallas: 

[![Un archivo XSD generado por XMLSpy a partir de la consulta de 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) 

Podemos profundizar aún más, siguiendo el consejo de Yogi, como si estuviéramos reviviendo la misma situación una y otra vez. Al analizar todos los elementos del esquema XML, se revelan algunas anomalías curiosas. Por ejemplo, existen dos elementos llamados "redemptionLocation" con definiciones diferentes. El primero contiene una secuencia de elementos secundarios: 

[![Primer uso del elemento "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) 

Y la segunda se define como una cadena de caracteres simple: 

[![Segundo uso del elemento "ubicación de la promoción"](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) 

Al volver a analizar los datos XML de Dallas y buscar la etiqueta "redemptionLocation", se muestran los siguientes ejemplos: 

[![Un ejemplo de redención](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) 

Y: 

[![Un ejemplo de redención](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) 

Y:

[![Un ejemplo de redención](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) 

Esto es realmente interesante, porque redemptionLocation = "online" identifica ofertas que se pueden canjear desde cualquier lugar, en lugar de requerir una visita a una ubicación física dentro de la división donde se anuncian. ¿Qué pasaría si ejecutáramos las consultas de la API /deals para todas las divisiones y extrajéramos una lista de todas las ofertas en línea? ¡Eso sería una versión extrema de Groupon!

**Solo Solicita lo que Necesitas**
La consulta de la API /deals de Groupon admite un parámetro opcional llamado &show= que permite a los usuarios limitar los datos que se devuelven. Aplicar este parámetro puede ahorrar ancho de banda y reducir el tiempo de procesamiento de la transformación de datos, eliminando los datos no deseados de la respuesta de la API. También podemos simplificar nuestro resultado final incluyendo solo la información más relevante, incluyendo el enlace a la página web de Groupon para cada oferta. Después de eliminar los elementos no deseados del esquema de Dallas generado, nuestra versión final para el resumen de las ofertas en línea se vería así: 

[![Diagrama de esquema de XMLSpy del archivo xsd simplificado de 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) 

Cuando añadimos el parámetro "&show=" a nuestro mapeo en MapForce para solicitar únicamente los elementos incluidos en el esquema XML simplificado, las consultas tienen este aspecto:

[![Lista modificada de consultas con el parámetro "&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) 

Ahora podemos insertar el archivo .xsd revisado en la configuración y conectar la lista de consultas de la API/ofertas como entrada dinámica. No es necesario eliminar el archivo de texto que utilizamos para recopilar la lista de consultas, ya que podría ser útil para futuras correcciones de errores. 

[![Mapeo dinámico de archivos de entrada en 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) 

Estos cambios completan la parte de entrada del mapeo de datos. 

**Definición de la salida de la transformación de datos** 

En XMLSpy, podemos realizar algunas modificaciones adicionales al esquema XML de entrada para diseñar una nueva versión para la salida: 

[![Diagrama del esquema XMLSpy del archivo de salida 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) 

Eliminamos el elemento de respuesta, ya que no aporta ningún valor, y también eliminamos el elemento "redemptionLocation" que no pretendemos incluir en el resultado. Además, hemos añadido un elemento de fecha para registrar la marca de tiempo, porque nuestro archivo de salida será una instantánea de datos que están en constante cambio. 

Después de guardar esta versión del archivo .xsd en XMLSpy, podemos integrarlo en el mapeo de MapForce. A continuación, se muestra el lado de salida del mapeo, con el componente de salida parcialmente conectado. El filtro en la parte superior lee el elemento "redemptionLocation" para seleccionar únicamente las ofertas en línea, y la función "now" inserta la fecha:

[![Vista parcial del mapeo del archivo de salida de 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) 

La última modificación que realizamos en el esquema XML de salida fue cambiar varios tipos de elementos de "dateTime", "Boolean" y "integer" al tipo de dato "string" para permitir la inclusión de texto más descriptivo. A continuación, se presenta la definición completa del mapeo, con las conexiones finales al componente de salida: 

[![Mapeo de datos con Mapforce para la API de 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) 

**Ahora, el resultado final** 

Cuando hacemos clic en el botón "Salida", MapForce procesa todo el mapeo, desde el principio hasta el final, utilizando el motor de ejecución integrado de MapForce. A continuación, se presenta un desglose de los pasos:

- Ejecute la consulta "/divisions" para obtener la lista actual de divisiones
- Concatenar cadenas de texto para construir la lista de consultas de "/deals" para todas las divisiones
- Ejecute las consultas "/deals" para generar datos dinámicos para el componente de entrada
- Filtrar las ofertas en línea para generar el componente de salida, ejecutar las funciones de mapeo restantes y añadir la marca de tiempo una vez que todas las ofertas hayan sido procesadas

MapForce tarda solo unos segundos en completar todos esos pasos y generar un archivo de salida que contiene una serie de transacciones que se ven así: 

[![Datos de salida generados por la herramienta MapForce al mapear la API de 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)

En la tercera parte de esta serie, diseñaremos una hoja de estilo para transformar automáticamente la salida XML de nuestro sistema en HTML, de modo que se pueda mostrar de forma atractiva en un navegador web y en dispositivos móviles. ¡Nos vemos en el estadio, Yogi! 

XMLSpy y MapForce están disponibles juntos en el Altova MissionKit, que se ofrece a un precio especial. Descubra usted mismo lo fácil que es utilizar MissionKit para convertir datos provenientes de una API web [¡Descargue una prueba gratuita de 30 días!](https://www.altova.com/es/download/missionkit/software_development_tools_enterprise.html) 

**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.
