いろいろ
Seize the day.
2007-01-28 [長年日記]
■ [comp] API を用いて「複数 URL のはてなブックマーク件数の合計」を表示する tDiary 用 Ruby スクリプト
「複数 URL のはてブ件数の合計」を表示するスクリプトです.なんでそんな奇特なことを,と思った方も多いと思うが,あれなんですよ.えーと,tDiary って記事単位の permalink がなくて,各記事はアンカーで区別されてるので,あるページへのブックマーク URL にアンカーがある場合とない場合があるんですよ.何言ってるかわかりませんね.ええと,例えばこの記事をブクマするのに,
- http://nao.s164.xrea.com/td/2007-01-28.html (日付単位の permalink)
- http://nao.s164.xrea.com/td/2007-01-28.html#p01 (記事を指し示すアンカー)
なお本方式では,同じ日付に複数の記事エントリがあった場合に,それぞれを指すブックマークが無理矢理足されてしまって日付単位のブックマーク数になってしまうわけだけど,別にそれでいいやってのが自分の考え.昔はともかく,最近は諸般の理由から意識的に 1 日 1 エントリを心がけているから問題はあまりないはずなのだ.また,本来は記事ごとにブクマ数を表示すべきなんだろうし,そういうプラグインもいくつかあるが (これとかいしなおさんのとことか),キャッシュが必要だったりして面倒くさい.何より,そこまでのスキルが自分にはない.
前置きが長くなったが,とりあえずまずは件数を取得するところから.単にある記事の件数を画像で取得するなら この API [2006-07-16] で十分なんだけど,今回はその件数を足し算したりしないといけないので,コードをかくことにした.「はてなブックマーク件数取得API」の仕様は以下に詳しい. で,tDiary に載せるためには Ruby で実装する必要があるわけだが,自分は Ruby が全然わからない(激ぉ.なので,とりあえず他人様のコードを参考にさせてもらう.ここのコードが,すぐにライブラリとして使えるようになっていて激しく便利そう. ただしこれは「サイトのはてなブックマーク総数」を取得するコードなので,bookmark.getTotalCount が使われている.今回は記事ごとの件数を取得するので,bookmark.getCount にしないといけない.しかもその場合は「URL と被ブックマーク件数のペアの構造体」が返ってくるので,件数だけを取り出さないといけない.
というわけで,さらにこちらのコードを参考にする.ここのコードは複数 URL の処理も扱っているので,なにげに自分の野望にとっては大変都合がよい. 結局,以下のようなコードを hatena_bookmark_count.rb として,tDiary のトップディレクトリに置いた.
#!/usr/bin/ruby
# http://www.smallstyle.com/20061004.html
# http://d.hatena.ne.jp/toward/20051222/ruby_xmlrpc_client_hatena_bookmark_count
require 'xmlrpc/client'
class HatenaBookmarkCounter
def initialize
@s = XMLRPC::Client.new('b.hatena.ne.jp', '/xmlrpc')
end
def count urls
begin
@s.call('bookmark.getCount', *urls)
rescue XMLRPC::FaultException => e
e.faultString
end
end
end
if __FILE__ == $0
if ARGV.size != 1
print "usage: #{__FILE__} \n"
exit
else
result = HatenaBookmarkCounter.new.count(*ARGV)
result.each do |url, count|
puts "#{url} #{count}"
end
end
end
一応コマンドラインからも使えるようにはなっていて,
% ruby hatena_bookmark_counter.rb http://nao.s164.xrea.com/td/2007-01-28.html http://nao.s164.xrea.com/td/2007-01-28.html 2とかできるのはオリジナルと一緒.
さて,次はこれを permalink プラグインから呼び出す.permalink プラグインというのは,[2005-09-01] [2006-07-16] あたりで適当に作ってみた permalink やはてブ数表示用のごった煮ルーチン.この内部で,
require 'hatena_bookmark_counter'した上で,
pml = "#{@conf.base_url}#{@pl_date.strftime( '%Y-%m-%d' )}.html"
hbc = 0
urls = [pml,"#{pml}#p01","#{pml}#p02"]
res = HatenaBookmarkCounter.new.count( urls )
res.each do |url, count|
hbc += count
end
として hbc に合計件数を入れている.ここで,ある日付のページに対し,「そのページ自身」「そのページの第 1 エントリ」「第 2 エントリ」に対する各ブックマークの合計を出しているのがちょっとしたインチキである.本当はそのページに含まれるエントリ数を参照して,その分だけ urls の要素を増やせれば良かったんだけど,やり方がわからなかった.誰かご存知なら教えて下さい.で,こんな風にして件数画像を取得している.
<img src="http://b.hatena.ne.jp/images/users/large/#{'%05d' % hbc}.png" style="border: none;" alt="はてなブックマーク数" title="はてなブックマーク数" align="absmiddle" />
PNG 画像を直接参照しているのもなかなかバッドノウハウ的だけど,まあいいよね(ぉというわけで,例えばこのページ (2007-01-28.html) へのブックマーク数は現在
念のため,現在のごった煮 permalink.rb の内容は以下の通り.プラグインディレクトリに置いている.
require 'hatena_bookmark_counter'
add_body_leave_proc do |date|
@pl_date = date
''
end
def comment_new
cgi = @options['tb.cgi'] || './tb.rb'
url = "#{cgi}/#{@tb_date.strftime( '%Y%m%d' )}"
pml = "#{@conf.base_url}#{@pl_date.strftime( '%Y-%m-%d' )}.html"
hbc = 0
urls = [pml,"#{pml}#p01","#{pml}#p02"]
res = HatenaBookmarkCounter.new.count( urls )
res.each do |url, count|
hbc += count
end
%Q| ツッコミ</a> \| <a href="#{@pl_date.strftime( '%Y-%m-%d' )}.html">permalink</a> \| <a href="#{@tb_url}">trackback</a> \| <a href="http://b.hatena.ne.jp/entry/#{pml}"><img src="http://b.hatena.ne.jp/images/users/large/#{'%05d' % hbc}.png" style="border: none;" alt="はてなブックマーク数" title="はてなブックマーク数" align="absmiddle" /></a> <a href="http://b.hatena.ne.jp/append?#{@conf.base_url}#{@pl_date.strftime( '%Y-%m-%d' )}.html"><img src="http://d.hatena.ne.jp/dav/images/icon/bookmark/bookmark_br.gif" style="border: none;" alt="このエントリーをはてなブックマークに追加" title="このエントリーをはてなブックマークに追加" width="16" height="12" align="absmiddle" /></a> |
end
def comment_description; 'ツッコミ・コメントがあればどうぞ! E-mail アドレスは公開されません (省略可).'; end
def navi_index; 'home'; end
*1: 記事ごとに permalink が発行できないのは tDiary で個人的に気に入らない点の一つ.じゃあ BlogKit 使えよという話もあるけど,日付の概念がなくなってしまうのが気に入らない.追記: 時々うまく画像が取得できないことがあるようで,リロードすると出て来ます.うーむ.なんでだろ.
[ ツッコミ | permalink | trackback ]
[TrackBack URL: http://nao.s164.xrea.com/td/tb.rb/20070128]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
本日のリンク元
- はてなダイアリーキーワード ×19 : 18, 1
- はてなダイアリーキーワード (はてなブックマーク件数取得API)?kid=146686 ×4
- はてなダイアリー: foodp さん ×2
- はてなブックマーク (http://nao.s164.xrea.com/td/) ×1
- はてなダイアリー: foodp さん (2007-01-28) ×1
- Bloglines (6906746) ×1
その他のリンク元
- http://clip.livedoor.com/page/http://nao.s164.xrea.com/td/2007-01-28.html ×1
- http://search.hatena.ne.jp/search?word=getCount はてな&site=&from= ×1
- http://search.hatena.ne.jp/search?word=はてな ブックマーク エントリー数&from=b&ie=utf8 ×1
検索
- tdiary はてなブックマーク ×8 / 件数の合計 ×3 / はてなブックマーク件数取得API ×3 / はてなブックマークエントリー情報取得API ruby ×2 / hatena bookmark api tdiary ×2 / 複数 ブックマーク ×2 / hatena api ×2 / tdiary はてな ブックマーク ×2 / はてブ 件数 ×2 / はてなブックマーク 参照 tdiary ×2 / はてブ 件数 取得 ×2 / はてなブックマーク ruby ×2 / はてなブックマーク カウント ×2 / はてブ API ruby ×2 / はてな ブックマーク件数 ×2 / del.ici.ous 被ブックマーク ×2 / はてブ カウンタ 合計 ×2 / 被ブックマーク合計数取得API php はてな ×2 / はてなブックマーク api ×2 / bookmark.getTotalCount ×2 / hatena.ne.jp/append ×2 / このエントリをはてな ×2 / 被ブックマーク はてな api ×2 / はてなブックマーク tdiary ×1 / ブクマ数 tdiary ×1 / 流出 ×1 / はてなブックマーク アンカー ×1 / ブックマーク数 API ×1 / XML-RPC xrea ×1 / ruby api はてな ×1 / HTML img src res ×1 / はてな API Ruby ×1 / はてなブックマーク 件数 画像 ×1 / t-diary 記事単位 ×1 / はてなブックマークに追加 users ×1 / はてなブックマーク件数取得API ruby getTotalCount ×1 / はてな ブックマーク 合計 ×1 / はてな api php ブックマーク ×1 / tDiary はてなブックマーク ×1 / API 複数表示 ×1 / はてなブックマーク tDiary ×1 / ブックマーク カウント API ×1 / users 表示 画像 はてな ×1 / はてなブックマーク件数 ×1 / はてな 同一記事 複数 ×1 / 取得 件数 表示 ×1 / URLのはてな ×1 / 複数 URL ×1 / 被ブックマーク合計数 PHP ×1 / 複数 ブックマーク API ×1 / tDiary ブックマークレット ×1 / 被ブックマーク 合計 ×1 / はてなブックマーク 合計 ×1 / はてな API ×1 / はてなブックマーク エントリー数 ×1 / はてブ URL 複数 ×1 / はてなブックマーク件数取得API php ×1 / "はてなブックマーク" trackback ×1 / xrea API ×1 / tdiary はてブ ×1 / URL 複数 ×1 / bcc 件数 ×1 / はてな api ruby ×1 / ブックマーク API ×1 / 合計件数 ×1 / はてなブックマーク件数 画像 ×1 / 被ブックマーク合計数取得API ×1 / RSS 件数表示 count ×1 / tdiary はてブ アンカー ×1 / はてな 合計 ブックマーク ×1 / はてなブックマーク総数 ×1 / はてなブックマーク ブックマーク数 カウント ×1 / tdiary 複数記事 ×1 / ブックマーク 合計数 ×1 / はてなブックマーク 取得 ruby ×1 / はてなブックマーク数 api ×1 / はてな API ruby ×1 / bookmark gettotalcount ×1 / 複数のブックマーク ×1 / このエントリをBuzzurl ×1 / はてなブックマーク API ×1 / tdiary ブクマ数 ×1 / ruby 合計 ×1 / hatena_bookmark.rb ×1 / はてなブックマーク数 合計 php ×1 / json ruby ×1 / はてブ api ×1 / ブックマーク数 合計 ×1 / ruby 画像を取得 ×1 / pukiwiki はてなブックマーク users ×1 / はてなブックマーク append 仕様 ×1 / pml 単位 ×1 / はてなブックマーク件数取得API ruby ×1 / 被ブックマーク合計数取得API PHP ×1 / Yahoo ブックマーク 件数 取得 ×1 / ブックマーク 合計 ×1 / tdiary 複数の記事 ×1 / はてなブックマーク数 参照 ×1 / はてなブックマーク件数 表示 ×1 / はてなAPI ×1
以下の広告はサーバによって自動的に挿入されています.
Copyright © 2004-2006, nao. All rights reserved.





