2012年2月11日

Python + Kyoto Cabinet + Tornadoで住所検索を作成してみた

Kyoto Cabinet の動作を見せる機会があったので、簡単なサンプルを作ってみました。
以下のサイトを参考にしています。

準備

Python は 2.7.2 で確認しています。
必要な物をインストールします。MacPorts と pip を利用してインストールしています。

sudo port install kyotocabinet +lzma +lzo
pip install -U http://fallabs.com/kyotocabinet/pythonlegacypkg/kyotocabinet-python-legacy-1.16.tar.gz
pip install -U tornado

検索用郵便番号データの作成

以下に記述されているソースは bitbucket にアップしてあります。
sakito / sample_py_kyotocabinet_tornado_zipcode / source — Bitbucket
Kyoto Cabinet Python ライブラリは素のまま使うと Python らしくないのでラッパを作成しておきます。

郵便番号データを読み込んで、KEN_ALL.kct というデータベースに格納するスクリプトを作成します。参考にしたサイトでは kch にしてますが、郵便番号検索は別に前方一致で良いので、kct の方が効率的です。

このスクリプトを利用して郵便番号データを作成します。

curl -O http://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip
mkdir data
unzip -d data ken_all.zip
python data_load.py
KEN_ALL.kct が作成できている事を確認しといてください。

Web UIの作成

UIを作成します。テンプレートとか利用するともうすこし綺麗に作成できますが、とりあえず参考サイトの形式で一つのファイルになるようにしてみました。
例外の処理とか、セキュリティとかは考慮してないです。

実行

起動します。

python server.py
ブラウザで http://localhost:5000/ にアクセスすれば動作します。