キーワードから緯度と経度と郵便番号を取得
前回は郵便番号から住所を取得しました!
今回は逆にキーワード検索を行って
[緯度],[経度],[郵便番号]
の取得をしてみたいと思います!
今回HeartRailsGeoAPIというサイトの
WebAPIを使用してみたいと思います。
今回はキーワード検索から住所を。
という内容ですが、下記を取得することも可能そうです。
・郵便番号から最寄り駅を取得
・都道府県から市区町村名を取得
では本題です。
最初にユーザーへ検索するキーワードを入力してもらい
キーワードを元に検索を行いたいと思います。
完成版のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import requests import json # キーワードによる住所検索 API # JSON(P) 形式 url = 'http://geoapi.heartrails.com/api/json?method=suggest' # キーワードを入力する keyword = "&keyword=" + input('検索するキーワードを入力: ') # 部分一致で取得する matching = "&matching=like" # URLにキーワード + 部分一致 geoapi_url = url + keyword + matching # 作成したURLでリクエストを投げる geoapi = requests.get(geoapi_url) # JSONのフォーマットをPythonのオブジェクトに変換する geoapi_text = json.loads(geoapi.text) # いくつかヒットするので00番目だけを取得する geoapi_text_detail = geoapi_text["response"]["location"][00] # 市区町村 geoapi_text_detail_city = geoapi_text_detail["city"] # 緯度 geoapi_text_detail_y = geoapi_text_detail["y"] # 経度 geoapi_text_detail_x = geoapi_text_detail["x"] print("市区町村:" + geoapi_text_detail_city) print("緯度:" + geoapi_text_detail_y) print("経度:" + geoapi_text_detail_x) |
解説
最初にリクエストを投げる箇所です。
# キーワードによる住所検索 API # JSON(P) 形式 url = 'http://geoapi.heartrails.com/api/json?method=suggest'
URLはキーワードによる住所検索なので
json?のあとにmethod=suggest
を行います。
HeartRailsGeoAPIから
「method=suggest」を検索したら意味が分かるかと思います。
# キーワードを入力する keyword = "&keyword=" + input('検索するキーワードを入力: ')
キーワード検索については
「&keyword=」と「input()」を用いて
キーボード入力した値をkeyword変数に格納します。
# 部分一致で取得する matching = "&matching=like"
今回は部分一致としたいので「like」を指定です。
# URLにキーワード + 部分一致 geoapi_url = url + keyword + matching
元のURLにキーワードと指定方法を追加します。
# 作成したURLでリクエストを投げる geoapi = requests.get(geoapi_url)
完成したurlでリクエストを投げます。
レスが返ってくるので変数に格納します。
返ってきた「geoapi 」の中身は以下の状態になっています。
JSONフォーマットの状態です。
欲しいのは「text」の部分ですね!
という事で下記を行います。
# JSONのフォーマットをPythonのオブジェクトに変換する geoapi_text = json.loads(geoapi.text)
中身を見てみます。
良い感じに取得出来ていますね!
ただ複数の住所がヒットしているので今回は一番トップの「00」だけを取得します。
という事で下記!
# いくつかヒットするので00番目だけを取得する geoapi_text_detail = geoapi_text["response"]["location"][00]
中身を見ると
かなり良い感じです。
後は取得出来たデータをprintしてみて完成です!
# 市区町村 geoapi_text_detail_city = geoapi_text_detail["city"] # 緯度 geoapi_text_detail_y = geoapi_text_detail["y"] # 経度 geoapi_text_detail_x = geoapi_text_detail["x"] print("市区町村:" + geoapi_text_detail_city) print("緯度:" + geoapi_text_detail_y) print("経度:" + geoapi_text_detail_x)
実行すると下記になります。
「横浜市」で検索したパターン
取得出来た郵便番号や緯度、経度を使用して
別のWebAPIとも組み合わせができそうですね!
以上です。
最後までお読み頂きありがとうございました!