読者です 読者をやめる 読者になる 読者になる

YAPC::ASIA 2012の参加者ブログのはてブ数Top20を抽出するスクリプト書いた

YAPC::ASIA2012行きたかったなー行きたかったなー行きたかったなー

と言っても、行けなかったもんはしょうがないので参加者のブログでも読んで少しでも雰囲気を味わおうと思いました。
が、全部で100件以上もあり流石に全部読むのはシンドイので、はてブ数Top20を取得するスクリプトかきました。
ほぼ以下のサイトのパクリ
Webスクレイピング入門 - Perl Advent Calendar Japan 2011 Casual Track

スクリプトは以下。

use strict;
use warnings;
use Encode;
use LWP::UserAgent;
use URI::Escape;
use Web::Query;

my $top_x = 20;

my $ua = LWP::UserAgent->new;

my $url = 'http://yapcasia.org/2012/news/yapcasia-2012-blog.html';
my @tracks = ();
wq($url)->find('div.entry-contents p:nth-child(3) a')->each(sub {
    my $escaped_url = uri_escape($_->attr('href'));
    # APIを使ってブックマーク数を取得する
    my $res = $ua->get("http://api.b.st-hatena.com/entry.count?url=$escaped_url");
    die $res->status_line unless $res->is_success;
    my $count = $res->content || 0;

    push @tracks, [$_->attr('href'), $count];
});

for my $track (&top_x(\@tracks, $top_x)) {
    printf "[%s:title] : %d\n", $track->[0], $track->[1] if $track->[1] > 10;
}

sub top_x {
    my $tracks = shift;
    my $x = shift;
    (sort { $b->[1] <=> $a->[1] } @{$tracks})[0..$x];
}

結果はhatena記法で出してます。でも、ここに貼り付けても更新できないので結果は載せません。試したい人は適当にスクリプト動かしてみてください。$top_xを変更すれば上位数を変更できます。