Permintaan HTTP dan parsing JSON di Python

Saya ingin secara dinamis query Google Maps melalui Google Arah API. Sebagai contoh, permintaan ini menghitung rute dari Chicago ke Los Angeles, CA melalui dua titik arah di Joplin, MISSOURI dan 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

Ia mengembalikan hasil dalam format JSON]1.

Bagaimana saya bisa melakukan ini di Python? Saya ingin mengirim permintaan tersebut, menerima hasilnya dan mengurai.

Larutan

Saya sarankan menggunakan yang mengagumkan permintaan perpustakaan:

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

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

Komentar (1)

The permintaan modul Python mengurus kedua mengambil data JSON dan decoding itu, karena builtin JSON decoder. Berikut adalah contoh yang diambil dari modul's dokumentasi:

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

Jadi tidak ada keharusan untuk menggunakan beberapa modul terpisah untuk decoding JSON.

Komentar (8)

permintaan memiliki built-in .json() metode

import requests
requests.get(url).json()
Komentar (0)
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))
Komentar (4)

Gunakan permintaan perpustakaan, cukup mencetak hasil sehingga anda dapat lebih baik mencari kunci/nilai yang ingin anda ekstrak, dan kemudian menggunakan nested loop untuk mengurai data. Dalam contoh saya mengambil langkah demi langkah petunjuk arah mengemudi.

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']
Komentar (2)

Coba ini:

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))
Komentar (1)