2006-10-16
「はてなブックマーク件数取得API」の(複数指定可能/50件まで)に対処したdiff
(追記:[1768] - Plagger - Tracで訂正されてcommitされた)
配列を50件ずつspliceしてpushしてるけど、これで良いのかどうか聞きたいところ。(配列をn件ずつ取り出して処理する方法って、Perl Cookbookとかに載ってそうだな……)
diffの大半はインデントの修正。
はてなAPIの制限についてははてなブックマーク件数取得APIとは - はてなキーワードを参照。
=== lib/Plagger/Plugin/Filter/HatenaBookmarkUsersCount.pm ================================================================== --- lib/Plagger/Plugin/Filter/HatenaBookmarkUsersCount.pm (revision 1658) +++ lib/Plagger/Plugin/Filter/HatenaBookmarkUsersCount.pm (local) @@ -16,24 +16,30 @@ my($self, $context, $args) = @_; my @permalink = map $_->permalink, $args->{feed}->entries; + my @permalinks = (); + while (@permalink) { + push @permalinks, [ splice(@permalink, 0, 50) ]; + } - $context->log(info => 'Requesting XMLRPC call to Hatena Bookmark with ' . scalar(@permalink) . ' link(s)'); + for my $urls (@permalinks) { + $context->log(info => 'Requesting XMLRPC call to Hatena Bookmark with ' . scalar(@$urls) . ' link(s)'); - my $map = XMLRPC::Lite - ->proxy('http://b.hatena.ne.jp/xmlrpc') - ->call('bookmark.getCount', @permalink) - ->result; + my $map = XMLRPC::Lite + ->proxy('http://b.hatena.ne.jp/xmlrpc') + ->call('bookmark.getCount', @$urls) + ->result; - unless ($map) { - $context->log(warn => 'Hatena Bookmark XMLRPC failed'); - return; - } + unless ($map) { + $context->log(warn => 'Hatena Bookmark XMLRPC failed'); + return; + } - $context->log(info => 'XMLRPC request success.'); + $context->log(info => 'XMLRPC request success.'); - for my $entry ($args->{feed}->entries) { - if (defined(my $count = $map->{$entry->permalink})) { - $entry->meta->{hatenabookmark_users} = $count; + for my $entry ($args->{feed}->entries) { + if (defined(my $count = $map->{$entry->permalink})) { + $entry->meta->{hatenabookmark_users} = $count; + } } } }
n件ずつ切り出して処理は
while (my @links = splice(@permalink, 0, 50)) { # @links }
こんなのでOkだ。
ちゅーことでsvk revertした。
コメント
トラックバック - http://subtech.g.hatena.ne.jp/otsune/20061016
