郵便番号データ、郵便番号検索についてエントリをしてみようと思う。
この郵便番号データってやつは、様々なアプリで必要な場面が多い。
日本郵便が提供していてダウンロード可能であるが、市区町村統廃合等の理由により月1度なり最新化されるので、
ある時点で取得しても、そのうち最新データでなくなってしまう。
こういった問題の解決方法の一つとして、AjaxZip3 というプロダクトもあって
メンテナンスも AjaxZip3 側でしていただけるので、
コレを使えば、郵便番号検索は凄く簡単に実装出来るし、常に最新のデータを参照出来る。
自分もこの AjaxZip3 は 5年前ぐらいから数回使っていて、
便利だなと思う。
しかし、個人的にただ一つ物足りないのは、郵便番号7ケタ入力しないと住所補完してくれない点。
Google 日本語入力 のようなサジェスト機能を用いて、インクリメンタル検索出来れば、もっと使いやすいなと個人的には思う。
AjaxZip3 が対応してくれれば嬉しいんだけど、たぶんこの先も対応されないと思うので、常に最新の郵便番号データを使いつつ(※1)、郵便番号検索する際はインクリメンタルに出来るようにする(※2)には、自分で実装するしか手立ては無さそう。
※1 はお決まりな方法やけど、実際に作ってみた。
※2 は別の機会に公開するかも。
[動作環境]
- CentOS release 6.5 (Final)
- MySQL 5.1.73
#!/bin/sh
# ====================================================================
# $Id$
#
# Description:
# 郵政省郵便番号(zip_codes) を最新化します。
#
# Usage:
# ./renew_zipcodes.sh
#
# Date Author Description
# --------------------------------------------------------------------
# 2014-10-05 Seiji Hojo 新規作成
#
# ====================================================================
# 設定ファイル読み込み
. "./config/renew_zipcodes.ini"
# ====================================================================
# 前処理
# ====================================================================
# clean
find ${TMP_DIR} \( -name "KEN_ALL.CSV" -o -name "ken_all.zip" \) -print0 | \
xargs -0 --no-run-if-empty rm 2>/dev/null
# ====================================================================
# 本処理
# ====================================================================
# zip ファイル取得
wget ${ZIP_ALL_URL} -P ${TMP_DIR}
# zip 解凍
cd ${TMP_DIR}
unzip $(basename ${ZIP_ALL_URL})
# テーブル再作成
${MYSQL_CMD} < ${SQL_DIR}"/drop-create-zipcodes.sql"
# データ投入
${MYSQL_CMD} <<SQL
-- Shift_JIS ファイルを読み込む
SET character_set_database=sjis;
-- 郵政省郵便番号(zip_codes) に最新データ投入
LOAD DATA INFILE "/tmp/KEN_ALL.CSV"
INTO TABLE zip_codes
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES
TERMINATED BY '\r\n'
IGNORE 0 LINES
;
-- 「以下に掲載がない場合」は消す
UPDATE zip_codes
SET address = NULL
WHERE address = '以下に掲載がない場合'
;
SQL
# ====================================================================
# 後処理
# ====================================================================
# clean
find ${TMP_DIR} \( -name "KEN_ALL.CSV" -o -name "ken_all.zip" \) -print0 | \
xargs -0 --no-run-if-empty rm 2>/dev/null
# end
exit 0
[補足・注意]
コピーして使っても構いませんが、一切責任持ちません。
動作テストはしてますが、cron 実行とかはまだ試していません。
[参考]
AjaxZip3
https://code.google.com/p/ajaxzip3/
AjaxZip3 設置サンプル(お試し出来ます)
http://ninkigumi.com/ajaxzip3/
郵便番号データダウンロード - 日本郵便
http://www.post.japanpost.jp/zipcode/download.html






0 コメント :
コメントを投稿