---
title: "Elaborazione dell'API di 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: Scoprite come utilizzare efficacemente l'API di Groupon con Altova MapForce, inclusi i metodi per la mappatura dinamica dei dati, l'esecuzione di query e le strategie di filtraggio dei risultati.
---
Status: #blog

Tags:  #altova-xmlspy #data-integration #data-mapping #mapforce #missionkit #xml-editor #xml-schema #xmlspy

Categories: [data-integration](/blog/it/category/data-integration.md)
# Elaborazione dell'API di Groupon con MapForce – Parte 2

Nella [prima parte di questa serie](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html), abbiamo descritto come collegare [Altova MapForce](https://www.altova.com/it/mapforce.html) all'API di Groupon. Abbiamo interrogato l'API per ottenere un elenco delle divisioni di Groupon, quindi abbiamo utilizzato questo elenco per creare query API per tutte le offerte attuali di ogni divisione. In questa parte, eseguiremo le query "/deals" e filtreremo i risultati per estrarre i dati più interessanti. L'elenco delle query "/deals" che abbiamo creato in precedenza è il seguente: 

[![Elenco delle richieste relative a offerte e promozioni di Groupon generate da 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) 

Per elaborare tutte le richieste, possiamo collegare l'elenco come un file di input dinamico a un nuovo componente di mappatura. L'ultima volta che abbiamo avuto bisogno di un nuovo componente, abbiamo inserito una query API/divisioni nel componente di mappatura e abbiamo lasciato che MapForce creasse automaticamente uno schema XML. Potremmo fare lo stesso qui, inserendo una query API/offerte come file di input XML. C'è solo un piccolo problema: sebbene la documentazione online dell'API di Groupon descriva chiaramente le query che possiamo effettuare, è poco precisa riguardo alle informazioni che verranno restituite. Prima di inviare decine di query all'API per tutte le offerte attuali, probabilmente vorremmo saperne un po' di più sui dati che verranno restituiti. 

**Facciamo un affare** 

Come diceva Yogi Berra, si può imparare molto semplicemente osservando. Iniziamo eseguendo una query "/deals" in [XMLSpy](https://www.altova.com/it/xmlspy.html). Questo ci permetterà di esaminare la risposta a una query per una singola divisione prima di elaborare un volume potenzialmente eccessivo di dati. Il menu File/Apri di XMLSpy include la stessa opzione "Passa a URL" che abbiamo utilizzato in MapForce nel post precedente. Se inseriamo la query API "/deals" per una divisione che copre una vasta area metropolitana, ad esempio Dallas, è probabile che otterremo un numero sufficiente di istanze di "deals" per poter estrapolare le caratteristiche dell'intero set di dati. XMLSpy apre la risposta alla query API "/deals" in modalità testo, proprio come se aprissimo un file locale: 

[![Esempio tratto dalla risposta a una richiesta relativa a Groupon/offerte, visualizzato in 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) 

Come previsto, abbiamo ottenuto una grande quantità di dati quando abbiamo richiesto tutte le transazioni per una singola divisione! Un modo rapido per analizzare la struttura di questi dati è utilizzare l'opzione del menu XMLSpy DTD/Schema per generare un file .xsd a partire dal file XML. Di seguito è riportata una versione ridotta dell'intero file .xsd generato, basata sulla risposta alla query /deals per Dallas: 

[![Un file XSD generato da XMLSpy a partire dalla query di 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) 

Possiamo approfondire ulteriormente, seguendo il consiglio di Yogi, come se fosse un déjà vu. Analizzando tutti gli elementi dello schema XML, emergono alcune anomalie interessanti. Ad esempio, ci sono due elementi chiamati "redemptionLocation" con definizioni diverse. Il primo contiene una sequenza di elementi figli: 

[![Prima applicazione dell'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 la seconda è definita come una semplice stringa di testo: 

[![Secondo utilizzo dell'elemento "remdemptionLocation"](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) 

Ripercorrendo i dati XML relativi a Dallas e cercando l'elemento "redemptionLocation", vengono visualizzati questi esempi: 

[![Un esempio di redenzione. Posizione all'interno del testo della risposta](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: 

[![Un esempio di redenzione. Posizione all'interno del testo della risposta](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:

[![Un esempio di redenzione. Posizione all'interno del testo della risposta](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) 

Questo è davvero interessante, perché redemptionLocation = "online" identifica le offerte che possono essere utilizzate da qualsiasi luogo, invece di richiedere una visita fisica presso la sede dove vengono pubblicizzate. E se eseguiamo le query dell'API /deals per tutte le divisioni ed estraessimo un elenco di tutte le offerte online? Sarebbe una versione estrema di Groupon!

**Chiedere solo ciò di cui si ha bisogno**
La query dell'API /deals di Groupon supporta un parametro opzionale chiamato &show= che consente agli utenti di limitare i dati restituiti. L'utilizzo di questo parametro può risparmiare larghezza di banda e ridurre i tempi di elaborazione dei dati, eliminando i dati indesiderati dalla risposta dell'API. Possiamo anche semplificare il risultato finale includendo solo le informazioni più interessanti, compreso il link alla pagina web di Groupon per ogni offerta. Dopo aver rimosso gli elementi indesiderati dallo schema di Dallas generato, la versione finale per il riepilogo delle offerte online è la seguente: 

[![Diagramma dello schema XMLSpy del file xsd semplificato di 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 aggiungiamo il parametro "&show=" alla nostra mappatura MapForce per richiedere solo gli elementi inclusi nello schema XML semplificato, le query risultano simili a queste:

[![Elenco modificato delle query con il parametro "&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) 

Ora possiamo inserire il file .xsd modificato nella mappatura e collegare l'elenco delle query API/offerte come input dinamico. Non è necessario eliminare il file di testo che abbiamo utilizzato per raccogliere l'elenco delle query, poiché potrebbe essere utile per future attività di debug. 

[![Mappatura dinamica dei file di input in 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) 

Queste modifiche completano la parte di input del processo di mappatura dei dati. 

**Definizione dell'output della trasformazione dei dati** 

Tornando a XMLSpy, possiamo apportare alcune modifiche aggiuntive allo schema XML di input per progettare una nuova versione per l'output 

[![Diagramma dello schema XMLSpy per il file di output con estensione 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) 

Abbiamo eliminato l'elemento di risposta, poiché non aggiunge alcun valore, e abbiamo rimosso l'elemento "redemptionLocation" che non intendiamo includere nell'output. Abbiamo inoltre aggiunto un elemento data per un timestamp, perché il nostro file di output rappresenterà una "istantanea" di dati che sono in continua evoluzione. 

Dopo aver salvato questa versione del file .xsd in XMLSpy, possiamo integrarla nella mappatura di MapForce. Di seguito è mostrato il lato di output della mappatura, con il componente di output parzialmente collegato. Il filtro in alto legge l'elemento "redemptionLocation" per selezionare solo le offerte online, e la funzione "now" inserisce la data:

[![Vista parziale della mappatura del file di output di 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) 

L'ultima modifica che abbiamo apportato allo schema XML di output è stata quella di convertire diversi tipi di elementi da "dateTime", "Boolean" e "integer" al tipo di dato "stringa", per consentire l'utilizzo di testi più descrittivi. Di seguito è riportata la definizione completa della mappatura, con i collegamenti finali al componente di output: 

[![Mappatura dei dati con Mapforce per l'API di 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) 

**Ed ora, il risultato finale** 

Quando si preme il pulsante "Output", MapForce elabora l'intero processo di trasformazione, dall'inizio alla fine, utilizzando il motore di esecuzione integrato di MapForce. Ecco una descrizione dettagliata dei passaggi:

- Eseguire la query "/divisions" per ottenere l'elenco attuale delle divisioni
- Concatenare le stringhe per creare l'elenco delle query relative alle offerte ("deals") per tutte le divisioni
- Eseguire le query relative a "/deals" per creare dati dinamici da utilizzare nel componente di input
- Filtrare le offerte online per generare il componente di output, eseguire le funzioni di mappatura rimanenti e aggiungere il timestamp dopo che tutte le offerte sono state elaborate

MapForce impiega solo pochi secondi per completare tutte queste operazioni e generare un file di output contenente una serie di transazioni che avranno questo aspetto: 

[![Dati di output derivanti dalla mappatura eseguita con MapForce per l'API di 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)

Nella terza parte di questa serie, creeremo un foglio di stile che trasformerà automaticamente l'output XML della nostra applicazione in HTML, per una presentazione accattivante sia nei browser web che sui dispositivi mobili. A presto, Yogi! 

XMLSpy e MapForce sono disponibili insieme nel pacchetto Altova MissionKit, offerto a un prezzo speciale. Scoprite di persona quanto è facile utilizzare MissionKit per convertire i dati provenienti da un'API web: [scaricate una versione di prova gratuita di 30 giorni!](https://www.altova.com/it/download/missionkit/software_development_tools_enterprise.html) 

**Nota dell'editore:** La nostra serie originale sulla mappatura dei dati dall'API di Groupon è stata pubblicata in tre parti, che potete consultare cliccando sui seguenti link: La prima parte, intitolata "[Utilizzo di Altova MapForce per l'elaborazione dell'API di Groupon](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html)", descrive come creare input dinamici raccogliendo dati da più URL. La seconda parte, intitolata "[Elaborazione dell'API di Groupon con MapForce – Parte 2](https://www.altova.com/blog/2011/08/processing-groupon-api-with-mapforce.html)", spiega come abbiamo filtrato i dati provenienti dall'API e definito l'output per estrarre solo le informazioni più rilevanti. La terza parte, intitolata "[Elaborazione dell'API di Groupon – Parte 3](https://www.altova.com/blog/2011/08/processing-groupon-api-part-3.html)", descrive come formattare l'output come un singolo documento HTML ottimizzato per dispositivi desktop e mobili, e illustra i modi per automatizzare l'esecuzione ripetuta.
