Filter::EntryFullText はエントリの全文を取得します。 URI::Fetch の引数として NoNetwork に 3 時間を渡しているので、 キャッシュがあれば 3 時間はサーバへのアクセスは発生しません。
3 時間を過ぎた場合でも、If-Modified-Since 付きでアクセスするので 毎回ページをダウンロードしてくることにはならないのですが、 それでもエントリが 100 個あったとすると、 100 回のアクセスが発生してしまいます。
1 回取得したエントリは更新されないと仮定してよい場合、 NoNetwork の値を十分長く設定できると、サーバへのアクセスが発生しないのでよさげです。
というわけで、NoNetwork の値を設定できるようにしました。
Index: lib/Plagger/Plugin/Filter/EntryFullText.pm =================================================================== --- lib/Plagger/Plugin/Filter/EntryFullText.pm (リビジョン 1698) +++ lib/Plagger/Plugin/Filter/EntryFullText.pm (作業コピー) @@ -106,7 +106,7 @@ } # NoNetwork: don't connect for 3 hours - my $res = $self->{ua}->fetch( $args->{entry}->permalink, $self, { NoNetwork => 60 * 60 * 3 } ); + my $res = $self->{ua}->fetch( $args->{entry}->permalink, $self, { NoNetwork => $self->conf->{no_network} || 60 * 60 * 3 } ); if (!$res->status && $res->is_error) { $self->log(debug => "Fetch " . $args->{entry}->permalink . " failed"); return;
Filter::Rule は Filter::EntryFullText より後に実行されるので アクセスの低減には効果ありません。
括弧付きで名前は入れられるけど、メールアドレスは nobody@example.com がソースに埋めこまれてて変更できないっぽい。
http://plagger.g.hatena.ne.jp/Seacolor/20060921/1158820398
かっこの中に日本語を使ったときにマッチがうまくいかなかったので修正。
--- Config.pm 2006-09-23 16:28:40.079617696 +0900 +++ local/plagger/lib/Plagger/Plugin/CustomFeed/Config.pm 2006-09-24 19:41:15.876752960 +0900 @@ -131,7 +131,7 @@ if ($content =~ /$extract/sg) { $cur_pos = pos $content; my $str = substr($content, $prev_pos, length($content)); - if (my @match = $str =~ /$plugin->{extract}/s) { + if (my @match = $str =~ /$extract/s) { my @capture = split /\s+/, $plugin->{extract_capture}; for my $m (@match) { my $val = shift @capture;