Pocket
LINEで送る

郵便番号検索機能を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でアクセスする。

Pocket
LINEで送る

カテゴリー: プログラミング

コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。