HTTP pieprasījumi un JSON parsēšana Python valodā

Vēlos dinamiski veikt pieprasījumu Google Maps, izmantojot Google Virzienu API. Piemēram, šis pieprasījums aprēķina maršrutu no Čikāgas, IL uz Losandželosu, CA, izmantojot divus ceļa punktus Joplinā, MO un Oklahomaitijā, OK:

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

Tas atgriež rezultātu JSON formātā.

Kā es to varu izdarīt Python valodā? Es gribu nosūtīt šādu pieprasījumu, saņemt rezultātu un to analizēt.

Risinājums

Es iesaku izmantot lielisko pieprasījumi bibliotēku:

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

JSON atbildes saturs: http://docs.python-requests.org/en/latest/user/quickstart/#json-response-content

Komentāri (1)
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))
Komentāri (4)

Izmantojiet pieprasījumu bibliotēku, diezgan izdrukājiet rezultātus, lai varētu labāk atrast atslēgas/vērtības, ko vēlaties iegūt, un pēc tam izmantojiet ligzdotas for cilpas, lai analizētu datus. Šajā piemērā es soli pa solim iegūstu braukšanas norādījumus.

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']
Komentāri (2)