Con un servizio open source
Georeferenziare un CAP con una chiamata in GET in Google Apps Script
Curiosando in rete ho trovato un servizio carino ed open source dove tramite una chiamata RESTful API a api.zippopotam.us, fornendo come parametri un paese nel formato ISO 3166-1 alpha-2 ed un codice postale presente in quel territorio, vengono fornite le informazioni di geolocalizzazione di quella determinata area.
Tra le informazioni restituite ci sono: la regione (cona la sua sigla di abbreviazione), la città, la longitudine e la latitudine.
Per ottenere il risultato basta semplicemente effettuare una chiamata in GET con un formato simile al seguente: api.zippopotam.us/IT/57100
Nel caso specifico di cui sopra ho fornito come paese IT (Italia) e come codice postale 57100 (Livorno), come confermato dal contenuto della risposta in JSON:
{"post code": "57100", "country": "Italy", "country abbreviation": "IT", "places": [{"place name": "Livorno", "longitude": "10.3167", "state": "Toscana", "state abbreviation": "TC", "latitude": "43.55"}]}
Con Google Apps Script, tramite la classe UrlFetchApp (in modo simile a come già utilizzato nell'articolo 'Creare un servizio Whois con una chiamata in GET in Google Apps Script') sono sufficienti pochissime righe di codice per poter recuperare il JSON risultante pronto per essere gestito:
function getGeolocByZip() {
var country = 'IT';
var zip = '57100';
var response = UrlFetchApp.fetch("http://api.zippopotam.us/" + country + "/" + zip, {muteHttpExceptions: true});
Logger.log(response);
}
Il risultato, contenuto nella variabile response e visualizzato nel log (Fig. 1), è quello anticipato poco sopra:
L'utilizzo di questo servizio può trovare una valida applicazione nella gestione di indirizzi fisici, presenti ad esempio in Spreadsheet, al fine di arricchirli con dettagli di geolocalizzazione.
La lista dei paesi supportati, insieme ad altre informazioni, è presente nella pagina ufficiale del servizio (ovvero la root dell'API): api.zippopotam.us.
ho provato il servizio in una mia web app però ho visto che con alcuni cap nel json ci sono molti risultati e non solo uno, ho trovato su un sito una funzione ma recupera solo il primo risultato. c'è il modo per avere una lista completa anche quando si richiamano in un ciclo diversi cap? grazie
Ciao Pietro,
durante i miei test su questa API avevo trovato anch'io risposte che per lo stesso CAP contenevano più di un risultato, uno che ricordo è Lucca, api.zippopotam.us/IT/55100:
Si tratta di frazioni, che hanno lo stesso codice di avviamento postale ma diverse informazioni di longitudine e latitudine (oltre ovviamente al nome della frazione).
Ti riporto di seguito un estratto di uno script che realizzai e che ho modificato leggermente per adattarlo alla tua esigenza, nel caso specifico viene effettuato un ciclo passando 3 CAP (quello di Livorno, quello di Pisa e quello di Lucca) e fornisce come output un array contenente il paese, il nome della città/frazione, la latitudine e la longitudine (ho lasciato nello script alcuni controlli, come quello della presenza del paese e del contenuto nella risposta):
Il risultato è un unico array di array con le informazioni normalizzate in termini di formato, ovvero sono contenute tutte le risposte relative all'unica riga per il CAP di Livorno, l'unica riga per il CAP di Pisa e tutte le righe per il CAP delle frazioni di Lucca:
Probabilmente nello script che avevi trovato non era presente il controllo sulla lunghezza del contenuto di 'places'.