What's ``What's New!'' のページ
Copyright (C) 1998-1999 Taiji Yamada <taiji@aihara.co.jp>
このページはウェブサイトの更新を自動的にチェックするスクリプト``whatsnews.pl''のページです。
whatsnews.pl
``whatsnews.pl''は指定された URL をチェックし、以前にチェックしたときのタイムスタンプもしくはコンテンツを調べ、内容が更新されていればそれを通知します。
whatsnews.pl [-m <mail address>] [-s <mail subject>] [-M
<mail command>] [-F <mail filter>] [-U <user filter>] [-d] [-q]
[-t <retries>] [-T <timeout seconds>] [-r <URL of report page>]
[-D <working directory>] [-c] [-S] URL(s)
更新の通知は、デフォルトで標準出力に表示しますが、'-m <mailaddress>'
オプションにより電子メールで通知します。また、'-d' オプションにより、更新内容の
diff 出力を付加して通知します。'-M' オプションで mail コマンドを指定することも可能で、デフォルトは
'imput --jconv=on -s' となっています。 以下は更新の通知の出力例です。
(初めてチェックした場合)
% whatsnews.pl -d http://www.aihara.co.jp/~taiji/
URL: http://www.aihara.co.jp/~taiji/
Last-Modified: 1998/11/10 22:41:44
(チェックしたら更新されてた場合)
% whatsnews.pl -d http://www.aihara.co.jp/~taiji/
URL: http://www.aihara.co.jp/~taiji/
Last-Modified: 1998/11/18 10:59:49
*** http/www.aihara.co.jp/~taiji/index.html.orig Tue Nov 10 22:41:44 1998
--- http/www.aihara.co.jp/~taiji/index.html Wed Nov 18 10:59:49 1998
***************
*** 20,25 ****
--- 20,28 ----
<TD>
<UL>
<LI>
+ [1998/11/18] I observed Leonid meteor shower.</LI>
+
+ <LI>
[1998/11/10] I have read a book about Bovine Spongiform Encephalopathy
(BSE), Creutzfeldt-Jakob Disease (CJD) and the prion hypothesis.</LI>
(チェックしても更新してなかった場合)
% whatsnews.pl -d http://www.aihara.co.jp/~taiji/
%
``whatsnews.pl''はカレントディレクトリに最新の内容を保存するためのワークディレクトリ
http(もしくは ftp) を作成します。実行時に初めて指定された URL の場合、URL
のタイムスタンプを表示し、コンテンツを http(もしくは ftp) 配下に保存します。そして、次の実行時に同じ
URL を指定すれば、以前に保存した内容と新たに GET した内容を diff コマンドで比較します。また、保存されているファイルのタイムスタンプは、ウェブサイトにおけるタイムスタンプと同期しています。
但し、'-c' オプションを付けると、ワークディレクトリにファイルを保存したりせずに、URL
のタイムスタンプのみを通知します。
(タイムスタンプのチェックのみ)
% whatsnews.pl -c http://www.aihara.co.jp/~taiji/
URL: http://www.aihara.co.jp/~taiji/
Last-Modified: 1998/11/19 14:59:32
また、'-S' オプションは、ワークディレクトリに既に格納されているサイト以外の
URL のアクセスを禁じます。
whatsnews.sh
``whatsnews.pl''は cron などによって定期的に実行されることを前提にしていますが、``whatsnews.sh''のような
wrapper で定期的な更新チェックが実現できます。
% whatsnews.sh -at 0:00
URL や通知先のメールアドレスを指定するには``whatsnews.sh''を編集して 下さい。また、'-at'オプションの引数は
at コマンドの時刻の引数と同じです。内部で at コマンドを再帰的に用いています。
これとは別の方法として、sleep の用いた無限ループの方法も用意しています。
% whatsnews.sh -loop 1d &
ここで、'-loop'オプションの引数は sleep コマンドの引数と同じです。
``whatsnews.sh'' はいくつでも別の名前にコピーして、サイトやメールの通知先、ループの周期などを変えて運用することが出来ます。
whatsnews.cgi
``whatsnews.cgi''は http(もしくは ftp) 配下のタイムスタンプを HTML 形式で出力する
CGI です。つまり、ローカルのウェブサイトで``whatsnews.pl''のチェック状況を報告するためのページを提供するものです。以下では現在作者がテスト運用している
URL の更新状況を報告します。
また、whatsnews.cgi は表示されている個々の URL に対して再チェックを行うためのボタンを提供します。このボタンを押すと、その
URL に対してタイムスタンプを調べに行き、http(もしくは ftp) 配下のタイムスタンプと比べて新しければ赤で再表示します。古い場合は緑で再表示しますが、タイムスタンプの取得に失敗した可能性があります。その状態で再読み込みをすれば、再びその
URL のタイムスタンプを調べます。ちなみに、この動作は格納されているファイルに影響を与えません。
distribution & history
``whatsnews.pl''の誤った使用法はウェブサイトに迷惑がかかる可能性がありますので十分注意して運用する必要があります。そして、``whatsnews.pl''の運用には
Perl5, wget, nkf が必要です。
-
whatsnews-0.62.tar.gz [1999/3/14 更新]
[1999/10/29 更新] [1999/11/3 更新]
-
whatsnews.cgi で、チェック中のサイトが見つからなかった場合の表示を追加。
-
whatsnews.sh で at コマンドによる定期的なチェック方法を導入。
% whatsnews.sh -at 0:00 # 毎日 0:00AM と 0:00PM にチェック
% whatsnews.sh stop # その at キューを削除し、定期チェックをやめる
-
これに伴い下記の -loop オプションは廃止というか、オプションの変更をしました。
% whatsnews.sh -loop &
% whatsnews.sh restart-loop
% whatsnews.sh stop-loop
-
whatsnews-0.61.tar.gz [1998/11/24 更新]
-
whatsnews.sh で 'start', 'stop', 'restart' オプションを導入しました。
% whatsnews.sh -loop 1d start # start は省略可能です。
% whatsnews.sh restart # 上記で起動したループを仕切り直す。
% whatsnews.sh stop # 上記で起動したループを停止する。
このようなオプションは /etc/init.d/whatsnews などにコピーして使うことを目的としています。'-loop'
オプションを付けないなら cron に登録して使うことも可能でしょう。
この時は一般ユーザで cron は使えないので、このような方法を取っていましたが、at
コマンドの再帰呼び出しで定期的なコマンドの起動が可能であることがわかり、その方針を採用しました。上記を見て下さい。
-
whatsnews-0.6 以前では wget-1.4.4 を使っていましたが、wget-1.5.3 にも対応しました。なぜか、wget-1.5.3
では spider モードの出力を標準出力に出してくれないので、そのための対処です。
-
whatsnews-0.6.tar.gz [1998/11/21 更新]
-
whatsnews.cgi で再チェックボタンを導入しました。それにともなって、下記の多くの機能が導入されました。
-
whatsnews.cgi の再チェックボタンのセキュリティ的見地から、whatsnews.pl
に、URL の新規チェックを禁じるオプション '-S'、secure モードを導入しました。これで、whatsnews.cgi
を公開しても、これを踏台にして他のサイトにアクセスすることは出来ません。[注意!]
しかし、基本的に whatsnews.cgi はイントラネットに制限した方がいいと思います。
-
whatsnews.cgi の再チェックボタンの、メール通知との共存のために、whatsnews.pl
に、URL のタイムスタンプを表示するだけの動作をする '-c' オプション、check
only モードを導入しました。check only モードはワークディレクトリを使用しません。check
only モードも secure モードの時は、非 check only モードでチェックしたことのある
URL しかタイムスタンプをチェックすることは出来ません。
-
diff 出力を通知する時に、ユーザーフィルタを '-U' オプションで指定できるようにしました。
例えば、
% whatsnews.pl -d -U "|grep '^+'" http://www.aihara.co.jp/~taiji/
とすれば、追加変更のあった行のみを出力するようになります。
-
whatsnews.pl と whatsnews.cgi の表示形式、特にタイムスタンプの変更。
-
whatsnews-0.5.tar.gz [1998/11/19]
-
whatsnews.pl でコンテンツを格納しておくためのワークディレクトリを '-D'
オプションで指定できるようにしました。
-
whatsnews.pl でレポートページの URL をメールの付加情報として通達できるようにしました。'-r'
オプションで任意に指定可能。
-
whatsnews.pl でメッセージのスタイルを変えました。
-
[注意!] URL で http://username:password@host/
という表記にも対応しました。しかし、実際の運用には、セキュリティ的に十分気を付ける必要があります。そして、whatsnews.pl
はそのような URL の場合、格納するファイルのパーミッションを 0600, ディレクトリのパーミッションを
0700 にします。よって、whatsnews.cgi ではこのようなサイトに関するチェック状況をレポートすることは出来ません。
-
whatsnews-0.4.tar.gz [1998/11/4]
-
whatsnews.cgi で内部で使用しているコマンドをフルパスに修正。
-
whatsnews-0.3.tar.gz [1998/10/30]
-
'-s' オプションでメールのサブジェクトを指定できるようにしました。
-
UNIX 標準の ``mail'', IM の ``imput'' の他に MH の ``mhmail'' にも対応しました。
-
タイムアウトを 10 秒、リトライ回数を 3 回をデフォルトとしました。
-
whatsnews.cgi の書式を変えました。
-
whatsnews-0.2.tar.gz [1998/10/29]
-
Version 0.1 の whatsnews.pl ではチェックする度にファイルを取得してましたが、wget
の特性を生かして、更新している場合のみファイルを取得するようにしました。
-
Version 0.1 の whatsnews.pl ではいつでも diff によって更新の確認をしていましたが、上記の変更によりデフォルトではタイムスタンプで更新の確認をするようにしました。'-d'
オプションにより diff 出力による通達が必要な場合のみ diff コマンドを実行します。
-
whatsnews.cgi でコンテンツのタイトルを表示するようにしました。
-
Version 0.1 の *.pl, *.cgi では jcode.pl を require していましたが、使わないようにしました。
-
ftp でも出来ると思います。
-
タイムアウトを 1 分、リトライ回数を 5 回としました。
-
'-m' オプションで電子メールアドレスを指定すると標準出力には何も表示しませんが、同様に、'-q'
オプションで quiet モードを指定できるようにしました。
-
whatsnews-0.1.tar.gz [1998/10/27]
TODO
-
whatsnews.cgi から更新確認を出来るようにする。つまり、個々のサイトに関して
whatsnews.pl を呼び出す。その時 whatsnews.cgi はリロードされる必要あり。また、セキュリティ的に十分気を付けて実装する必要がある。(version
0.6 で実装)
-
上記に関連して、whatsnews.pl に '-c' オプションによる check only モードの導入。check
only モードは HEAD のみを実行する。whatsnews.cgi からそれを実行する場合は
secure モードを導入し、ワークディレクトリに既に格納されている URL のみにしかチェックできないようにする。(version
0.6 で実装)
-
version 0.6 の check only モードは wget の spider モードで実現されている。よりよい方法は無いだろうか?
-
カウンタなどに対処するためかしこい diff のフィルタ? ファイルサイズでも比較?
-
内部ファイルを閲覧する時、.cgi とかだとテキストになっちゃう。どうする?
-
whatsnews.sh で "-stop", "-start", "-restart" オプション。(version
0.61 で実装)
-
英語圏でも使えるようにしましょう。LANG で自動判別。英語でも説明。
Copyright 1998 (C) Taiji Yamada,
All rights reserved.