こんにちは、ヒガシです。
今回は、以下の画像のようにGoogleMapを使ってルート案内したときに表示される通行指示をチェックポイントごとに全部取得するということをやってみました。
どんな作業を行ったかを記録しておきます。
まずはルートAPIから情報を得る
まずは出発地点、目的地、出発時刻をGoogleMapAPIのルート案内APIに入力します。
def get_root(origin, destination, dep_time):
endpoint = 'https://maps.googleapis.com/maps/api/directions/json?'
dtime = datetime.datetime.strptime(dep_time, '%Y/%m/%d %H:%M')
unix_time = int(dtime.timestamp())
nav_request = 'language=ja&origin={}&destination={}&departure_time={}&key={}'.format(origin,destination,unix_time,api_key)
nav_request = urllib.parse.quote_plus(nav_request, safe='=&')
request = endpoint + nav_request
response = urllib.request.urlopen(request).read()
directions = json.loads(response)
return directions
origin = '東京駅'
destination = '品川駅'
dep_time = '2024/5/26 12:00'
directions = get_root(origin, destination, dep_time)
※api_keyはご自身のものを入力してください。
これで変数directionsの中に、冒頭にご紹介したような通行指示を含んだ膨大な情報が格納されていることになります。
各チェックポイントごとの通行指示を表示する
ここまでくればあとはゴリゴリ情報を抜き出してくるだけです。
num_trip_data = len(directions['routes'][0]['legs'][0]['steps'])
for i in range(num_trip_data):
step = directions['routes'][0]['legs'][0]['steps'][i]
instructions = str(step['html_instructions'])
print(instructions)
こいつを実行すると以下の結果が出力されました。
なにやらHTMLタグが紛れ込んでますね。
HTMLタグを削除する
見にくいので<>を削除する関数もつくっておきましょう。
def remove_instructions_html(instructions):
while instructions.find('<')!=-1:
start_pos = instructions.find('<') end_pos = instructions.find('>')
instructions = instructions[:start_pos] + instructions[end_pos + 1:]
return instructions
<>を削除する関数をかませたあとの結果を表示してみます。
num_trip_data = len(directions['routes'][0]['legs'][0]['steps'])
for i in range(num_trip_data):
step = directions['routes'][0]['legs'][0]['steps'][i]
instructions = str(step['html_instructions'])
instructions = remove_instructions_html(instructions)
print(instructions)
完璧!!
おわりに
というわけで今回はGoogleMapAPIを使って、ルート案内の指示を全部取得するということをやってみました。
他にもいろいろな情報を取得できるのでぜひ遊んでみてください。
それではまた!
コメント