【WebAPI】キーワードから緯度と経度と郵便番号を取得

キーワードから緯度と経度と郵便番号を取得

前回は郵便番号から住所を取得しました!

【WebAPI】郵便番号から住所検索

2022年3月19日

今回は逆にキーワード検索を行って
[緯度],[経度],[郵便番号] の取得をしてみたいと思います!

今回HeartRailsGeoAPIというサイトの
WebAPIを使用してみたいと思います。

今回はキーワード検索から住所を。
という内容ですが、下記を取得することも可能そうです。
・郵便番号から最寄り駅を取得
・都道府県から市区町村名を取得

では本題です。
最初にユーザーへ検索するキーワードを入力してもらい
キーワードを元に検索を行いたいと思います。

完成版のソースコード
解説

最初にリクエストを投げる箇所です。

# キーワードによる住所検索 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とも組み合わせができそうですね!

以上です。
最後までお読み頂きありがとうございました!