2008年4月1日火曜日

LWP::get()を使うコードにキャッシュ機能を付ける

RSSリーダーなブログパーツが欲しい、けど、既存のサービスを使うのは嫌なのでなんとなくフルスクラッチで書いてみることにした。


とりあえず動くようにはなったんだけど、せめてRSSのキャッシュぐらいは実装しておかないとRSSの取得先サーバにとって迷惑だ。なんかないかなぁとCPANをガサゴソしてみたらHTTP::Cache::Transparentモジュールが使えそうなので、早速試してみる。


使い方は、


  1. use LWP::Simple の後にuse HTTP::Cache::Transparent する


  2. HTTP::Cache::Transparent::init() に設定を渡してモジュールを初期化


  3. いつも通り LWP で get() する


らしい。…簡単だー。とりあえず追加してみたコード。
$DIR_HTTPCACHE = '/home/doggie/data/rss_cache';

HTTP::Cache::Transparent::init( {
        BasePath => $DIR_HTTPCACHE,
        Verbose => 0,
        MaxAge => 12,
        NoUpdate => 30 * 60,
} );
HTTP::Cache::Transparent::init() に渡せるオプションはこれだけ。


  • BasePath
     キャッシュ領域として使用するディレクトリ


  • Verbose
     冗長出力するかしないか(1 or 0)


  • MaxAge
     キャッシュが生き続ける最大時間(単位:hour)


  • NoUpdate
     最後にキャッシュが更新されてから、実際のHTTP問い合わせを抑制する時間(単位:second)


一発スクリプトを走らせた後にキャッシュディレクトリを見てみると
doggie@elena:~$ ls -l /home/doggie/data/rss_cache/
合計 28
-rw-r--r--  1 doggie users 26387 2008-03-31 20:27 6b2b2adb261025db95ada29a0f5dd44d
おー、うまく機能している模様。

0 件のコメント:

コメントを投稿