Requisito previo: formato JSON en Python
Google tiene un excelente servicio web que nos permite hacer uso de su gran base de datos de información geográfica. Aquí, vamos a trabajar con la API de Google Maps. En los viejos tiempos, esta API de Maps era gratuita y realizaba 2500 requests por día, pero ahora lo han hecho de modo que partes de ella están detrás de las claves API y comienzas a tener que usar OAuth y esas cosas. Podemos enviar una string de búsqueda geográfica como «Ann Arbor, MI» a su API de codificación geográfica y hacer que Google devuelva su mejor estimación de dónde en un mapa podemos encontrar nuestra string de búsqueda y nos informe sobre los puntos de referencia cercanos.
El servicio de geocodificación es gratuito pero tiene una tarifa limitada, por lo que no puede hacer un uso ilimitado de la API en una aplicación comercial. Pero si tiene algunos datos de encuestas en los que un usuario final ha ingresado una ubicación en un cuadro de entrada de formato libre, puede usar esta API para limpiar sus datos bastante bien.
Cuando utiliza una API gratuita como la API de codificación geográfica de Google, debe ser respetuoso en el uso de estos recursos. Si demasiadas personas abusan del servicio, Google podría cancelar o reducir significativamente su servicio gratuito.
Puede leer la documentación en línea de este servicio, pero es bastante simple e incluso puede probarlo usando un navegador escribiendo la siguiente URL en su navegador:
http://maps.googleapis.com/maps/api/geocode/json ?dirección=Ann+Arbor%2C+MI
Asegúrese de desenvolver la URL y eliminar los espacios de la URL antes de pegarla en su navegador.
La siguiente es una aplicación simple para solicitar al usuario una string de búsqueda, llamar a la API de codificación geográfica de Google y extraer información del JSON devuelto.
# Libraries used to grab the URL web stuff and import json import urllib.request, urllib.parse, urllib.error import json # Note that Google is increasingly requiring keys # for this API # service URL for Google Maps API serviceurl = 'http://maps.googleapis.com/maps/api/geocode/json?' while True: address = input('Enter location: ') if len(address) < 1: break # Concatenate the serviceurl and urllib.parse.urlencode # which give a dictonary of address equal and this bit # right here url = serviceurl + urllib.parse.urlencode( {'address': address}) print('Retrieving', url) # urlopen() to get a handle uh = urllib.request.urlopen(url) # Read the whole document in UTF-8 data = uh.read().decode() print('Retrieved', len(data), 'characters') # Load internal strings try: js = json.loads(data) except: js = None # If false then quit and print data if not js or 'status' not in js or js['status'] != 'OK': print('==== Failure To Retrieve ====') print(data) continue # Call json dump and print it with an indent of four print(json.dumps(js, indent = 4)) # Parsing and printing lat = js["results"][0]["geometry"]["location"]["lat"] lng = js["results"][0]["geometry"]["location"]["lng"] print('lat', lat, 'lng', lng) location = js['results'][0]['formatted_address'] print(location)
Producción :
Enter location: Dehradun Retrieving http://maps.googleapis.com/maps/api/geocode/json?address=dehradun Retrieved 1743 characters { "results": [ { "address_components": [ { "long_name": "Dehradun", "short_name": "Dehradun", "types": [ "locality", "political" ] }, { "long_name": "Dehradun", "short_name": "Dehradun", "types": [ "administrative_area_level_2", "political" ] }, { "long_name": "Uttarakhand", "short_name": "UK", "types": [ "administrative_area_level_1", "political" ] }, { "long_name": "India", "short_name": "IN", "types": [ "country", "political" ] } ], "formatted_address": "Dehradun, Uttarakhand, India", "geometry": { "bounds": { "northeast": { "lat": 30.4041936, "lng": 78.1089305 }, "southwest": { "lat": 30.2466633, "lng": 77.92533879999999 } }, "location": { "lat": 30.3164945, "lng": 78.03219179999999 }, "location_type": "APPROXIMATE", "viewport": { "northeast": { "lat": 30.4041936, "lng": 78.1089305 }, "southwest": { "lat": 30.2466633, "lng": 77.92533879999999 } } }, "place_id": "ChIJr4jIVsMpCTkRmYdRMsBiNUw", "types": [ "locality", "political" ] } ], "status": "OK" } lat 30.3164945 lng 78.03219179999999 Dehradun, Uttarakhand, India
El programa toma la string de búsqueda y construye una URL con la string de búsqueda como un parámetro codificado correctamente y luego usa urllib para recuperar el texto de la API de geocodificación de Google. A diferencia de una página web fija, los datos que obtenemos dependen de los parámetros que enviamos y de los datos geográficos almacenados en los servidores de Google.
Una vez que recuperamos los datos JSON, los analizamos con la biblioteca json y hacemos algunas comprobaciones para asegurarnos de que recibimos buenos datos, luego extraemos la información que estamos buscando.
Publicación traducida automáticamente
Artículo escrito por dheerajsharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA