「画像で取得する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> ...
な感じにする.
最終更新時間: 2009-01-04 15:31
* [Jace] This is just the perfect aswner for all ... (2013-01-01 17:56:57)