この記事の対象者
- JavaScriptをすこし勉強した初心者
- 「そろそろ何か実践的な技術を使ってみたいなぁ〜」「Web APIとか使ってみたいのぉ〜」てな人
郵便番号から住所を検索するAPIを使ってみる
郵便番号を入力すると住所が自動的に表示されるアプリケーションを作成してみる。
郵便番号API zipcloud http://zipcloud.ibsnet.co.jp/
なお、とりあえず動かすことが目的なのでスタイルはつけない。 できたものがこちら。
郵便番号を入れて検索ボタンをクリックすると、住所が自動で入力されている。それっぽい!
流れ
10分もあれば完成する。 全体的な流れはこちら。
まずは適当にフォルダを作り、index.html
とindex.js
を作成する(名前は何でもいい)。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="index.js"></script> <title>郵便番号から住所検索</title> </head> <body> <h1>郵便番号から住所検索</h1> <label>郵便番号 <input type="text" id="postcode" maxlength="8" placeholder="例:0000000"> </label> <button id="btn">検索</button> <div id="result"> <h2>検索結果</h2> <p><label>都道府県 <input type="text" id="pref" size="6"> </label></p> <p><label>市区町村 <input type="text" id="city"> </label></p> <p><label>住所 <input type="text" id="address"> </label></p> </div> </body> </html>
<head>
タグ内で、ウェブ上で公開されているjqueryライブラリファイルにアクセスする。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
jQueryの下でindex.js
を取得。
<script src="index.js"></script>
<button id="btn">検索</button>
と検索ボタンにidをつけて、クリックしたときに住所を取得する。
これで準備は完成。次はindex.js
にjQueryを書いていく。
jQueryを使用する
Ajaxを利用し、郵便番号WebAPIにリクエストをする。Ajax技術を使用することで、画面全体を再度読み込むことなく、部分的にレスポンスを画面表示できる(例:グーグルマップ)。 そのために、jQueryを使ってAjaxの処理を記述する。
$(function(){ $('#btn').on('click', () => { $.ajax({ url: "http://zipcloud.ibsnet.co.jp/api/search?zipcode=" + $('#postcode').val(), dataType: 'jsonp', }).done((data) => { if (data.results) { getData(data.results[0]); } else { alert('該当データが見つかりません'); } }).fail((data) => { alert('通信に失敗しました'); }); }); function getData(data) { $('#pref').val(data.address1); $('#city').val(data.address2); $('#address').val(data.address3); } });
$(#btn)
でHTMLの#btn
を取得できる。「クリックされたら{}内の処理をする」という動きになる。
$('#btn').on('click', () => {
$.ajax
でAjax通信ができる。
引数にはオブジェクトの形式でパラメータを指定する。
$.ajax({ url: "http://zipcloud.ibsnet.co.jp/api/search?zipcode=" + $('#postcode').val(), dataType: 'jsonp', }).done((data) => {
リクエスト先のURLの末尾に、HTMLで入力された郵便番号を加える。なお$('#postcode').val()
で郵便番号を取得している。
dataType
にはレスポンスとして受け取るデータ形式を指定する。ここではjsonpを設定。
}).done((data) => {
.done
で通信が成功したときの処理を書く。data
には郵便番号を送って返ってきたデータが格納されている。たとえば、100-0001という郵便番号を入力したら、その郵便番号に対する都道府県・市区町村・住所などがdata
に入っている。
if (data.results) { getData(data.results[0]); } else { alert('該当データが見つかりません'); } }).fail((data) => { alert('通信に失敗しました'); });
if (data.results)
で「もし、dataに結果の情報(results)が入っていたら」という条件で分岐をする。入力した郵便番号が存在しない場合、後に記述するエラー内容(該当データが見つかりません)がアラートで出る。
getData
という関数を用意して、都道府県・市区町村・住所などの情報を使ってそれぞれのプロパティに代入する。
function getData(data) { $('#pref').val(data.address1); $('#city').val(data.address2); $('#address').val(data.address3); }
それぞれ次のような値が入っている。
- address1: 都道府県
- address2: 市区町村
- address3: 住所
else
の分岐部分では、入力された郵便番号が存在しないものだった場合に「該当データが見つかりません」と表示されるよう処理をしている。
}).fail((data) => {
では、何らかの原因で通信が失敗したときにアラートが出るように設定している。
これで郵便番号から住所を自動で検索できるAPIが完成した。 シンプルだが、APIを利用する大まかな流れを掴むには、良い練習なのではないかと思う。