PHPで郵便番号から住所を求める

(1/1)
PHPで郵便番号から住所を求める
ZIP SEARCH API SERVICE 「JIS X0401」対応版」(IW3 PROJECT)を用い、郵便番号から住所を表示するPHPプログラムを作ってみることにする。
(2022年2月11日)郵便番号にハイフンが入っていても変換するようにした(郵便番号の数字以外は無視するようにした)。
(2022年1月15日)PHP8対応,リファラ・チェック改良

目次

サンプル・プログラム

圧縮ファイルの内容
zip2address.phpサンプル・プログラム本体

ZIP SEARCH API SERVICE 「JIS X0401」対応版

ZIP SEARCH API SERVICE 「JIS X0401」対応版」は、入力パラメータ(IN)として GETを、出力結果(OUT)がJSON、JSONP形式で戻るというAPIである。
利用にあたっては、このWebAPIの 利用規約を遵守すること。
WebAPIのURL
URL
https://api.thni.net/jzip/X0401/JSONP/{1}/{2}.js

入力パラメータ
フィールド名 要否 内  容
1 必須 郵便番号(上3桁)
2 必須 郵便番号(下4桁)
応答データ構造(json) state 都道府県コード stateName 都道府県名 city 市区町村名 street 町域名

サンプル・プログラムの解説

0132: /**
0133:  * 郵便番号→住所変換WebAPI URLを求める
0134:  * @param   string $zip 郵便番号(7桁数字,ハイフン無し)
0135:  * @return  string WebAPI URL / FALSE
0136: */
0137: function getURL_zip2address($zip) {
0138:     $res = preg_match('/(\d{3})\-?(\d{4})/', $zip$arr);
0139:     return ($res == 0) ? FALSE : ("https://api.thni.net/jzip/X0401/JSON/{$arr[1]}/{$arr[2]}.js");
0140: }

0142: /**
0143:  * 郵便番号→住所変換
0144:  * @param   string $zip 郵便番号(7桁数字,ハイフン無し)
0145:  * @param   array  $item情報を格納する配列
0146:  * @return  bool TRUE/FALSE
0147: */
0148: function get_zip2address($zip, &$item) {
0149:     //郵便番号から数字以外を除く
0150:     $zip = preg_replace('/[^0-9]/ui', '', $zip);
0151: 
0152:     //リクエストURL取得
0153:     $url = getURL_zip2address($zip);
0154:     if ($url == FALSE)  return FALSE;
0155: 
0156:     //変換実行
0157:     $json = @file_get_contents($url);
0158:     if ($json == FALSEreturn FALSE;
0159: 
0160:     $arr = json_decode($json);
0161:     if (! isset($arr->state)) return FALSE;
0162: 
0163:     $item['state']  = (string)$arr->stateName;
0164:     $item['city']   = (string)$arr->city;
0165:     $item['street'] = (string)$arr->street;
0166: 
0167:     return TRUE;
0168: }

ユーザー関数 getURL_zip2address は郵便番号の上3桁と下4桁を分離し、WebAPIのURLを返す。郵便番号は、3桁目と4桁目の間にハイフン '-' があっても無くても処理するようにしてある。分離できない場合にはエラーとして FALSE を返す。

ユーザー関数 get_zip2address はWebAPIを呼び出し、都道府県名、市区町村名、町域名を配列変数 $item に代入する。処理エラーの場合は FALSE を返す。

これ以外の部分は、いままで紹介したプログラムと同じである。
都道府県名、市区町村名、町域名はテキストボックスにしてあるので、このプログラムはそのままユーザー住所登録フォームに応用できるだろう。

質疑応答

【質問】
はじめまして岩渕と申します。
【PHPで郵便番号から住所を求める】についてですが、グーグルでは正常動作が確認され、住所表示されますが
IE(ver11)では表示されないのですがこれは仕様なのでしょうか?
※表示されない=ポップアップが表示され「ファイルを開く」「保存」「キャンセル」の要求をされます。
※VBAでIEを起動、その後スクレイピングで住所を設定することを考えてました。
※正常動作したURL
https://api.thni.net/jzip/X0401/JSONP/028/3318.js
PHPで郵便番号から住所を求める
【回答】
上図の赤い矢印のURLを指してのご質問でしょうか。
このURLは、PHPプログラムがどのWebAPIを呼び出したか確認するためのデバッグ用です。ハイパーリンクのためのものではありません。ご了承ください。
(この項おわり)
header