---
title: "Processamento da API da Groupon com o 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: Explore como processar eficazmente a API da Groupon utilizando o Altova MapForce, incluindo técnicas de mapeamento dinâmico de dados, execução de consultas e estratégias de filtragem de resultados.
---
Status: #blog

Tags:  #altova-xmlspy #data-integration #data-mapping #mapforce #missionkit #xml-editor #xml-schema #xmlspy

Categories: [data-integration](/blog/pt/category/data-integration.md)
# Processamento da API da Groupon com o MapForce – Parte 2

Na [Parte 1 desta série](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html), descrevemos como conectar o [Altova MapForce](https://www.altova.com/pt/mapforce.html) à API da Groupon. Consultámos a API para obter uma lista de divisões da Groupon e, em seguida, utilizamos essa lista para criar consultas à API para todas as ofertas atuais de cada divisão. Nesta parte, vamos executar as consultas para obter as ofertas e filtrar os resultados para obter os dados mais relevantes. A lista de consultas para obter as ofertas que criámos anteriormente é a seguinte: 

[![Lista de questões/consultas relativas a ofertas da Groupon geradas pelo 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 processar todas as consultas, podemos conectar a lista como um ficheiro de entrada dinâmico a um novo componente de mapeamento. Da última vez que precisamos de um novo componente, introduzimos uma consulta da API /divisões no mapeamento e deixámos que o MapForce criasse automaticamente um esquema XML. Podemos fazer o mesmo aqui, introduzindo uma consulta da API /ofertas como um ficheiro de entrada XML. Existe apenas um pequeno problema: embora a documentação online da API da Groupon descreva claramente as consultas que podemos fazer, ela é vaga quanto às informações que serão devolvidas. Antes de enviarmos dezenas de consultas à API para todas as ofertas atuais, provavelmente queremos saber um pouco mais sobre os dados que serão recebidos. 

**Vamos fazer um acordo** 

Tal como disse Yogi Berra, podemos aprender muito apenas observando. Vamos começar executando uma consulta "/deals" no [XMLSpy](https://www.altova.com/pt/xmlspy.html). Isso permitirá que examinemos a resposta a uma consulta para uma divisão antes de recolhermos um volume de dados potencialmente muito grande. O menu "Arquivo / Abrir" do XMLSpy inclui a mesma opção "Mudar para URL" que usamos no MapForce na publicação anterior. Se introduzirmos a consulta da API "/deals" para uma divisão que abrange uma grande área metropolitana – digamos, Dallas – é provável que obtenhamos um número suficiente de registos de "deals" para podermos inferir as características de todo o conjunto de dados. O XMLSpy abre a resposta à consulta da API "/deals" na visualização de texto, tal como se tivéssemos aberto um ficheiro local: 

[![Exemplo de uma resposta a uma questão sobre a Groupon/ofertas, exibido no 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, obtivemos uma grande quantidade de dados quando solicitámos todos os negócios para uma única divisão! Uma forma rápida de analisar a estrutura destes dados é utilizar a opção de menu "DTD/Schema" do XMLSpy para gerar um ficheiro .xsd a partir do XML. Abaixo, apresentamos uma visão simplificada do ficheiro .xsd gerado, com base na resposta à consulta "/deals" para Dallas: 

[![Um ficheiro XSD gerado pelo XMLSpy a partir da consulta do 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 aprofundar ainda mais a análise, seguindo o conselho de Yogi, como se estivéssemos a reviver a mesma situação. Ao examinar todos os elementos do esquema XML, revelam-se algumas anomalias curiosas. Por exemplo, existem dois elementos com o nome "redemptionLocation" que possuem definições diferentes. O primeiro contém uma sequência de elementos filhos: 

[![Primeira utilização do 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) 

E o segundo é definido como uma cadeia de caracteres simples: 

[![Segunda utilização do elemento "localização_de_resgate"](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) 

Ao regressar aos dados XML referentes a Dallas e procurar por "redemptionLocation", são exibidos os seguintes exemplos: 

[![Um exemplo de redenção. Localização no corpo da resposta](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) 

E: 

[![Um exemplo de redenção. Localização no corpo da resposta](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) 

E:

[![Um exemplo de redenção. Localização no corpo da resposta](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) 

Isto é realmente interessante, porque o parâmetro `redemptionLocation = "online"` identifica ofertas que podem ser utilizadas em qualquer lugar, em vez de exigir uma visita a um estabelecimento físico na divisão onde são anunciadas. E se executássemos as consultas da API `/deals` para todas as divisões e extraíssemos uma lista de todas as ofertas online? Seria uma versão extrema do Groupon!

**Só Peça o Que Precisa**
A consulta da API `/deals` do Groupon suporta um parâmetro opcional chamado `&show=` que permite aos utilizadores limitar os dados que são devolvidos. A utilização deste parâmetro pode poupar largura de banda e reduzir o tempo de processamento dos dados, removendo informações desnecessárias da resposta da API. Também podemos simplificar o nosso resultado final, incluindo apenas as informações mais relevantes, incluindo o link para a página web do Groupon para cada oferta. Depois de remover os elementos indesejados do esquema de Dallas gerado, a nossa versão final para o resumo das ofertas online fica assim: 

[![Diagrama de esquema do XMLSpy para o ficheiro xsd simplificado do 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) 

Quando adicionamos o parâmetro "&show=" à nossa configuração de mapeamento no MapForce, para solicitar apenas os elementos incluídos no esquema XML simplificado, as consultas ficam assim:

[![Lista de consultas modificada com o 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) 

Agora podemos inserir o ficheiro .xsd atualizado no mapeamento e conectar a lista de consultas da API/ofertas como entrada dinâmica. Não precisamos de eliminar o ficheiro de texto que usamos para recolher a lista de consultas, pois este poderá ser útil para futuras correções de erros. 

[![Mapeamento dinâmico de ficheiros de entrada no 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) 

Estas alterações completam a parte de entrada do mapeamento de dados. 

**Definir a saída da transformação de dados** 

No XMLSpy, podemos fazer mais algumas alterações ao esquema XML de entrada para criar uma nova versão para a saída: 

[![Diagrama do esquema XMLSpy do ficheiro de saída (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) 

Eliminámos o elemento de resposta, uma vez que não acrescenta qualquer valor, e removemos o elemento "redemptionLocation", que não pretendemos incluir na saída. Adicionámos também um elemento de data para um carimbo de data/hora, porque o nosso ficheiro de saída será uma instantâneo de dados que estão em constante mudança. 

Depois de guardar esta versão do ficheiro .xsd no XMLSpy, podemos integrá-lo no mapeamento do MapForce. A imagem abaixo mostra o lado de saída do mapeamento, com o componente de saída parcialmente conectado. O filtro no topo lê o elemento "redemptionLocation" para selecionar apenas as ofertas online, e a função "now" insere a data atual:

[![Visão parcial do mapeamento do ficheiro de saída do 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) 

A última alteração que fizemos no esquema XML de saída foi mudar vários tipos de elementos de "dateTime", "Boolean" e "integer" para o tipo de dados "string", para permitir a inclusão de texto mais descritivo. Aqui está a definição completa do mapeamento, com as ligações finais ao componente de saída: 

[![Mapeamento de dados Mapforce para a API da 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) 

**Agora, o resultado final** 

Quando clicamos no botão "Saída", o MapForce processa todo o mapeamento, do início ao fim, utilizando o motor de execução integrado do MapForce. Eis um resumo das etapas:

- Execute a consulta "/divisions" para obter a lista atual de divisões
- Concatene as cadeias de caracteres para construir a lista de consultas "/deals" para todas as divisões
- Execute as consultas "/deals" para criar dados dinâmicos para o componente de entrada
- Filtrar as ofertas online para gerar o componente de saída, executar as restantes funções de mapeamento e adicionar o carimbo de data/hora depois de todas as ofertas terem sido processadas

O MapForce demora apenas alguns segundos para completar todos esses passos e gerar um ficheiro de saída com uma série de transações que se assemelham a isto: 

[![Dados de saída do mapeamento do MapForce para a API da 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)

Na terceira parte desta série, vamos criar uma folha de estilos para transformar automaticamente a saída XML do nosso sistema em HTML, de forma a apresentar os dados de forma apelativa num navegador web e em dispositivos móveis. Até breve, Yogi! 

O XMLSpy e o MapForce estão disponíveis em conjunto no Altova MissionKit, que tem um preço especial. Veja por si mesmo como é fácil usar o MissionKit para converter dados de uma API web – [descarregue uma versão de avaliação gratuita de 30 dias!](https://www.altova.com/pt/download/missionkit/software_development_tools_enterprise.html) 

**Nota do Editor:** A nossa série original sobre a utilização da API da Groupon para mapeamento de dados foi publicada em três partes. Pode consultar as partes clicando nos links abaixo: A primeira parte, "[Processamento da API da Groupon com o Altova MapForce](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html)", descreve como criar entradas dinâmicas através da recolha de dados de várias URLs. A segunda parte, "[Processamento da API da Groupon com o MapForce – Parte 2](https://www.altova.com/blog/2011/08/processing-groupon-api-with-mapforce.html)", explica como filtramos os dados da API e definimos a saída para extrair apenas os detalhes mais relevantes. A terceira parte, "[Processamento da API da Groupon – Parte 3](https://www.altova.com/blog/2011/08/processing-groupon-api-part-3.html)", descreve como formatar a saída como um único documento HTML, otimizado para dispositivos de secretária e dispositivos móveis, e analisa formas de automatizar a execução repetida.
