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

(1/1)
PHPで住所から郵便番号を求める
前回につづき「ZIP SEARCH API SERVICE 「JIS X0401」対応版」(IW3 PROJECT)を用い、住所から郵便番号を表示するPHPプログラムを作ってみることにする。
(2022年1月15日)PHP8対応,リファラ・チェック改良

目次

サンプル・プログラム

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

ZIP SEARCH API SERVICE 「JIS X0401」対応版

ZIP SEARCH API SERVICE 「JIS X0401」対応版」は、入力パラメータ(IN)として GETを、出力結果(OUT)がJSON形式で戻るというAPIである。
利用にあたっては、このWebAPIの 利用規約を遵守すること。
WebAPI:都道府県リスト取得
URL
http://api.thni.net/jzip/X0401/JSONP/{1}/{2}.js
応答データ構造(json) 繰り返し name 都道府県名 kana フリガナ
WebAPI:市町村リスト取得
URL
https://api.thni.net/jzip/X0401/JSONP/J/{1}/city_index.js

入力パラメータ
フィールド名 要否 内  容
1 必須 都道府県名。WebAPI:都道府県リスト取得で取得した文字列。
応答データ構造(json) 繰り返し name 市町村名 kana フリガナ
WebAPI:町域リスト取得
URL
https://api.thni.net/jzip/X0401/JSONP/J/{1}/{2}/street_index.js

入力パラメータ
フィールド名 要否 内  容
1 必須 都道府県名。WebAPI:都道府県リスト取得で取得した文字列。
2 必須 市町村名。WebAPI:市町村リスト取得で取得した文字列。
応答データ構造(json) 繰り返し name 町域名 kana フリガナ
WebAPI:郵便番号取得
URL
https://api.thni.net/jzip/X0401/JSONP/J/{1}/{2}/{3}.js

入力パラメータ
フィールド名 要否 内  容
1 必須 都道府県名。WebAPI:都道府県リスト取得で取得した文字列。
2 必須 市町村名。WebAPI:市町村リスト取得で取得した文字列。
3 必須 町域名。WebAPI:町域リスト取得で取得した文字列。
応答データ構造(json) zipcode 郵便番号 state 都道府県 city 市町村 street 町域

解説:郵便番号取得

 234: /**
 235:  * 都道府県から郵便番号を求める WebAPI URL
 236:  * @param   string $state  都道府県
 237:  * @param   string $city   市町村
 238:  * @param   string $street 町域
 239:  * @return  string WebAPI URL / FALSE
 240: */
 241: function getURL_zip($state, $city, $street) {
 242:     $state  = urlencode($state);
 243:     $city   = urlencode($city);
 244:     $street = urlencode($street);
 245:     return "http://api.thni.net/jzip/X0401/JSON/J/{$state}/{$city}/{$street}.js";
 246: }

 248: /**
 249:  * 都道府県から郵便番号を求める
 250:  * @param   string $state 都道府県
 251:  * @param   string $city  市町村
 252:  * @param   string $street 町域
 253:  * @return  string 郵便番号
 254: */
 255: function get_zip($state, $city, $street) {
 256:     $url = getURL_zip($state, $city, $street);      //リクエストURL
 257:     if ($url == FALSE)  return FALSE;
 258: 
 259:     $json = @file_get_contents($url);
 260:     if ($json == FALSEreturn FALSE;
 261: 
 262:     $arr = json_decode($json);
 263:     return isset($arr->zipcode?  (string)$arr->zipcode : FALSE;
 264: }

ユーザー関数 getURL_zip は、都道府県、市町村、町域から郵便番号を求めるWebAPIのURLを返す。

ユーザー関数 get_zip はWebAPIを呼び出し、都道府県、市町村、町域から郵便番号を求める。処理エラーの場合は FALSE を返す。

これ以外の部分は、いままで紹介したプログラムと同じである。

解説:JavaScript制御

 135: /**
 136:  * 都道府県リストを求める WebAPI URL
 137:  * @return  string WebAPI URL / FALSE
 138: */
 139: function getURL_state() {
 140:     return 'http://api.thni.net/jzip/X0401/JSON/J/state_index.js';
 141: }

 143: /**
 144:  * 都道府県リストを求める
 145:  * @param   array  $items 情報を格納する配列
 146:  * @return  bool TRUE/FALSE
 147: */
 148: function get_state(&$items) {
 149:     $url = getURL_state();          //リクエストURL
 150:     if ($url == FALSE)  return FALSE;
 151: 
 152:     $json = @file_get_contents($url);
 153:     if ($json == FALSEreturn FALSE;
 154: 
 155:     $arr = json_decode($json);
 156:     if (count($arr< 1return FALSE;
 157: 
 158:     foreach ($arr as $val) {
 159:         $items[] = (string)$val->name;
 160:     }
 161: 
 162:     return TRUE;
 163: }

 165: /**
 166:  * 都道府県から市町村リストを求める WebAPI URL
 167:  * @param   string $state 都道府県
 168:  * @return  string WebAPI URL / FALSE
 169: */
 170: function getURL_city($state) {
 171:     $state = urlencode($state);
 172:     return "http://api.thni.net/jzip/X0401/JSON/J/{$state}/city_index.js";
 173: }

 175: /**
 176:  * 都道府県から市町村リストを求める
 177:  * @param   string $state 都道府県
 178:  * @param   array  $items 情報を格納する配列
 179:  * @return  bool TRUE/FALSE
 180: */
 181: function get_city($state, &$items) {
 182:     $url = getURL_city($state);         //リクエストURL
 183:     if ($url == FALSE)  return FALSE;
 184: 
 185:     $json = @file_get_contents($url);
 186:     if ($json == FALSEreturn FALSE;
 187: 
 188:     $arr = json_decode($json);
 189:     if (count($arr< 1return FALSE;
 190: 
 191:     foreach ($arr as $val) {
 192:         $items[] = (string)$val->name;
 193:     }
 194: 
 195:     return TRUE;
 196: }

 198: /**
 199:  * 都道府県から町域リストを求める WebAPI URL
 200:  * @param   string $state 都道府県
 201:  * @param   string $city  市町村
 202:  * @return  string WebAPI URL / FALSE
 203: */
 204: function getURL_street($state, $city) {
 205:     $state = urlencode($state);
 206:     $city  = urlencode($city);
 207:     return "http://api.thni.net/jzip/X0401/JSON/J/{$state}/{$city}/street_index.js";
 208: }

 210: /**
 211:  * 都道府県から町域リストを求める
 212:  * @param   string $state 都道府県
 213:  * @param   string $city  市町村
 214:  * @param   array  $items 情報を格納する配列
 215:  * @return  bool TRUE/FALSE
 216: */
 217: function get_street($state, $city, &$items) {
 218:     $url = getURL_street($state, $city);            //リクエストURL
 219:     if ($url == FALSE)  return FALSE;
 220: 
 221:     $json = @file_get_contents($url);
 222:     if ($json == FALSEreturn FALSE;
 223: 
 224:     $arr = json_decode($json);
 225:     if (count($arr< 1return FALSE;
 226: 
 227:     foreach ($arr as $val) {
 228:         $items[] = (string)$val->name;
 229:     }
 230: 
 231:     return TRUE;
 232: }

 402: //検索実行
 403: $url = getURL_state();
 404: $res = get_state($items['state']);
 405: if (! $res) {
 406:     $message = 'error > 都道府県が検索できません.';
 407: else if ($state !'') {
 408:     $url = getURL_city($state);
 409:     $res = get_city($state, $items['city']);
 410:     if (! $res) {
 411:         $message = 'error > この都道府県では検索できません.';
 412:     } else if ($city !'') {
 413:         $url = getURL_street($state, $city);
 414:         $res = get_street($state, $city, $items['street']);
 415:         if (! $res) {
 416:             $message = 'error > この市町村では検索できません.';
 417:         } else if ($street !'') {
 418:             $url = getURL_zip($state, $city, $street);
 419:             $zip = get_zip($state, $city, $street);
 420:             if (! $res) {
 421:                 $message = 'error > 郵便番号が検索できません.';
 422:             }
 423:         }
 424:     }
 425: }

都道府県、市町村、町域の3つはプルダウンにし、各々を選ぶ都度、WebAPIをコールして右側のリストを更新していくようにする。プルダウンが変化する都度、JavaScriptでPHPスクリプトを呼び出すようにしてある。
都道府県、市町村、町域の3つが選択されたら、郵便番号を取得する。

参考サイト

(この項おわり)
header