<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zipcode &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/zipcode/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 25 Dec 2013 01:49:14 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>&#034;zipcode&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/25/jaac2013-z-zipcode.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 25 Dec 2013 01:49:14 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[zipcode]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3796</guid>

					<description><![CDATA[&#8220;Z&#8221; は zipcode の &#8220;Z&#8221;。 郵便番号から住所を自動入力する ユーザが入力する手間を省いたり入力間違いを避ける為に、住所の一部を自動入力する補助UIを見たことが [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;Z&#8221; は zipcode の &#8220;Z&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-h245sNZb3Fo/UqR4nI5Ck5I/AAAAAAAACYg/wpovIbDxLBs/s400/ac2013-z.png" alt="Z"/></figure>



<p></p>



<span id="more-3796"></span>



<h2 class="wp-block-heading">郵便番号から住所を自動入力する</h2>



<p>ユーザが入力する手間を省いたり入力間違いを避ける為に、住所の一部を自動入力する補助UIを見たことがあると思います。 例えばこんなHTMLで、「郵便番号から住所を検索する」ボタンをクリックすると自動的に都道府県と住所が入力される仕組みです。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"zipcode"</span>&gt;</span>郵便番号:<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"zipcode"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"zipcode"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"button-getaddress"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"郵便番号から住所を検索する"</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"state"</span>&gt;</span>都道府県:<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"state"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"state"</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"address"</span>&gt;</span>住所:<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"address"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"address"</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
</code></span></pre>


<p>お問い合わせフォームやユーザー登録などで良く見られますね。 郵便番号からの住所検索は各所でAPIやライブラリが提供されておりますが、 ここでご紹介するのは次の２つのリソースです。</p>



<ol class="wp-block-list">
<li>zipaddress.net <a href="http://zipaddress.net/">http://zipaddress.net/</a></li>



<li>ajaxzip3 <a href="https://code.google.com/p/ajaxzip3/">https://code.google.com/p/ajaxzip3/</a></li>
</ol>



<p>共に商用利用可能で、リンクの設置などの制限は特にない様です。</p>



<h2 class="wp-block-heading">zipaddress.net</h2>



<p><a href="http://zipaddress.net">zipaddress.net</a> は、<a href="http://twitter.com/sugimoto1981">@sugimoto1981</a> 氏が公開している郵便番号検索APIです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>郵便番号-住所検索API</strong><br />
  <a href="http://zipaddress.net">http://zipaddress.net</a><br />
  郵便番号データをパラメータに含めてリクエストを送信することで、都道府県、市区町村のデータをJSONフォーマットで返却するシンプルなサービスです。</p>
</blockquote>



<p>APIの利用方法はシンプルで、郵便番号を7桁の数字で送ると JSON で住所の内容を返してくれます。 JSONPにも対応しているのでクライアントサイドでの利用も簡単です。 というよりむしろ、クライアントサイドでの利用を前提としているサービスなのでしょう。 簡単に組み込みが出来るSDKも公開されています。</p>



<p>試しに jQuery で上に挙げたHTMLに組み込んでみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"#button-getaddress"</span>).on(<span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> code;
    <span class="hljs-keyword">if</span>(! (code = $(<span class="hljs-string">"#zipcode"</span>).val())){
        <span class="hljs-keyword">return</span>;
    }
    $.ajax({
        <span class="hljs-attr">url</span>: <span class="hljs-string">"http://api.zipaddress.net"</span>,
        <span class="hljs-attr">dataType</span>: <span class="hljs-string">"jsonp"</span>,
        <span class="hljs-attr">data</span>: {
            <span class="hljs-attr">zipcode</span>: code
        }
    })
    .then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
        <span class="hljs-keyword">if</span>(! data.pref){
            alert(<span class="hljs-string">"失敗しました。"</span>);
        } <span class="hljs-keyword">else</span> {
            $(<span class="hljs-string">"#state"</span>).val(data.pref);
            $(<span class="hljs-string">"#address"</span>).val(data.address);
        }
    });
});
</code></span></pre>


<p>エンドポイントは <strong>&#8220;http://api.zipaddress.net&#8221;</strong> で、SSLにも対応しています。 返ってくるデータには以下の住所情報が含まれていますので、これらをテキストインプットに流し込めば完了です。</p>



<ul class="wp-block-list">
<li>pref: 都道府県</li>



<li>address: 市区町村以降の住所</li>



<li>fullAddress: pref + address の結合文字列</li>
</ul>



<p>また、提供されているSDKを使って情報を取得する事も出来ます。 SDKにある <strong>ZA.request</strong> メソッドを使用する事で、JSONP周りの処理をかなり簡略化してくれます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">ZA.request(code, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data, error</span>)</span>{
    <span class="hljs-comment">/* data から住所を取得する */</span>
});
</code></span></pre>


<p>ZA.request には郵便番号と、受け取る為のコールバックを渡して使用します。 この他にも、予め各項目を入力する要素を渡しておいてハンドリングする <strong>ZA.regiester</strong> もあります。 詳しくは SDK のリファレンスをご参照ください。</p>



<h2 class="wp-block-heading">ajaxzip3</h2>



<p><strong>ajaxzip3</strong> は、<a href="http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html">ajaxzip2</a> をJSONP対応にしてリリースされたライブラリです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>ajaxzip3</strong><br />
  <a href="https://code.google.com/p/ajaxzip3/">https://code.google.com/p/ajaxzip3/</a><br />
  世界一、簡単に設置できる郵便番号検索を目指して！</p>
</blockquote>



<p>他の郵便番号検索APIとは一線を画しており、 リポジトリに検索用のデータを静的なJavaScriptファイルとして設置しておき、 JSONPとしてアクセスする事で住所データを取得する仕組みです。 データは郵便番号の上3桁毎に別ファイルにされて、 <a href="http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/zipdata">/zipdata ディレクトリ</a> に格納されています。</p>



<p>上述の HTML に組み込んでみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    $(<span class="hljs-string">"#button-getaddress"</span>).on(<span class="hljs-string">"click"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">if</span>(! $(<span class="hljs-string">"#zipcode"</span>).val()){
            <span class="hljs-keyword">return</span>;
        }
        AjaxZip3.zip2addr(<span class="hljs-string">"zipcode"</span>, <span class="hljs-string">""</span>, <span class="hljs-string">"state"</span>, <span class="hljs-string">"address"</span>);
    });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>データの展開は <strong>AjaxZip3.zip2addr</strong> メソッドで行います。 引数には郵便番号等の文字列ではなく、input 要素の <strong>name</strong> 属性を渡す事に注意してください。 （丁度、先に挙げた zipaddress.net の ZA.register がこれに倣ったような実装になっている様です。）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">AjaxZip3.zip2addr(
    <span class="hljs-string">"zipcode"</span>, <span class="hljs-comment">// 郵便番号上3桁を入力した input 要素,</span>
    <span class="hljs-string">""</span>, <span class="hljs-comment">// 郵便番号下4桁を入力した input 要素</span>
    <span class="hljs-string">"state"</span>, <span class="hljs-comment">// 都道府県を入力する input 要素</span>
    <span class="hljs-string">"address"</span> <span class="hljs-comment">// 市区町村以下を入力する input 要素</span>
);
</code></span></pre>


<p>静的ファイルで取得する都合上、jQuery等の動的なJSONPは使用できません。 コールバック関数は <strong>zipdata()</strong> で固定されていますので、 処理を弄りたい場合はこれを上書きする事になります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">window</span>.zipdata = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{ ... };
</code></span></pre>


<p>制作者の手間を極力省く設計になっている反面、融通を効かせる為には一手間必要です。</p>



<h2 class="wp-block-heading">その他のヒント</h2>



<p>上であげたいずれのリソースも、利用するにあたって正しい郵便番号（7桁の半角数字）が渡される事が前提となります。 広い層に使われるUIなので、間違った入力に柔軟に対応出来るように配慮してあげたいと思います。 例えば、番号入力が完了した時に誤った入力を自動修正する処理を挟む事で、 フォームの使い勝手が向上するのではないでしょうか。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$(<span class="hljs-string">"#zipcode"</span>).on(<span class="hljs-string">"blur"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> map = {
        <span class="hljs-attr">zen</span>: <span class="hljs-string">"０１２３４５６７８９"</span>,
        <span class="hljs-attr">han</span>: <span class="hljs-string">"0123456789"</span>
    };
    <span class="hljs-keyword">this</span>.value = <span class="hljs-keyword">this</span>.value.replace(<span class="hljs-regexp">/&#91;^\d]/g</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">s</span>)</span>{
        <span class="hljs-keyword">var</span> index = map.zen.indexOf(s);
        <span class="hljs-keyword">if</span>(index &gt;= <span class="hljs-number">0</span>){
            <span class="hljs-keyword">return</span> map.han.substr(index, <span class="hljs-number">1</span>);
        }
        <span class="hljs-keyword">return</span> <span class="hljs-string">""</span>;
    });
});
</code></span></pre>


<p>上のコードは、カーソルが離れた時に全角数字を半角数字に変換したのち、余計な文字を削除する簡単な例です。 誤ってハイフン等が入力されてしまった場合でも、正しい形式でAPIにリクエストする事ができます。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="http://zipaddress.net/">郵便番号-住所検索API</a></li>



<li><a href="https://code.google.com/p/ajaxzip3/">ajaxzip3 &#8211; 郵便番号検索API, JSONP対応 &#8211; Google Project Hosting</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
