愛用している YukiWiki に weblogUpdates.ping な機能をつけてみる。
機能概要
- YukiWiki に何らかの更新があった場合、更新PINGする。
- 6時間以内に更新PINGしているなら、更新PINGしない。
- 更新PINGはバックグラウンドで行う(ブラウザは更新PINGが終了するまで待たなくて良い)
YukiWiki は Perl で書かれてるので、更新PINGをする部分の実装も Perl を使うことにする。
YukiWIki 2.0.5 には do_write というサブルーチンがあって、これが更新する際に呼ばれる関数となっている(らしい)。このサブルーチンの最後で、weblogUpdates.ping をする。
更新PINGの実装は別モジュールにしておく。ここでは WeblogUpdatePings.pm というモジュールにしておく。
YukiWiki からは WeblogUpdatePings::update_pings 呼び出すだけで良い。
use WeblogUpdatePings;
WeblogUpdatePings::update_pings();
以下は、WeblogUpdatePings.pm の実装。
ping サーバや Weblog 名等の設定は WeblogUpdatePings::update_pings に直書きしている。これなら、BBSの更新時等に転用するときに、ファイルをコピーして設定変えるだけですむ。
NILab::* モジュールは NI-Lab.'s Perl Modules を参照。
package WeblogUpdatePings;
#===========================================================
use NILab::CGIUtils;
use NILab::WeblogUpdate;
use NILab::IntervalChecker;
#===========================================================
# static function
#===========================================================
sub update_pings{
# config
my $interval_log = './inteval_log.txt';
my $interval_time = 60 * 60 * 6; # for 6 hours interval
my $weblog_name = 'NI-Lab.\'s MemoWiki';
my $weblog_url = 'http://www.nilab.info/wiki/';
my @ping_server = (
'http://www.blogpeople.net/servlet/weblogUpdates',
'http://rpc.weblogs.com/RPC2',
'http://ping.bloggers.jp/rpc/',
'http://ping.cocolog-nifty.com/xmlrpc',
'http://ping.myblog.jp',
'http://ping.exblog.jp/xmlrpc',
'http://blog.goo.ne.jp/XMLRPC',
'http://ping.blogmura.jp/rpc/',
'http://rpc.blogrolling.com/pinger/',
'http://api.my.yahoo.com/RPC2',
'http://bulkfeeds.net/rpc',
'http://ping.blogmura.jp/rpc/',
'http://blogstyle.jp/xmlrpc/',
);
my $ping_log_file = './updateping_log.txt';
$interval_checker =
NILab::IntervalChecker->new(
$interval_log,
$interval_time,
);
# interval check
if($interval_checker->check()){
# create weblog update object
$weblog_update =
NILab::WeblogUpdate->new(\@ping_server);
$iwup =
WeblogUpdatePings->new(
$weblog_update,
$weblog_name,
$weblog_url,
$ping_log_file);
# do background job for CGI
NILab::CGIUtils::do_background_job($iwup);
}
}
#===========================================================
# constructor
#===========================================================
sub new {
my $class = shift;
my $self = { # initializeing field value
weblog_update => shift,
weblog_name => shift,
weblog_url => shift,
ping_log_file => shift,
};
bless $self,$class;
return $self;
}
#===========================================================
# do - for NILab::CGIUtils::do_background_job's callback
#===========================================================
sub do{
my $self = shift;
my $weblog_update = $self->{weblog_update};
my $weblog_name = $self->{weblog_name};
my $weblog_url = $self->{weblog_url};
my $ping_log_file = $self->{ping_log_file};
# weblogUpdate.ping
$weblog_update->ping($weblog_name, $weblog_url);
# output ping log
open(FH, ">$ping_log_file");
print FH $weblog_update->{log};
close(FH);
return 1;
}
#===========================================================
1;
MemoWiki で使っている本番運用版とはちょっと違うけど、まぁだいたいこんな感じ。
また、日本語のブログ名に対応しているかどうかは不明。
tags: zlashdot Weblog
Posted by NI-Lab. (@nilab)
コメント
NI-Lab.の、設定するはずだったみたい。
投稿者: BlogPetの「づらねこにゃん」 | 2005年05月16日 09:52
づらねこにゃんに設定されるところだった(^_^;
投稿者: NI-Lab. | 2005年05月16日 18:44