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

郵便番号から住所検索を行う

今回はWebAPIを使用して郵便番号から住所検索を行ってみたいと思います。
そもそもWebAPIとはどの様な機能でしょうか。

WebAPIとは
コンピュータプログラムの提供する機能を外部の別のプログラムから呼び出して利用するための手順・規約(API:Application Programming Interface)の類型の一つで、HTTPなどWebの技術を用いて構築されたもの

やっぱり難しい、、、

下記の記事にて詳しく記載されていました!
とても分かり易い。
Qiita記事

今回は郵便番号から住所を検索表示してくれるAPIを使用してみたいと思います。
こちらのページのAPIですね!

下記実行例の様なプログラミングをします。

例えば「7830060」という郵便番号を検索したら
・北海道
・美唄市
・上美唄町協和
が返ってくるような内容ですね!

早速ですが、今回のソースコードです。

それでは簡単な解説です。
・最初にAPIを叩くURLを設定
・検索する郵便番号は「0791135」
・format関数を用いてURLに郵便番号を追加

# WebAPIのベースURL
url = "https://zipcloud.ibsnet.co.jp/api/search"

# 今回使用する郵便番号
zipcode = "0791135"

# ベースURLに郵便番号を追加する
url = url + "?zipcode={0}".format(zipcode)

この状態でurlには下記が格納されるようになりました。

Getを行うと住所に関連するレスが返ってきます。
・API(URL)をGETする
・JSONフォーマットを辞書型にする
・辞書型をprintしてみる

# APIからGETする
res = requests.get(url)

# JSONフォーマットの状態なので、辞書型に変換する
response = json.loads(res.text)

# 辞書型の状態で取り出した場合
address1 = response["results"][0]["address1"]
address2 = response["results"][0]["address2"]
address3 = response["results"][0]["address3"]
print("address1=" + address1)
print("address2=" + address2)
print("address3=" + address3)

printの結果が下記になります。

ちゃんと住所が取得出来ていますね。
ちなみにデバッグをしてみると、辞書型の詳細が分かります。

・response/results/0/addres1
・response/results/0/addres2
・response/results/0/addres3
となっているのでそれぞれの住所が取り出せています。

しかしこの状態では扱いづらいので
変数に格納して出力しましょう!

# 取り出しづらいので、resultsのみ変数に格納する
address123 = response["results"][0]

# 住所の1,2,3を表示させる
print(address123["address1"] + address123["address2"] + address123["address3"])</code></pre>

変数「address123」には「response[“results”][0]」として、要素0の位置までの値が格納されています。
なので最後は辞書型でaddress123[“address1”] といった形で住所を取り出せるのですね!
最後のprint文を行うと以下の結果が出力されます。

北海道赤平市錦町

郵便番号を変更して実行すると
郵便番号に対応した住所が検索されるようになります!

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