2013年5月21日火曜日

郵便番号

会社員@事務系です。


FizzBuzz問題華やかかりし頃、一部で「業務プログラマ的には、むしろ郵便番号のcsvで腕試ししたいよね」的な話が持ち上がっておりました。

FizzBuzz 問題どや顔で解くひとなんかよりも "KEN_ALL.csv" をうまく扱える人の方が社会的貢献度高いhttp://togetter.com/li/352382


とはいえ、未だ実際にその実装例を見ることができていません。しょうがないから、自分で作りました!
…とドヤ顔で言ってやろうと思って、既にもう8ヶ月。他の問題に手を出したり、プラットホームをGoogleAppEngineからレンタルサーバに乗り換えたり、ほとんど開発と関係ない時間でしたが。


郵便番号→住所
http://bagend.sakura.ne.jp/zipcode/index.cgi/zip2adr?code=1940015

住所→郵便番号
http://bagend.sakura.ne.jp/zipcode/index.cgi/adr2zip?pref=福島県&muni=福島市&street=置賜町

問合せの結果はJSONフォーマットで返します。他のサーバから利用してもらう想定なので。

streetは実際に登録されている町名とユーザーの入力の、いずれか短い方を基準に、前方一致したものを複数返す仕様としています。
上記の例だと「置…なんだっけ?」とか、「いきおい余って、丁目まで入れてやったぜ」という場合に対応してます。
streetに入力された町名がデータ上存在しない場合は末番00の「○○町(以下に掲載がない場合)」になるはずです。


ソースはこちら。
https://github.com/morinatsu/ZipCode

郵便局のサイトから圧縮ファイルをダウンロードして加工するバッチ部分と、そうして組み上げたデータベースをもとに問合せに答えるWebサービス部分にわかれています。
これに、データベース(sqlite3を利用しています)にデータをアップロードする部分まで作りこめば、完全自動でいけるはず。
ただ、上記のソースの開発はUbuntuでやりましたが、運用サーバはさくらレンタルサーバのFreeBSDなので、そのままでは動きません。辛かった…。


TODO:

  • 「以下に掲載がない場合」とか、問合せ結果として、あまり面白くない文言はそのまま使わないようデータを修正させる。
  • 「○○町、△△町、××町」など、町名などが列挙されているものを分解して扱う。
  • 「○○町1丁目〜6丁目」とか、連続しているものも分解して扱う。
  • テストを書く。
  • 意味もなく、パッケージ化を試してみた結果など、意味のなくなったファイルを消す。
  • 格好悪いURL /zipcode/index.cgi/ の修正。mod_rewriteの使い方が…。


上3つくらいはちゃんと実装しておかないと実用にならないし、下3つをなんとかしないと「作った」とは言えないよなぁ。
あと、ジェネレータ関数を作っておいて、json.dumpsでうまく使えず結局list化しているのも何とかしたい。


0 件のコメント:

コメントを投稿