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 件のコメント:
コメントを投稿