HTTP-запросы и разбор JSON в Python

Я хочу динамически запрашивать Карты Google с помощью API Google Directions. В качестве примера, этот запрос рассчитывает маршрут из Чикаго, штат Иллинойс в Лос-Анджелес, Калифорния через две точки в Джоплин, Миссури и Оклахома-Сити, ОК:

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

Он возвращает результат в формате JSON.

Как я могу сделать это в Python? Я хочу отправить такой запрос, получить результат и проанализировать его.

Ответ 1

Я рекомендую использовать awesome requests:

import json, 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 = json.loads(resp.text)

Ответ 2

requests Модуль Python заботится как о получении данных JSON, так и о его расшифровке благодаря встроенному JSON-декодеру. Ниже приведен пример из документации модуля:

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

Поэтому нет смысла использовать отдельный модуль для декодирования JSON.

Ответ 3

requests имеет встроенный метод .json()

import requests
requests.get(url).json()

Ответ 4

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))

Ответ 5

Используйте библиотеку запросов, довольно печатайте результаты, чтобы лучше находить ключи/значения, которые вы хотите извлечь, а затем используйте вложенные для циклов для анализа данных. В этом примере я извлекаю пошаговые инструкции.

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']