(*Bing™ Maps REST
Services Application Programming Interface (API))
“Power Query”
è un add-in di Excel che ci permette di comunicare con altri linguaggi, con il
risultato di ottenere informazioni dal loro contenuto. Ad esempio è possibile
calcolare la distanza tra due città “comunicando” con le informazioni fornite
dalle API (cioè una altra applicazione che contiene info e comunica con altre
appl.). “Bing™ Maps REST Services” è il servizio API di Bing Maps.
Conoscere la
distanza tra due punti di un percorso è un fatto di grande importanza. Per un
tecnico gestionale che deve calcolare la lunghezza del percorso che ottimizza i
tempi di lavoro è (una) condizione
necessaria per la progettazione dei servizi.
Un ottimo blog
su come fare questo con le API di Google è:
http://www.excel2013.info/power-query/connection-api/
http://www.excel2013.info/power-query/connection-api/
Riprendendo
quanto dimostrato nel blog, vogliamo ottenere
la distanza tra due punti di un itinerario con Bing Maps REST Services e Excel
“Power Query”.
Procedere nel modo seguente:
1.
Ottenere una BingMapskey
2.
Scaricare l’add-in “Power Query” (possibile per
vers. 2010 e 2013 di Excel).
3. Utilizzare
la documentazione API di Bing e cercare la URL e i parametri che interessano.
La guida delle API di Bing si trova on-line. Cercare nel capitolo “Routes Api” per
trovare quello che interessa. Nel nostro caso possiamo scrivere:
http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=london&wp.1=leeds&avoid=minimizeTolls&key=inserire la bing maps key.
Se
inseriamo l’indirizzo API nella url di un browser (Explorer ad es.) otteniamo
come risposta un file xml (nel
ns.caso “o=xml”, oppure json se “o=json”) che contiene molteplici informazioni
sugli indirizzi “londra” e “leeds” come lat, lon, distanza tra le città, ecc.
Da
tutti i parametri noi vogliamo la distanza e ottenere essa da excel (per adesso la riposta è un file)
4.
Scrivere il codice in Power Query. Nella barra
multifunzione → Power Query → Recupera dati esterni → Da altre origini → Query
Vuota → editor di query → Visualizzazione → Editor avanzato.
All’interno dell’editor avanzato digitare il frammento di codice in
linguaggio M#:
Let
Source=Xml.Document(Web.Contents("http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=london&wp.1=leeds&avoid=minimizeTolls&key=insertbingmapskey"))
In
Source
Al post di insertbingmapskey è chiaro che va inserita la stringa di
caratteri della chiave di prova. “o=” è il file di output che è xml, “wp.0” è
l’indirizzo di partenza (londra) e “wp.1” è l’indirizzo di arrivo (leeds).
5.
Risposta
di Power Query: Il frammento di codice restituisce la seguente risposta:
L’informazione attesa “distanza tra 2 città”
non è visibile: dobbiamo continuare a esplorare il contenuto delle API. Nella
colonna “Value” fare “clic” una volta sulla parola Table.
6. Esplora
il file xml: Il risultato è la tabella seguente dove il risultato non è
ancora visibile: continuiamo a esplorare il file xml facendo “clic” sulla
parola Table della colonna Value nella riga ResourceSets.
7. Si
ottiene la tabella seguente.
8.
Procedendo ancora come al passo precedente più
volte si ottengono le seguenti tabelle in successione
La distanza fra londra e leeds è quindi di 310 km circa.
Il codice in linguaggio M# associato risulta
let
Source = Xml.Document(Web.Contents
("http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=london&wp.1=leeds&avoid=minimizeTolls&key=insertyourbingmapskey")),
Value = Source{0}[Value],
Value1 = Value{6}[Value],
Value2 = Value1{0}[Value],
Value3 = Value2{1}[Value],
Value4 = Value3{0}[Value],
in
Value4
In un prossimo blog vedremo come scrivendo le città (o le
strade) su un foglio excel, sfruttando questo metodo, riesco ad ottenere
velocemente le distanze.
Buon Lavoro. Daniele