以前書いた記事で「郵便番号のCSVファイルをMySQLに取り込む」というものがありまして。
MySQLに郵便番号CSVファイルを取り込むPartt2 スクリプトを使用する
自分は毎月頭にこのスクリプトを動かすようcronに登録していたんですが、今月の処理がこけていたので修正を試みます。
もう一度実際に動かしてエラーを確認
何がいけないのかを確かめるため、手動でスクリプトを走らせて経過を見てみます。すると「ken_all.lzh」なるファイルが存在せず日本郵便のHPから404エラーが返ってくるじゃないですか!?
ブラウザで該当するページを開くと「平成27年2月28日を持ってLZH圧縮の配布を終了。今後はZIPのみ。」ですって。
こりゃ仕方がないのでスクリプトを直すほかないでしょう。
ダウンロードファイルのパスを変更する
ダウンロード対象がZIPファイルのみに変わったのでまずはここから修正します。
wget http://www.post.japanpost.jp/zipcode/dl/oogaki/lzh/ken_all.lzh ↓ wget http://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip
このほかにもダウンロード済みの「ken_all.lzh」を扱う部分(ファイルの存在チェックや解凍処理、使用済みファイルの削除など)を全てzipファイルに修正していきます。
解凍コマンドをlhaからunzipへ変更
zipファイルの解凍は「unzip」コマンドで行います。よって解凍部分のコマンドを置き換えてやります。
これで大丈夫!と思いスクリプトを走らせると・・・「unzipコマンドが見つかりません」と「KEN_ALL.CSVが存在しません」というまた違うエラーが・・・
unzipコマンドをインストール
基本的なコマンドのような気がしますが最初からはインストールされていないんですね。。。
ということで「apt-get install unzip」にてサクっとインストール。
解凍後のファイル名を修正する
今までは圧縮ファイルを解凍してできたファイルが「ken_all.csv」。しかしzipファイルを解凍してみると「KEN_ALL.CSV」となぜか大文字になってるじゃありませんか。
よって扱うファイル名を全て大文字に置き換えました。
※解凍時にファイル名を小文字で保存するよう指定できればそのほうが早かったような・・・
さ、これでスクリプトを走らせてみます。
・・・
・・・
・・・
無事完了しました。
今回のまとめ
なんだか久しぶりにMyサーバを扱った記事となりました。
もともとスクリプトを多用しているわけではないので、今回のようなケースはあまり経験がないのですがざっくり内容を纏めると
- 周囲の環境の変化によってスクリプトの修正が発生しうるもの
- zipファイルの解凍コマンドは「unzip」
- unzipコマンドはデフォルトではインストールされていないのでapt-getでインストール
- 解凍後のファイルに要注意(大文字・小文字など)
となります。
本当は、せっかく取り込んだこのデータを有効に使う術も取り上げたいのですが如何せん使い道が浮かばなくて・・・。
PHPか何かで郵便番号検索して表示させるツールでも作ってみようかなぁ・・・
そうそう、今回修正したスクリプトをテキストファイルにして置いておきますのでよろしければご覧下さい。