Webサイトをトラッキングする簡単なスクリプト
とかく問題解決というのは他人任せにしたくなるもので、まずは、この問題にすでに取り組んだ人がいないかどうか探してみよう。Google検索で調べたところ、入手できる数少ないツールはすべてMicrosoft Windows用であり、大半のWindows用プログラムと同様、無償ではなく自由に利用できるものでもないことがわかった。
Linux用としてはGPLライセンスのWebMonXがあるが、これは大量のクリックが必要でポップアップやサウンドで通知が行われるGUIツールである。そうしたGUIツールが好みなら、何の問題もない。自分のニーズに合った既製のソリューションが見つかったわけだ。だがそうでない人のために、次のようなKISS(Keep It Simple, Stupid)基準を満たす簡潔なスクリプトを書いてみよう。
- 慎み深さ:更新のたびにポップアップメッセージを表示するなどはもってのほか。更新通知は丁寧に電子メールで行う。
- コンパクトさ:わずか数行のコードで実現。
- モジュール方式:広く入手できて十分にテストされたコンポーネントを利用。
- スマートさ:更新が検知されたときに欲しいのは更新差分だけ。
ここでは、ページをレンダリングした形で表示するのにテキストブラウザ(例えば、w3m)を使用する。もちろん、HTMLやHTTP要求の応答をそのまま表示しても構わないのだが、それではやはり見づらいだろう。また、ページのスナップショットを保存するファイル名を生成するために、md5sum
やsha1sum
のようなハッシュプログラム(どちらもGNUのCoreutilsパッケージに入っている)を使用する。さらに、正しく機能するdiff
と、mail
コマンドの実装が必要になる。後者については、ローカルのMTAに用意されているはずである。その他、wc
やtouch
など、どんなシステムにもインストールされているはずの基本的なユーティリティも使用する。
必要なものが揃ったら、以下に示すシェルスクリプトを使って本題のトラッキング(追跡)タスクを実行することができる。このスクリプトは、list.txtファイルをスキャンして1行ずつURLを読み取っていく。各URLの現在のコンテンツを取得し、前に保存しておいたものと比較して、変更があればその内容をRECIP変数で指定されているメールアドレスに送信する、というものだ。
#!/bin/sh # webtrack.sh RECIP=user@host # where notifications get sent DUMPCMD="w3m -dump" # text browser invocation for url in $(cat list.txt); do md5=$(echo "$url" | md5sum | cut -d\ -f 1) touch $md5.txt $DUMPCMD "$url" > tmp.txt if diff $md5.txt tmp.txt >/dev/null; then : #echo no changes else : #echo "changes: " diff -Napu $md5.txt tmp.txt > diff.txt mv tmp.txt $md5.txt mail -s "Changes in $url found." "$RECIP" <<eof The diff has $(wc -l diff.txt | cut -d\ -f 1) lines. Changes are below. $(cat diff.txt) eof fi done
あとは、list.txtにURLを1件1行の形式で記述し、スクリプトを実行形式にして(chmod 755 webtrack.sh
を実行)、cronjobを設定(crontabファイルに0 8 * * * /path/to/webtrack.sh
のような行を追加)するだけである。このようにcronjobを設定しておけば、list.txtに記したWebサイトを毎朝8時にチェックしてくれる。この行の意味がわからなければ、crontab(1)のmanページを参照してほしい。
list.txtに新しいURLを追加してくれるスクリプトがあってもよいだろう。ローカルのリストであれば、echo
を直接使うだけでURLの追加ができる。リモートのリストの場合は、ssh
経由でecho
をリモートで実行すればよい。
#!/bin/sh # ww-add.sh # if the list is local echo '$1' >> /path/to/list.txt # if the list is remote ssh user@host "echo '$1' >> /path/to/list.txt"
ハッピー・トラッキング!
今回のちょっとした経験から、シェルスクリプトを利用すれば、同じことを何度も手作業で繰り返すよりも作業がずっと楽になって時間の節約にもなることが、容易におわかりいただけただろう。
Leslie P. Plozerは、日々の作業をコンピュータに任せることに関して豊富な経験を持つフリーソフトウェア・コンサルタント兼ライター。