我想通过Google Directions API动态查询Google Maps。例如,此请求计算通过伊利诺伊州芝加哥市到密苏里州乔普林市和俄克拉荷马州俄克拉荷马市的两个航路点的路线:
它以JSON格式返回结果。
如何在Python中执行此操作?我想发送这样的请求,接收结果并解析它。
我想通过Google Directions API动态查询Google Maps。例如,此请求计算通过伊利诺伊州芝加哥市到密苏里州乔普林市和俄克拉荷马州俄克拉荷马市的两个航路点的路线:
它以JSON格式返回结果。
如何在Python中执行此操作?我想发送这样的请求,接收结果并解析它。
Answers:
我建议使用很棒的请求库:
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响应内容:https : //requests.readthedocs.io/en/master/user/quickstart/#json-response-content
的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。
json.load()
或json.loads()
代替,例如0.x,json
它是属性而不是函数。
python-requests
(或python3-requests
)软件包,因此您需要在其他地方安装而不是/usr/local
避免破坏那些软件包。另一方面,当可移植性/兼容性微不足道时,我认为这是值得的。
r.json()
(根据我的回答)中,您具有JSON解码的实际响应。您可以像普通的list
/ 一样访问它dict
。print r.json()
看看它的样子。或参考您提出要求的服务的API文档。
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))
urllib.request
在Python 3
使用请求库,漂亮地打印结果,以便您可以更好地定位要提取的键/值,然后使用嵌套的for循环来解析数据。在该示例中,我逐步提取了行车路线。
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']
import pprint
然后->pprint.pprint(step['html_instructions'])
试试这个:
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))
json=params
不是,params=params
否则会出现500错误。