指定したURLの被ブックマーク件数を取得するスクリプト

はてなブックマークの被ブックマーク件数を取得するスクリプト
さすがにこれはワンライナーだとキツそうだったので普通に書いてみた。

#!/opt/local/bin/perl
use strict;
use warnings;

use Encode 'encode_utf8';
use LWP::Simple 'get';
use XML::RSS;
use XMLRPC::Lite;

# 引数:URL, 閾値
my $target = shift;
my $threshold = shift;
unless (defined $target) {
    print STDERR "usage: $0 <target_url> <threshold (optional)>\n";
    exit;
}

# 取得するRSSのURL生成
my %params = (
    'mode' => 'rss',
    'sort' => 'eid',
    'url'  => $target,
);
if (defined $threshold) {
    $params{threshold} = $threshold;
    $params{sort} = 'hot';
}
my $url = 'http://b.hatena.ne.jp/entrylist?'
  . join('&', map { "$_=$params{$_}" } keys %params);

# RSSの取得
my $rss = new XML::RSS;
$rss->parse(get $url);

# 各エントリの被ブックマーク数を取得
my $results = XMLRPC::Lite
  ->proxy('http://b.hatena.ne.jp/xmlrpc')
  ->call('bookmark.getCount', map { $_->{link} } @{$rss->{items}},)
  ->result;

# 結果の表示
for (@{$rss->{items}}) {
    printf("%3d: %s\n",
           $results->{$_->{link}},
           encode_utf8($_->{title}));
}


実行例:

$ ./hatebu.pl 
usage: ./hatebu.pl <target_url> <threshold (optional)>
$ ./hatebu.pl 'http://d.hatena.ne.jp/sugyan/'
  4: 16進数のテーブルを表示するワンライナーを考える まとめ - すぎゃーんメモ
  1: GenesisLightningTalks Vol.14 に行ってきた - すぎゃーんメモ
  7: 16進数のテーブルを表示するワンライナーを考える - すぎゃーんメモ
  1: GenesisLightningTalks Vol.14 に行ってきた - すぎゃーんメモ
  1: 清楚なクライアントを試してみた - すぎゃーんメモ
 19: SoozyCon7に行ってきた - すぎゃーんメモ
  1: zsh始めてみる - すぎゃーんメモ
  1: Google App Engine でloggingを使ってログを出力する - すぎゃーんメモ
  2: 何かの画像をワンライナーとか何かで取得する - すぎゃーんメモ
  1: 美人時計の画像ファイルをワンライナーで取得する - すぎゃーんメモ
  4: 高機能ライブラリ「jQuery」とそのPlugin「Validation」 - すぎゃーんメモ
  5: 美人時計の画像ファイルをワンライナーで取得する - すぎゃーんメモ
  1: W45TからiPhoneへの電話帳データ移行 - すぎゃーんメモ
 16: 美人時計の画像ファイルをワンライナーで取得する - すぎゃーんメモ
  3: Google App Engine でBasic認証を実装 - すぎゃーんメモ
  2: Google App Engine でBasic認証を実装 改 - すぎゃーんメモ
  8: 連想配列の最後にカンマを入れてはいけない言語もある - すぎゃーんメモ
  2: GenesisLightningTalks Vol.13 で喋ってきた その2 - すぎゃーんメモ
  3: 70年代の先輩方と麻雀してきた - すぎゃーんメモ
  1: GenesisLightningTalks Vol.13 で喋ってきた その1 - すぎゃーんメモ
  1: 1行自己紹介 - すぎゃーんメモ
  2: Sierpinski triangleワンライナー - すぎゃーんメモ
  1: Acme::EyeDropsすげーーー - すぎゃーんメモ
  6: マジカルインクリメントによる文字列操作 - すぎゃーんメモ
  5: デブサミ2009に、ちょっとだけ行ってきた - すぎゃーんメモ
  1: ファイルハンドルの出力先に変数を指定する - すぎゃーんメモ
  1: 2009-02-06 - すぎゃーんメモ
 29: ワンライナー記号化スクリプトを書いた - すぎゃーんメモ
  2: GenesisLightningTalksで喋ってきた! その2 - すぎゃーんメモ
  4: GenesisLightningTalksで喋ってきた! - すぎゃーんメモ
$ ./hatebu.pl 'http://d.hatena.ne.jp/sugyan/' 5
  7: 16進数のテーブルを表示するワンライナーを考える - すぎゃーんメモ
 19: SoozyCon7に行ってきた - すぎゃーんメモ
  5: 美人時計の画像ファイルをワンライナーで取得する - すぎゃーんメモ
 16: 美人時計の画像ファイルをワンライナーで取得する - すぎゃーんメモ
  8: 連想配列の最後にカンマを入れてはいけない言語もある - すぎゃーんメモ
  6: マジカルインクリメントによる文字列操作 - すぎゃーんメモ
  5: デブサミ2009に、ちょっとだけ行ってきた - すぎゃーんメモ
 29: ワンライナー記号化スクリプトを書いた - すぎゃーんメモ
  5: 第十二回java-jaに行ってみた - すぎゃーんメモ
  7: iPhoneアプリにおけるローカライズの挙動が謎 - すぎゃーんメモ


参考:
はてなウェブサービス
はてなブックマーク件数取得APIとは - はてなキーワード