/ / 最新

swk's log - はてなブックマーク数を件数取得APIからまじめに取って来る

2006-07-16

* はてなブックマーク数を件数取得APIからまじめに取って来る [logging][chalow]

「画像で取得するAPI」ではてなブックマーク件数をお手軽に表示してみた矢先なのだが [2006-07-15-3],やっぱりやめた.

はてなが重いときとか反応しないときに,自分のページの表示が影響を受けるのが嫌だってのがまずあるけど,そのときに,あー,俺いまはてなサーバに無駄に負担かけてるーという罪悪感があって精神衛生上よろしくない. (いや,もちろんトラフィック全体からみると,うちから発生する分なんて誤差に過ぎないわけですが,単に気持ちの問題なので)

つうわけで真面目にはてなブックマーク件数取得APIを叩いてみることにしたですよ.

やり方はいろいろあると思いますが,定期的に件数を取りに行っておいて, HTML から SSI で include することにしてみた.こんなのを cron で定期的に走らせます:

#!/usr/bin/perl

use strict;
use XMLRPC::Lite;

my $html_clog_url = 'http://www.kagami.org/diary'; # don't add trailing slash
my $html_clog_dir = '/home/swk/www/diary';
my $hatebu_count_dir = '/home/swk/www/hatebu_count';

my $EndPoint = 'http://b.hatena.ne.jp/xmlrpc';
my @urls = ();

while (<$html_clog_dir/*.html>) {
    next unless /\/(\d{4}-\d{2}-\d{2}-\d+)\.html$/;
    my $ymdi = $1;
    push(@urls, "$html_clog_url/$ymdi.html");

    if (@urls == 50) {
        &writecount(\@urls);
        @urls = ();
        sleep(3);
    }
}
if (@urls > 0) {
    &writecount(\@urls);
    @urls = ();
}

sub writecount
{
    my ($uref) = @_;
    
    my $map = XMLRPC::Lite->proxy($EndPoint)
        ->call('bookmark.getCount', @{$uref})->result;

    foreach (@{$uref}) {
        my $url = $_;
        my $count = $map->{$_};
        my ($ymdi) = ($url =~ /\/(\d{4}-\d{2}-\d{2}-\d+)\.html$/);

        if ($count > 0) {
            my $str_count = $count . " user" . (($count > 1)? 's': '');
            my $str = << "HTML";
<span class="hatebu_count">
<a href="http://b.hatena.ne.jp/entry/$html_clog_url/$ymdi.html">
$str_count</a></span>
HTML
            ;
            &save_file("$hatebu_count_dir/$ymdi.htmlin", \$str);
        } elsif (-e "$hatebu_count_dir/$ymdi.htmlin") {
            unlink("$hatebu_count_dir/$ymdi.htmlin");
        }
    }
}

sub save_file { # from kuttukibbs-1.0rc3
    my ($fn, $strp) = @_;
    open(F, "> $fn") or die "can't open $fn : $!\n";
    flock(F, 2);
    print F $$strp;
    close F;
}

chalow のテンプレートは,

...

<h3 class="subtitle"><TMPL_VAR name=header> <TMPL_VAR name=cat>
<!--#include virtual="../hatebu_count/<TMPL_VAR name=ymdi>.htmlin" -->
</h3>

...

な感じにする.

関連記事:
[2006-07-15-3] はてなブックマーク数を画像で取得するAPI
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Jace] This is just the perfect aswner for all ... (2013-01-01 17:56:57)

最終更新時間: 2009-01-04 15:31


Shingo W. Kagami - swk(at)kagami.org