「昼のYahooニュースに載っていたよ」
と妹に言われる事がしばしば。しかし、それを聞くのは夜の8時だったりして、たいていヘッドラインから消えていたりして探すのは面倒です。というか、1時間に1回更新という具合にはなっていない上に行数の都合でリンクがなくなってしまったりと後からチェックするのは大変です。まあ、ニュース以外でも更新頻度の高いページ/サイトは同様でしょう。
そこで、今回は妹の「昼頃に載っていたよ」要求に応えるため定期的に指定されたページのデータをダウンロードし時間別のフォルダに格納するスクリプトを載せます。
これはMacOS X Pantherで動作するシェルスクリプトです。JEDITなどで入力して改行コードをUNIX (LF)にして保存してください(以下は自分のホームフォルダに保存したものとして説明しています)。ファイル名の拡張子は.shにします。また、vi(エディタ)で編集しても構いません。
#!/bin/sh
GETSITE="http://www.mainichi-msn.co.jp/"
DDIR="mainichi"
cd ~/Sites
mkdir $DDIR 2> /dev/null
cd $DDIR
DIR=`date "+%H%M"`
mkdir $DIR 2> /dev/null
cd $DIR
curl $GETSITE > index.html 2> /dev/null
二行目のGETSITE="〜"がダウンロードするページのURLです。=の前後には空白は入れないでください。動かなくなります。三行目のmainichiが保存先のフォルダ名です。
次にターミナルを起動して以下のように入力します。
chmod 700 保存したファイル名
このようにパーミッションを設定します。次に以下のように入力します。
crontab -e
エディタが起動します。iのキーを押して以下のように入力します。
*/20 * * * * /Users/dgcr/mainichi.sh
/Users/dgcr/mainichi.shは、先ほど保存したシェルスクリプトのあるパスです。上の例ではdgcrユーザーのホームフォルダにあるmainichi.shという事になります。
先頭の*/20は20分ごとという意味です。10分ごとにするならば
*/10 * * * * /Users/dgcr/mainichi.sh
となります。1時間に1回で12時0分のように0分にするならば以下のようになります。
0 * * * * /Users/dgcr/mainichi.sh
入力が終わったらescキーを押して
:wq
と入力します。これで保存され元の画面に戻ります。
これで定期的にSitesフォルダ(サイトフォルダ)に指定したフォルダ名で保存されます。確認する場合はSafariなどのブラウザで以下のURLを指定します。
http://localhost/~dgcr/mainichi/
すると2320とか0500といった名前のフォルダが表示されます。フォルダをクリックするとその時間のニュースが表示されます。フォルダ名は時間と分の組み合わせなので2320であれば23時20分のニュースという事になります。フォルダが表示されない場合は/etc/httpd/httpd.confファイルを編集するか
http://localhost/~dgcr/mainichi/2320/
と直接時刻を指定する、時刻別のインデックスを作っておく、ファインダから直接開くといった方法で見る事ができます。
このスクリプトだと24時間前のは上書きされてなくなってしまいます。ずっとニュースを保存しておきたい場合にはスクリプトの
DIR=`date "+%H%M"`
の部分を
DIR=`date "+%Y%H%M"`
としてください。これでマシンが稼働している&ニュースサイトが存在しておりサーバーがダウンしていない限りは自動的にニュースが保存されます。ニュースに限らず、サイトの歴史(?)を保存しておきたい場合には便利かもしれません。