Processamento da API da Groupon com o MapForce – Parte 2
Na Parte 1 desta série, descrevemos como conectar o Altova MapForce à 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:
![]()
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. 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:
![]()
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:
![]()
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:
![]()
E o segundo é definido como uma cadeia de caracteres simples:
![]()
Ao regressar aos dados XML referentes a Dallas e procurar por "redemptionLocation", são exibidos os seguintes exemplos:
![]()
E:
![]()
E:
![]()
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:
![]()
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:
![]()
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.
![]()
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:
![]()
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:
![]()
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:
![]()
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:
![]()
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!
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", 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", 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", 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.