Google Directions APIを使用してGoogleマップを動的にクエリしたい。例として、このリクエストは、ミズーリ州ジョプリンとオクラホマシティーの2つのウェイポイントを経由して、イリノイ州シカゴからカリフォルニア州ロサンゼルスへのルートを計算します。
結果はJSON形式で返されます。
Pythonでこれを行うにはどうすればよいですか?このようなリクエストを送信し、結果を受信して解析したいと思います。
Google Directions APIを使用してGoogleマップを動的にクエリしたい。例として、このリクエストは、ミズーリ州ジョプリンとオクラホマシティーの2つのウェイポイントを経由して、イリノイ州シカゴからカリフォルニア州ロサンゼルスへのルートを計算します。
結果はJSON形式で返されます。
Pythonでこれを行うにはどうすればよいですか?このようなリクエストを送信し、結果を受信して解析したいと思います。
回答:
私は素晴らしいリクエストライブラリを使用することをお勧めします:
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の場合:
json.dumps(response.json(), indent=2)
インデント付きのダンプを使用できます。(jsonをインポートしてください)
json=params
代わりに行う必要があり、そうしないとparams=params
500エラーが発生します。