RSSリーダー話の拡散

RSSリーダーについての話はずいぶん盛り上がったらしく、28日の「RSSリーダーは本当に使われているのか?」にはずいぶんたくさんのアクセスがあった。単にBloglinesの登録者数ランキングを作ってみたら面白いかも、という思いつきだっただけに驚いた。でもどんどん話題が広がっていくのを見るのは楽しいなあ、などと当事者ヅラをしてみる。
反応もいくつか頂いたみたいだ。「RSS/ATOMについてそろそろ強烈に擁護する(穏やかな日々)」にはRSSリーダー以外でのRSSの使われ方が色々書いてあって面白かった。なんか思いもよらぬ使い方とかないかなー、とか思う。そんなに簡単に思いつくなら苦労はしないけど。あと、

これらを読んで思ったことだがRSS=RSSリーダーではない!Bloglinesを1ヶ月使ったぐらいで彼氏面しないでRSSをわかったと思わないでください。嘘です。

これは多分私のことなんだろうなあ(笑)。
直接の反応以外でも、「web2.0デバイドその2 - ゴリゴリのニュースサイターさんからの反応など(つつがなく過ごす幸せ)」は単純にいろんな人の情報収集方法がわかって面白かった。けれども、この記事だけを取り上げるのはどうやらtkdnさんの本意ではないようだ。前後の記事も読んでみるとよくわかる。ツールの話とはちょっと離れてWebリテラシの話になるんだけれども、個人的にはそっちもかなり面白かった。WebやらITやらについてはデジタルデバイドとかいって殊更にとりあげられがちではあるけれども、より広範に新しい技術などへの姿勢のあり方として捉えると、様々な業界、色々な場面で同じようなことが起こっているという印象がある。当然その背後に存在するものとしてのWeb/ITという考え方もできるわけで、広げようと思えばどこまでも広げていける話題なんですな。拡散させすぎてもわけがわからなくなるし、これについてはじっくり考えてみたいところ。
他にも色々あって、ずいぶん楽しませて頂きました。まあRSSリーダーについては使ってみて便利だと思えば使い続ければいいし、特に必要性を感じないんだったら無理して使い続ける必要はない、という至極当然の話になっているみたい。結局のところ、大事なのはツールじゃなくて、ツールによって得られた情報をどう使うかなんだ、ということになるんだろう。当たり前といえば当たり前だけど、だからこそたまに確認しておいても損はなさそうな話だ。
ちなみに例のランキング表の作成をなんとか自動化できないか、と思ってPerlをいじってみたら2時間くらいであっさりできちまいました。でもあんなのは所詮一発ネタみたいなもんなので使い道がありません。我ながら馬鹿なことやってるよなあ。

(12.01追記)
その後ちょっと手を入れたので以下にソースを置いておく。一応Windows上のActivePerl 5.8.7で動作確認済みだが、なにが起きても責任は取れません。あと、フィードを公開していない場合はすべて既読状態にしてしまうので要注意。というかBloglinesAPIでsubscribersが得られれば万事解決なんだと思った。
#bloglines_getsubs.pl
#2005/12/01
#Active Perl 5.8.7

#Bloglinesに登録してあるフィードの閲覧者数一覧をlog.tsvに吐き出すスクリプト
#フォーマットは「No 名称 URL 登録者数」のTSV形式
#使用にはBloglinesのアカウントが必要
#以下の「#設定(必須)」の箇所にメールアドレス、パスワードを入力して実行する
#※注意:フィードを公開していない場合、すべてのフィードが既読状態になってしまう

use strict;
use warnings;
use Encode;
use HTTP::Cookies;
use HTTP::Request::Common;
use LWP::UserAgent;

#設定(必須) Bloglinesに入力するためのメールアドレス、パスワード
my $Email = 'foo@bar.com';  #メールアドレス
my $passwd = 'password';  #パスワード

#設定(必要があれば)
my $proxy = '';

#設定(その他)
my $ccode = 'shiftjis';
my $cookie_file = 'cookie_bloglines';
my $output_file = 'log.tsv';

#設定(固定値)
my $url_login = 'http://www.bloglines.com/login';
my $url_subs = 'http://www.bloglines.com/myblogs_subs';
my $url_pub = 'http://www.bloglines.com/public/';
my $url_display_base_pub = 'http://www.bloglines.com/public_display?username=';
my $url_display_base_pri = 'http://www.bloglines.com/myblogs_display?sub=';

my($username,$url_display_base,$url_display);
my(@dat);

my $i = 0;
my $j = 0;

my $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1);

#loginしてcookieを取得
my %formdata = ('email' => $Email, 'password' => $passwd);
my $request = POST($url_login, [%formdata]);
my $ua = LWP::UserAgent->new;
$ua->proxy('http', $proxy) if $proxy;
$ua->cookie_jar($cookie_jar);
$ua->request($request);

#フィードのリストを取得
$request = HTTP::Request->new(GET => $url_subs);
my $res = $ua->request($request)->as_string;
my @res = split(/\n/,$res);

foreach my $line(@res){
  if($line =~ /\/blog\/(.+)\?edit=1/){
    $username = $1;
  }
  
  if($line =~ /doLoadf\([0-9]+,([0-9]+),([0-9]+)\)\", \"title=\\\"  (.+)  \\\"/){
    $dat[$i][0] = $1;  #subid
    $dat[$i][1] = $2;  #siteid
    $dat[$i][2] = $3;  #title
    $dat[$i][2] =~ s/ \([0-9]+ New\)//;  #titleから未読件数表示を削除
    $i++;
  }
}

print "username:$username\n" if $username;
print "$i feeds.\n\n";

$i--;

open(FILE,"> $output_file") || die("$output_file:file open error.\n");

#public or private
if($username){
  $request = HTTP::Request->new(GET => $url_pub . $username);
  $res = $ua->request($request)->as_string;
  if($res =~ /restricted/){
    $url_display_base = $url_display_base_pri;
  }else{
    $url_display_base = $url_display_base_pub . $username . '&sub=';
  }
}else{
  $url_display_base = $url_display_base_pri;
}

#データ取得
for($j = 0; $j <= $i; $j++){
  $url_display = $url_display_base . $dat[$j][0] . '&site=' . $dat[$j][1];
  $request = HTTP::Request->new(GET => $url_display);
  $res = $ua->request($request)->as_string;

  my $line = sprintf("%d\t%s", $j+1, $dat[$j][2]);

  #URLの抽出
  if($res =~ /<h1><a href=\"(.+)\" target=_blank>/){ $line .= "\t$1" }
  #登録者数の抽出
  if($res =~ /<strong>([0-9,]+) subscribers?<\/strong>/){ $line .= "\t$1"; }
  
  $line = Encode::encode($ccode, Encode::decode('utf8', $line));
  print FILE "$line\n";
  print $line, "\n";
  
  sleep 3 unless($i == $j);
}

undef($cookie_jar);
undef($request);
undef($ua);

unlink $cookie_file;

#end of bloglines_getsubs.pl