Web ページ更新チェッカ カラジューム (Caladium)

  • 何これ
  • できること
  • 用語
  • 動作確認済みプラットフォーム
  • 動作原理
  • 各種雛形ファイルの書式
  • 既知のバグ
  • 更新履歴
  • その他

    何これ

    登録されている Web ページの更新時間を取得します。
    つまりは Web アンテナ。

    できること

    動作確認済みプラットフォーム

    Perl version:5.008008 (5.8.8)
    5.008005 (5.8.5)
     
    OS:FreeBSD 6.1-RELEASE-p11
    Solaris 8
     
    PROXY server:NetCache
    Squid 2.4.STABLE1

    動作原理

  • Last-Modified
  • HTTP サーバーは Web コンテンツの最終更新日を HTTP ヘッダ内の Last-Modified で返してきます。
    カラジュームはこの Last-Modified を見て最終更新日を判断しています。
    どういう情報を返すか興味のある人は、telnet で以下のようなコマンドを実行してみると良いでしょう。
    (太文字が入力するコマンドです)

    a:\>telnet griffonworks.net 80
    Trying 210.166.203.153...
    Connected to griffonworks.net.
    Escape character is '^]'.
    HEAD / HTTP/1.0
    Host: griffonworks.net
    Connection: close

    HTTP/1.1 200 OK
    Date: Mon, 15 Jan 2007 06:36:20 GMT
    Server: Apache
    Last-Modified: Fri, 17 Nov 2006 13:46:26 GMT
    ETag: "249ddd-119b-455dbd32"
    Accept-Ranges: bytes
    Content-Length: 4507
    Connection: close
    Content-Type: text/html
    ただし、SSI が有効になっていると Last-Modified が吐かれないので、Apache なら ディレクティブの Options オプション内の Includes を削除してください。

    Last-Modified を HTTP ヘッダで見るような設定をしていた時、HTTP ヘッダ内に Last-Modified が見つからない場合は、Caladium は「ドキュメント内の更新情報」で Last-Modified となるような日付を探そうと試みます。

  • ドキュメント内の更新情報
  • ヘッダ内に Last-Modified が見つからなかった場合 (CGI や SSI でページが出力されている - GeoCities など) は、HTTP ヘッダに Last-Modified が出力されません。
    その場合はドキュメント内にある一定の条件を満たした日付を Last-Modified として認識するようになっています。
    2007年1月15日現在では以下のようになっています。
    ドキュメントを 1行ずつ読んで行き、以下の文字列が見つかれば、その中の日付を Last-Modified として使用します。
  • <dc:date>YYYY-MM-DDThh:mm:ss[+-]HH:MM)<\/dc:date>
    例)<dc:date>1970-01-01T09:00:00+09:00</dc:date>
  • <meta +http-equiv="Last-Modified" +content="WWW, DD MMM YYYY hh:mm:ss GMT">
  • タイムゾーン文字列 (GMT、JST など) が指定されている場合はそれを参考にして JST に変換しますが、指定されていない場合は JST とみなします。
    ドキュメント内の更新時間は先頭から検索され、見つかり次第検索を終了します。

  • ユーザーオリジナル判定エンジン
  • このメソッドは拡張スクリプト chk_routin.pl により実現できます。

    本体側で更新時間が取得できなかった場合は、ユーザーが作成した更新チェッカルーチンを使用することも出来ます。
    このオリジナルチェッカは「ドキュメント内の更新情報」のサブセットとして存在する位置づけになります。
    ユーザーが独自でドキュメント内の Last-Modified となるような文字列を探すことが出来る Perl スクリプトを書くことが出来るならば、chk_routin.pl にそのスクリプトを書くことにより、ドキュメント内から Last-Modified となる文字列を抽出することができます。
    これにより、ユーザーはユーザーが独自に本体に書き加えた Last-Modified の抽出ルーチンの消滅を気にすることなく Caladium のバージョンアップを行うことが出来ます。
    この更新チェッカルーチンが存在しなければ、Caladium は「ドキュメントの内容変化」を使って更新チェックを試みます。

  • ドキュメントの内容変化
  • このメソッドは拡張スクリプト chk_body.pl により実現できます。

    GET メソッドで、HTTP ヘッダを除く HTTP BODY 部を比較します。
    前回取得したドキュメントと、チェック時に取得したドキュメントを CRLF|CR|LF|<br>|<p> でぶつ切りにし、その文字列比較を行います。
    更新判断は、全体の何 % が更新されているかをチェックし、初期設定ではこの値は 5% に設定されています。
    (しきい値は caladium.cfg で設定可能です) 更新が確認されると、更新が確認された日時を更新時間として使用します。
    もし更新が見られない場合は、前回の分の更新時間を継続利用します。

    各種雛形ファイルの書式

    雛形ファイルは、内部に記述されている特殊タグを使用することでそのタグに応じた内容で置換できるようになっています。
    雛形ファイルには通常の HTML 文法がそのまま使用できます。

    以下の特殊タグが使用可能です。

    既知のバグ

    更新履歴

    Rev-3.0.0 BETA-0
    • ゼロから新規に書き直し。

    Rev-2.0.0 BETA-21
    • あまりにも core を吐き続けるので、自作 HTTP 取得エンジンを HTTP::Lite に変更。

    Rev-2.0.0 BETA-19
    • 更に更新日付が上手く取れていないときがあったのでそれの修正。
    • core を吐くバグの一部修正。

    Rev-2.0.0 BETA-18
    • 更新日付が上手く取れていないときがあったのでそれの修正。

    Rev-2.0.0 BETA-17
    • core 吐いて落ちまくっていたので、waitpid() するところで 0.5秒のウェイト入れてみました。

    Rev-2.0.0 BETA-16
    • 子プロセス処理のさらなる最適化。

    Rev-2.0.0 BETA-15
    • libcaladium.pl Rev-20020919.1411
      • 新方式に合わせた修正。
    • *.pl
      • デバッグログ出力方法変更。
    • sstp.pl
      • タイムアウトを見るように変更。

    その他

  • カラジュームについて
    学名:Caladium (サトイモ科の観葉植物)
    別名:ハイモ (葉芋)、ハニシキ (葉錦)
    原産地:南アメリカ熱帯地方
    花言葉:喜び
    花誕生日:9月3日

    観葉植物でもよくあるものですね。
    以前は我が家にもありましたが、今はもうありません。

  • 原産地
    Web:GRIFFON Works
    WebMaster:G兄 <griffon@griffonworks.net>



  • ←戻る