referer収集の応用を考える(2)

で、(と、前回から10日以上も経った後に一言で続けるのも無理があるような気もしますが)refererを記録してHTMLとして表示するスクリプトを作ってみたのですよ。

refbackという名前にしてるのはTrackBackとかPingBackとかの影響でございます。現在短編の第12期目次・作品ページにて試験運用中。特徴としては以下のような感じです。

リンク元ページのタイトルをどのように取ってくるかが一番の考えどころでありました。当初はページをまるごと取ってきてタイトル抽出という風にしてたのですが、サーバになるべく負担がかからないよう、lwpクックブックの日本語訳を読みつつ以下のようなコードにしてみました。LWP::UserAgentモジュールは初めて使ったので、これでいいのかどうか不安なところではありますが。

use LWP::UserAgent;

sub gettitle {
        my $url = shift or return undef;   # 引数がなかったら偽を返す
        my $ua = LWP::UserAgent->new;
        my $req = HTTP::Request->new(GET => $url);
        $req->header("Accept" => "text/html");
        my $res = $ua->request($req,
                sub {
                        my($chunk, $res) = @_;
                        # titleを得るかhead要素が終わるまで読みこむ
                        die if ($res->title or ($chunk =~ m{</head}i));
                });
        return $res->title;
}

(2003年7月29日)

北村曉 kits@akatsukinishisu.net