Website made with rich jQuery,Ajax & Perl,PHP
ジオステーション
Sponsor
郵便番号辞書
[最終更新日:2011/01/29]
弊社のウェブサーバには最新の郵便番号データベースがあります。 このデータベースを公開して、自由にお使いいただけるようAPIをサンプルと共にご紹介します。 今回ご紹介するAPIは、7桁の郵便番号を指定して日本語の住所を返します。
アドレスは、
http://www.inetagency.net/getCity.cgi?zip=郵便番号[&en=文字コード]
zip 7桁の郵便番号(全角可能)
en UTF-8
EUC-JP
SHIFT_JIS
のいずれかの文字コードを指定します。
省略するとUTF-8で返します。

http://www.inetagency.net/getCity.cgi?zip=1350091
戻り値は、以下のようなxml形式で返されます。
  <Entry>
 	<Zip>135-0091</Zip>
 	<Pre>東京都</Pre>
 	<City>港区</City>
 	<Town>台場</Town>
 	<Address>東京都港区台場</Address>
 </Entry>
  
このように表示されても、あまり使い道がありませんのでPHPでインターフェースを作ってみましょう。
  <?php
 if ($_REQUEST[zip]) {
 	$xml = file_get_contents("http://www.inetagency.net/getCity.cgi?zip=$_REQUEST[zip]");
 	$xml = preg_replace("/\s/", "", $xml);
 	if (preg_match("/<Zip>(.+)<\/Zip><Pre>(.+)<\/Pre><City>(.+)<\/City><Town>(.+)<\/Town><Address>(.+)<\/Address>/", $xml, $m)) {
 		$Zip     = $m[1];
 		$Pre     = $m[2];
 		$City    = $m[3];
 		$Town    = $m[4];
 		$Address = $m[5];
 	}
 }
 header("Content-Type:text/html; charset=UTF-8");
 echo "$Zip,$Pre,$City,$Town,$Address";
 ?>
  
getcity.php?zip=1350091
これで表には出ないで住所の情報がすべて取得できました。 ただ、取得できても実際には使用できませんので、さらにAjaxを使って自動的にフォームに挿入してみましょう。 もちろん、このソケット通信も必要ですのでgetcity.phpとして保存して置いてください。
  function getcity(param, path) {
 	var Ajax_zipObject = false;
 	if (window.XMLHttpRequest) {
 		Ajax_zipObject = new XMLHttpRequest();
 	} else if (window.ActiveXObject) {
 		try {
 			Ajax_zipObject = new ActiveXObject("Msxml2.XMLHTTP");
 		} catch(e) {
 			Ajax_zipObject = new ActiveXObject("Microsoft.XMLHTTP");
 		}
 	}
 	var Parameter = param.split(",");
 	if (!param) {
 		Parameter[0] = 'mailform';
 		Parameter[1] = 'zip';
 		Parameter[2] = 'pre';
 		Parameter[3] = 'city';
 		Parameter[4] = 'town';
 	}
 	var url = '';
 	var zip = document.getElementById(Parameter[1]).value;
 	if (!zip) {
 		alert('Please enter postal code.');
 		document.getElementById(Parameter[1]).focus();
 		return;
 	}
 	url = path + 'getcity.php?zip='+zip;
 	var myDate = new Date;
 	url += '&t='+myDate.getTime();
 	if (!Ajax_zipObject) return;
 	Ajax_zipObject.open('GET', url);
 	Ajax_zipObject.send(null);
 	Ajax_zipObject.onreadystatechange=function() {
 		if (Ajax_zipObject.readyState==4
 			&& Ajax_zipObject.status==200) {
 			var Address = Ajax_zipObject.responseText.split(",");
 			with(document) {
 				getElementById(Parameter[1]).value=Address[0];
 				getElementById(Parameter[2]).value=Address[1];
 				getElementById(Parameter[3]).value=Address[2];
 				getElementById(Parameter[4]).value=Address[3];
 			}
 		}
 	}
 }
  
こちらが、getcity.phpがソケット通信で弊社データベースから取得した住所の情報をAjaxで実際にフォームに挿入するjavascriptです。 このスクリプトをgetcity.jsとして保存して完成です。

それでは実際の使い方を見てみましょう。

都道府県: 市区町村: 町域以下:
いかがですか、別ウィンドウが開くことも、ページがリロードされることも無く全ての住所項目が挿入されましたね。 このサンプルは以下のようになっています。
  <script type="text/javascript" src="/getcity.js"></script>
 <form action="javascript:void(0)" name="mailform">
 	〒<input type="text" name="郵便番号" id="zip" value="" style="width:80px" />
 	<input type="button" value="住所検索" onclick="getcity('','')" /><br />
 	都道府県:<input type="text" name="都道府県" id="pre" style="width:80px" />
 	市区町村:<input type="text" name="市区町村" id="city" style="width:80px" />
 	町域以下:<input type="text" name="町域以下" id="town" style="width:100px" /><br />
 </form>  
1行目で先ほど作成したjavascriptをインポートし、[住所検索]ボタンでAjaxを呼び出しています。 ここで重要なのがフォームフィールドのidです。
郵便番号zip
都道府県pre
市区町村city
町域以下town
今回のAjaxはこのidを元にデータを挿入します。 このidが既に使用されていて使用できない場合はgetcity()関数にidのパラメータを付けて呼び出します。
  <script type="text/javascript" src="/getcity.js"></script>
 <form action="javascript:void(0)" name="mailform">
 	〒<input type="text" name="郵便番号" id="yubin" value="" style="width:80px" />
 	<input type="button" value="住所検索" onclick="getcity('','')" /><br />
 	都道府県:<input type="text" name="都道府県" id="ken" style="width:80px" />
 	市区町村:<input type="text" name="市区町村" id="si" style="width:80px" />
 	町域以下:<input type="text" name="町域以下" id="mati" style="width:100px" /><br />
 </form>  
このような例では、getcity('mailform,ken,si,mati',''); のようにします。 パラメータは全部で4つ
[フォーム名],[都道府県],[市区町村],[町域以下]
パラメータを省略する場合は全て省略、設定する場合も全て設定しなければなりません。 この機能を使えば1つのフォームに複数の住所検索を置くことも可能です。
また、htmlファイルとgetcity.phpの有るディレクトリが異なる場合は2つ目のパラメータにパスが指定できます。
getcity('mailform,ken,si,mati','../zip/');
この例では、1つ上のzipディレクトリに有るgetcity.phpを呼び出します。 こうする事でサイト内にgetcity.phpもgetcity.jsの1つだけ設置すれば良い事になります。


ダラダラと説明ばかり長くなりましたが、結局必要なのはgetcity.phpとgetcity.jsの2つのスクリプトだけです。 こちらのファイルはUTF-8の圧縮版です。このファイルを解凍してルートディレクトリに置けば完了です。 データベースを作成することも、最新データを管理する必要も在りません。

最後にPerlのサンプルを添えておきます。
  #!/usr/bin/perl
 use LWP::UserAgent;
 @_REQUEST = split(/&/, $ENV{QUERY_STRING});
 foreach (@_REQUEST) {
 	($key, $value) = split(/=/, $_);
 	$value =~ tr/+/ /;
 	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 	$value =~ s/</&lt;/g;
 	$_REQUEST{$key}  = $value;
 }
 if ($_REQUEST[zip]) {
 	$xml = geturl("http://www.inetagency.net/getCity.cgi?zip=$_REQUEST[zip]");
 	$xml =~ s/\s//g;
 	if ($xml =~ /<Zip>(.+)<\/Zip><Pre>(.+)<\/Pre><City>(.+)<\/City><Town>(.+)<\/Town><Address>(.+)<\/Address>/) {
 		$Zip     = $1;
 		$Pre     = $2;
 		$City    = $3;
 		$Town    = $4;
 		$Address = $5;
 	}
 }
 print <<;
 Content-Type:text/html; charset=UTF-8\n
 $Zip,$Pre,$City,$Town,$Address
 
 exit;
 sub geturl {
 	my $url = @_;
 	my $ua = LWP::UserAgent->new;
 	$ua->agent("Mozilla 5.0 " . $ua->agent);
 	my $req = new HTTP::Request GET => $url;
 	my $res = $ua->request($req);
 	my $html;
 	if ($res->is_success) {
 		$html = $res->content;
 	}
 	$html =~ s/\r\n/\n/g;
 	$html;
 }
  
このファイルをgetcity.cgiで保存し、getcity.phpの代わりに使用します。 したがって、getcity.js内のgetcity.phpの記述をgetcity.cgiに変更していただく必要があります。 また、Perlスクリプトですので改行コードはlf、サーバにアップロード後はパーミッションを755に設定していただく必要が有ります。
Comment
$(this).corner("left");コメントに関するお約束

  1. ご意見、ご希望、ご質問など、何かありましたらご投稿ください。
  2. ご質問に対する回答は、分かる範囲でお答えしますが、お約束は出来ません。
  3. 投稿していただいたコメントはこのページに記載されます。
  4. コメントは各ページごとに独立しています。それぞれのテーマに沿ったコメントをお願いします。
  5. タグはいっさい使用できません。タグもそのまま表示されます。
  6. 印は必須です。ハンドル名でも結構ですのでご記入ください。
  7. パスワードを記入しておけばご自分の記事を削除できます。
  8. 当サイトにふさわしくないと判断した記事は管理者の独断で削除することがあります。
お名前
パスワード
件名

Enquete
このページの情報、記事はお役に立ちましたでしょうか?
はい いいえ どちらとも言えない

※ご意見が有ればどうぞ(公開されません)
更新履歴
10/07/26 Winテーマの変更
10/06/08 まだまだ使えるXP
10/06/02 jQueryテーマ...
10/05/25 Win7は業務に...
10/04/11 携帯位置情報取得
10/03/09 カレンダーの追加
10/03/01 サービス開始
有料サービス
  1. データ変換サービス
    番地まで記載されたテキスト形式の住所データをお持ちの場合、「緯度」、「経度」及び、 「最寄り駅」と座標、「最寄のインター」と座標の情報を追加したCSVデータを作成してお返しします。 座標付ですので簡単にGoogleマップに位置表示することができます。
    【例】
    名称 住所
    東京タワー 東京都港区芝公園4丁目2-8

    名称 住所 緯度 経度 沿線 最寄り駅 緯度 経度 高速名 インター 緯度 経度
    東京タワー 東京都港区芝公園4丁目2-8 35.6585873 139.7454247 都営大江戸線 赤羽橋 35.655007 139.743642 首都高速都心環状線 芝公園 35.6544767 139.745769
    ※住所データは必須です。電話番号では特定できません。

    費用は1件当たり、わずか32円。100件で3,200円、1000件でも32,000円です。
    追加される最寄り駅、最寄のインター共に直線距離で最も近いもの1件です。複数必要な場合はお問合せください。
  2. システム開発
    Googleマップや最寄り駅、最寄のインターを利用したWEBシステムを開発します。
    自社製品が全国どこで購入可能で、どの駅で降りれば1番近いのかなどをユーザにお知らせすることができ、販売促進にも貢献します。 また、ご自分の住所を指定して最も近い店舗を検索したり、距離を指定して範囲内の店舗を検索して地図を表示するシステムの開発もできます。
    もちろん、携帯版も可能です。
    携帯版はGIF形式の静止画ですのでキャリヤや機種を選びません。 ほぼ、全て機種で使用可能なシステムになります。

    携帯電話ですからWEBのようなパフォーマンスは望めませんが、 静止画でも地図の「縮小」、「拡大」をサポートします。
    お見積もりは「お問合せ」から、 ご希望の機能をできるだけ詳しくお書きいただき、お送りください。
  3. 最新のユーザインターフェースの導入
    現在注目を集めているAjaxやJavascriptを使用したハイセンスなインターフェースの導入をお手伝いします。
    jQueryプラグインのオーバーレイを複数使用した最先端のドキュメントの生成が可能になります。 また、オーバーレイやAjaxを使用する事で、無駄なリロードを減らすことができ、パフォーマンスも向上します。
お問合せフォーム
  1. 全てのお問合せはこちらの専用フォームをご使用ください。 もちろん、ご意見/ご希望でも結構です。
  2. システムに存在しない路線や、新たに開通した路線をご存知の場合はお知らせください。
  3. 有料サービスで新たなシステム開発のお見積もりをご希望の場合は、 出来る限りご希望の機能を詳しくお願いします。
  4. は必須項目です。必ずご記入ください。
お名前
フリガナ
Email
Email(確認) ※確認のためもう一度 (コピー禁止)
タイトル お問合せ お見積もり ご意見/ご希望
内容