例によって2〜3分で出来た代物なので(ブログ書いてる時間のほうが長いやろ)、中身のクオリティは適当です。
大体の著明なFeed-Fetcherは、ユーザエージェントに「XXX subscriber」という文字列を埋め込んできます。このXXXにそのフィードリーダのsubscriber数が格納されています。
blosxomのloggerプラグイン(もしくはココ)が出力したログファイルから、このsubscriber部を抜き取り著明なフィードリーダ毎購読者数をカウントします。
livedoor FeedFetcher/0.01 (http://reader.livedoor.com/; 23 subscribers) ...
#!/usr/bin/perl use strict; my $logfile = "/blosxom/logs/access.log"; #my $logfile = "access.log"; my %agents; my %bot_ua = ( 'Hatena' => 'Hatena\x20RSS', 'NewsAlloy' => 'NewsAlloy', 'FreshReader' => 'FreshReader', 'Feedpath' => 'Feedpath', 'Google Reader' => 'Feedfetcher-Google', 'Rojo' => 'Rojo', 'Bloglines' => 'Bloglines', 'Livedoor Reader' => 'livedoor\x20FeedFetcher', ); open(FILE, "<$logfile"); while(<FILE>) { my $line = $_; $line =~ s/^([^\t]+\t){2}([^\t]+)\t.*/\2/; if ((my $ua) = grep {$line =~ /$bot_ua{$_}/} keys(%bot_ua)) { $line =~ s/^.* ([0-9]+) subscriber.*\n$/\1/; $agents{$ua} = $line if ($agents{$ua} < $line); } } close(FILE); print <<EOF Content-Type: text/html; <html> <head><title>Your Feeds Subscriber</title><head> <body> <table border=\"1\"> EOF ; my $sum = 0; while(my ($key, $value) = each(%agents)) { print "<tr><td>$key</td><td>$value</td></tr>\n"; $sum += $value; } print <<EOF <tr><td>total</td><td>$sum</td></tr> </table> </body> </html> EOF ;
いや、つまらない事しか書いてないのに、購読者がいらっしゃるとは...
※実際にはクライアントサイドで閲覧していらしゃるでしょうから、正しい値とは限りません。