郵便番号検索機能をWEBサービスで提供してくれています。
http://zipcloud.ibsnet.co.jp/doc/api
登録などは一切不要みたいです。 getで、http://zipcloud.ibsnet.co.jp/api/search?zipcode=1540017のように郵便番号を与えると、jsonで返ってきます。
{ "message": null, "results": [ { "address1": "東京都", "address2": "世田谷区", "address3": "世田谷", "kana1": "トウキョウト", "kana2": "セタガヤク", "kana3": "セタガヤ", "prefcode": "13", "zipcode": "1540017" } ], "status": 200 }
不正な郵便番号を与えるとエラーが返ってきます。
http://zipcloud.ibsnet.co.jp/api/search?zipcode=15400171
{ "message": "パラメータ「郵便番号」の桁数が不正です。", "results": null, "status": 400 }
桁数が正しいが存在しない郵便番号を与えると、エラーではないがnullが返ってきます。
http://zipcloud.ibsnet.co.jp/api/search?zipcode=1540099
{ "message": null, "results": null, "status": 200 }
また、郵便番号にハイフンがあってもきちんと対応してくれている。 http://zipcloud.ibsnet.co.jp/api/search?zipcode=154-0017
{ "message": null, "results": [ { "address1": "東京都", "address2": "世田谷区", "address3": "世田谷", "kana1": "トウキョウト", "kana2": "セタガヤク", "kana3": "セタガヤ", "prefcode": "13", "zipcode": "1540017" } ], "status": 200 }
あら、でもAjaxでgetで取得しようとしたらエラーになる。クロスドメイン関係のエラーなので、Ajaxのアクセスできないのかもしれない。仕方ないのでPHPでつくってみる。
今fuelphp使っている。
/** * zip cloudで郵便番号から住所情報を取得する関数(Ajax用) */ public function get_address($zip_code = null){ if(!$zip_code) return $this->response(null); $context = stream_context_create(array( 'http' => array('ignore_errors' => true) )); header("Content-type:text/html;charset=UTF-8"); $address = file_get_contents('http://zipcloud.ibsnet.co.jp/api/search?zipcode=' . $zip_code, false, $context); $address_arr = json_decode($address, true); if($address_arr['status'] != 200 || empty($address_arr['results'])) return $this->response(null); //カナを全角にする for($i = 1; $i < 4; $i++){ $address_arr['results'][0]['kana' . $i] = mb_convert_kana($address_arr['results'][0]['kana' . $i], 'KV', 'UTF-8'); } //都道府県をコードに変換する $address_arr['results'][0]['address1'] = Model_Building::get_prefecture_code_from_name($address_arr['results'][0]['address1']); $this->response(json_encode($address_arr['results'][0])); }
これにjavascriptでAjaxでアクセスする。
function zipcloud(base_url, zip_code, class_name){ if(!base_url || !zip_code) return; if(!class_name) class_name = ''; $.ajax({ type: "GET", url: base_url + 'hoge/' + zip_code, dataType: "json", success: function(address){ address = JSON.parse(address); $('.zipcloud_pref_code' + class_name).val(address['address1']); $('.zipcloud_city' + class_name).val(address['address2']); $('.zipcloud_address' + class_name).val(address['address3']); $('.zipcloud_city_kana' + class_name).val(address['kana2']); $('.zipcloud_address_kana' + class_name).val(address['kana3']); } }); }
これに郵便番号が変わったらonchangeでアクセスする。