Solicitudes HTTP y análisis JSON en Python

Quiero consultar dinámicamente Google Maps a través de la API de Google Directions. Como ejemplo, esta solicitud calcula la ruta desde Chicago, IL a Los Angeles, CA a través de dos puntos de referencia en Joplin, MO y Oklahoma City, OK:

http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false

Devuelve un resultado en el formato JSON .

¿Cómo puedo hacer esto en Python? Quiero enviar una solicitud de este tipo, recibir el resultado y analizarlo.

Recomiendo usar la biblioteca de peticiones impresionantes:

import requests url = 'http://maps.googleapis.com/maps/api/directions/json' params = dict( origin='Chicago,IL', destination='Los+Angeles,CA', waypoints='Joplin,MO|Oklahoma+City,OK', sensor='false' ) resp = requests.get(url=url, params=params) data = resp.json() # Check the JSON Response Content documentation below 

Contenido de respuesta JSON: http://docs.python-requests.org/en/latest/user/quickstart/#json-response-content

El módulo Python de requests se encarga de recuperar los datos JSON y decodificarlos, debido a su decodificador JSON integrado. Aquí hay un ejemplo tomado de la documentación del módulo :

 >>> import requests >>> r = requests.get('https://github.com/timeline.json') >>> r.json() [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/... 

Por lo tanto, no es necesario tener que usar algún módulo separado para decodificar JSON.

requests ha incorporado el método .json()

 import requests requests.get(url).json() 
 import urllib import json url = 'http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false' result = json.load(urllib.urlopen(url)) 

Use la biblioteca de solicitudes, imprima bastante los resultados para que pueda ubicar mejor las claves / valores que desea extraer, y luego use los bucles nesteds para analizar los datos. En el ejemplo extraigo paso a paso las indicaciones de conducción.

 import json, requests, pprint url = 'http://maps.googleapis.com/maps/api/directions/json?' params = dict( origin='Chicago,IL', destination='Los+Angeles,CA', waypoints='Joplin,MO|Oklahoma+City,OK', sensor='false' ) data = requests.get(url=url, params=params) binary = data.content output = json.loads(binary) # test to see if the request was valid #print output['status'] # output all of the results #pprint.pprint(output) # step-by-step directions for route in output['routes']: for leg in route['legs']: for step in leg['steps']: print step['html_instructions'] 

Prueba esto:

 import requests import json # Goole Maps API. link = 'http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false' # Request data from link as 'str' data = requests.get(link).text # convert 'str' to Json data = json.loads(data) # Now you can access Json for i in data['routes'][0]['legs'][0]['steps']: lattitude = i['start_location']['lat'] longitude = i['start_location']['lng'] print('{}, {}'.format(lattitude, longitude))