otsune's SnakeOil RSSフィード

python -c "print''.join([chr(x) for x in 111&1101,110+~-~11,10^11*11,110+~-~11,-~101,-~11^11*11,~-110,111&11*11,11+11+10,11|~-0110,1-~11^11*11,10^11*11,-~11^11*11,110,101])"

2006-10-16

「はてなブックマーク件数取得API」の(複数指定可能/50件まで)に対処したdiff

「はてなブックマーク件数取得API」の(複数指定可能/50件まで)に対処したdiff - otsune's SnakeOil  を含むブックマーク はてなブックマーク - 「はてなブックマーク件数取得API」の(複数指定可能/50件まで)に対処したdiff - otsune's SnakeOil  「はてなブックマーク件数取得API」の(複数指定可能/50件まで)に対処したdiff - otsune's SnakeOil  のブックマークコメント

(追記:[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