古い記事
ランダムジャンプ
新しい記事
ReadMe! JAPAN[2004-04-28-2] というサービスに参加しています。

各ページにカウントアイコンを貼り付けると、自分のサイトの登録情報のページ(私のは <http://s.readmej.com/m/yto/nais.to>)で、アクセス数上位10ページが表示されます(一日一回更新)。

この中から自分のBlogの個別記事ページだけ抜き出して、アクセス数による「自blogの注目記事リスト」を生成する簡単なスクリプトを作りました。

ref. はてなブックマークによる自blogの注目記事リスト[2005-08-10-3]

■設置例
設置例


■ソース

超 ad hoc です。解説は後述。
#!/usr/bin/perl -w
# This is free software with ABSOLUTELY NO WARRANTY.
# 無償・無保証・著作権放棄 (see http://lifehacks.ta2o.net/byebye-copyright.html)
# 
# Web ページへのくっつけ方 (例): 
# <div class="rssbox">
# <script language="JavaScript" src="readme.js"></script>
# </div>

use strict;

my $output_fn = shift; # JS出力先ファイル名

### ReadMe! の登録情報ページへのアクセス(事情によりwget使用) 
`/usr/bin/wget -O /var/tmp/a -q http://s.readmej.com/m/yto/nais.to`; ###ここ変更!###
open(F, "/var/tmp/a") or die;
my $readme_cont = join('',<F>);
close F;

### ランキング情報取り出し
my @plist;
while ($readme_cont =~ 
  m|<TR>\n<TD>(http.+?)</TD>\n<TD ALIGN="right">(\d+)</TD>\n</TR>|gsm) {
    my ($u, $c) = ($1, $2);
    next if ($u !~ /\d{4}-\d\d-\d\d-\d+.html/); ###ここ変更!###
    push @plist, {'url'=>$u, 'count'=>$c};
}
die if (@plist == 0);

### 記事ページからの title 情報の取り出し
use LWP::Simple;
foreach (@plist) {
    my $u = $_->{url};
    my $c;
    ($c = get($u)) or die "Can't get $u\n";
    ($_->{title}) = ($c =~ m|<title>(.+?)</title>|smi);
}

### JavaScript ファイル作成
my $str = "<ul>";
foreach (@plist) {
    $_->{title} =~ s/\'//g;
    $str .= qq(<li><a href="$_->{url}">$_->{title}</a> ($_->{count}));
}
$str .= "</ul>";
$str =~ s/\n//g;

open(F, "> $output_fn") or die "Can't open $output_fn : $!\n";
print F "document.writeln('$str');\n";
close(F);
(「無償・無保証・著作権放棄」<http://lifehacks.ta2o.net/byebye-copyright.html>)


■仕組みについて解説

登録情報ページ(例:<http://s.readmej.com/m/yto/nais.to>)では、以下のようにアクセス数上位10ページ分がtableで表示されています。

http://nais.to/~yto/clog/762
(no referer)382
http://nais.to/~yto/clog/2003-07-10-2.html126
http://nais.to/~yto/clog/index.html109
http://nais.to/~yto/clog/2005-07-08-5.html89
http://nais.to/~yto/clog/2005-08-22-1.html76
http://nais.to/~yto/clog/2003-07-11-4.html70
http://nais.to/~yto/clog/2005-02-24-3.html52
http://nais.to/~yto/clog/2005-08-22-3.html52
http://nais.to/~yto/clog/2005-08-16-6.html48

私のBlogの記事別ページの URL は「\d{4}-\d\d-\d\d-\d+.html」という正規表現で絞り込めますので、それで取り出します。
そして、それぞれの URL にアクセスし、そのページの title も取り出します(chalow なので cl.itemlist を使えば楽ですが、ちょっとだけ汎用化)。
あとは「くっつき化」(JavaScript ファイル化) するだけです。

負荷を考えて、crontab で一日一回実行するようにしました。
この記事に言及しているこのブログ内の記事