文書更新:2019年02月24日(日) 午後12時05分00秒

Home > その他 > 郵便番号 > php の利用 > zip.cgis.biz の API を使用( 172 )

はじめに

  1. zip.cgis.bizのAPIを使用して作ってみました。
  2. クラスを利用してプログラムしてあります。

郵便番号から住所を検索

郵便番号:  ※ハイフォンなしで入力してください。
都道府県:
市区町村:
町域:

classの本体

<?php
class ZipCode{
	private $pref;
	private $city;
	private $town;
	private $pref_kana;
	private $city_kana;
	private $town_kana;
	private $office;
	private $office_kana;
	private $zip_code;	//ハイフォン付きの書式
	private $status;
	private $error_msg;
	function __construct($zip){	//ハイフォンなしで引数をわたす
		if(empty($zip)){
			$this->status=false;
			$this->error_msg="郵便番号が入力されていません。";
		}else if(preg_match("/^\d{7}$/",$zip)){
			$this->zip_code=preg_replace("/^([0-9]{3})([0-9]{4})$/","$1-$2",$zip);
			$this->status=true;
		}else if(preg_match("/^([0-9]{3})-([0-9]{4})$/",$zip)){
			$this->zip_code=$zip;
			$this->status=true;
		}else{
			$this->status=false;
			$this->error_msg="郵便番号 [ {$zip} ] が正しくありません。";
		}
		if($this->status){	//郵便番号の書式が正しい時
			$office="";
			$office_kana="";
			$code=str_replace("-","",$this->zip_code);
			$data = simplexml_load_file("http://zip.cgis.biz/xml/zip.php?zn={$code}");	//zip.cgis.biz から情報を取得
			if($data->result[8]->attributes()>0){	//該当する郵便番号が存在するとき
				$chld = $data->ADDRESS_value->children();
				foreach($chld as $key){
					if($key['state']!=''&&$key['state']!='none')	$this->pref=$key['state'];
					if($key['state_kana']!=''&&$key['state_kana']!='none')	$this->pref_kana=$key['state_kana'];
					if($key['city']!=''&&$key['city']!='none')		$this->city=$key['city'];
					if($key['city_kana']!=''&&$key['city_kana']!='none')	$this->city_kana=$key['city_kana'];
					if($key['address']!=''&&$key['address']!='none')	$this->town=$key['address'];
					if($key['address_kana']!=''&&$key['address_kana']!='none')$this->town_kana=$key['address_kana'];
					if($key['company']!=''&&$key['company']!='none')	$this->office=$key['company'];
					if($key['company_kana']!=''&&$key['company_kana']!='none')$this->office_kana=$key['company_kana'];
				}
			}else{	//該当する郵便番号が存在しないとき
				$this->status=false;
				$this->error_msg="該当する郵便番号が存在しません。";
			}
		}
	}
	function __destruct(){
	}
	function GetPref(){
		return $this->pref;
	}
	function GetPrefKana(){
		return $this->pref_kana;
	}
	function GetCity(){
		return $this->city;
	}
	function GetCityKana(){
		return $this->city_kana;
	}
	function GetTown(){
		return $this->town;
	}
	function GetTownKana(){
		return $this->town_kana;
	}
	function GetOffice(){
		return $this->office;
	}
	function GetOfficeKana(){
		return $this->office_kana;
	}
	function GetListAll(){
		return array($this->pref,$this->pref_kana,$this->city,$this->city_kana,$this->town,$this->town_kana);
	}
	function GetList(){
		return array($this->pref,$this->city,$this->town);
	}
	function GetListKana(){
		return array($this->pref_kana,$this->city_kana,$this->town_kana);
	}
	function GetStatus(){
		return $this->status;
	}
	function GetZipCode(){
		return $this->zip_code;
	}
	function GetErrMsg(){
		return $this->error_msg;
	}
}
?>

htmlの表示部

<?php
$err="";
if(isset($_POST["search"])){	//住所検索ボタンが押された時
	$zip=$_POST["zip"];
	$obj=new ZipCode($zip);
	if(!$obj->GetStatus()){
		$err="{$obj->GetErrMsg()}";
	}
	list($pref,$pref_kana,$city,$city_kana,$town,$town_kana)=$obj->GetListAll();
	$office=$obj->GetOffice();
	$office_kana=$obj->GetOfficeKana();
}else{
	$zip="";
	$pref="";
	$pref_kana="";
	$city="";
	$city_kana="";
	$town="";
	$town_kana="";
	$office="";
	$office_kana="";
}
$ret=<<<DOE
	<div style="text-align; left;padding-left:10px;">
	<form method="post" action="{$_SERVER["REQUEST_URI"]}">
	<table>
	<tr><th>郵便番号:</th><td><input type="text" name="zip" size="7" maxlength="7" value="{$zip}"><input type="submit" name="search" value="住所検索"> ※ハイフォンなしで入力してください。{$err}</td></tr>
	<tr><th>都道府県:</th><td><input type="text" name="pref" size="8" value="{$pref}"><input type="text" name="pref_kana" size="15" value="{$pref_kana}"></td></tr>
	<tr><th>市区町村:</th><td><input type="text" name="city" size="30" value="{$city}"><input type="text" name="city_kana" size="40" value="{$city_kana}"></td></tr>
	<tr><th>町域:</th><td><input type="text" name="town" size="30" value="{$town}"><input type="text" name="town_kana" size="40" value="{$town_kana}"></td></tr>
DOE;
	if($office!="") $ret.='<tr><th>企業名:</th><td><input type="text" name="town" size="30" value="'.$office.'"><input type="text" name="town_kana" size="40" value="'.$office_kana.'"></td></tr>';
	$ret.=<<<DOE
	</table>
	</form>
	</div>
DOE;
	echo $ret;
?>