「複数 URL の livedoor クリップ件数の合計」を表示する

先日,"API を用いて「複数 URL のはてなブックマーク件数の合計」を表示する tDiaryRuby スクリプト" [2007-01-28] という記事を書いたんだけど,今度はこれを livedoor クリップ用に拡張してみる.



はてなブックマークと同様,livedoor クリップにも API が用意されている.

だいたいはてブ API と似ているので,Ruby を全く知らない自分でも見よう見真似でスクリプトが書けた.proxy の動作が良くわかんなかったので(激ぉ,使ってないけどいいかな (というか Ruby の XMLRPC::Client の仕様ってどのへん見れば載ってるんですかね.探したけど見当たらない).以下の内容を livedoor_clip_counter.rb として tDiary のトップページに置く.

#!/usr/bin/ruby
require 'xmlrpc/client'
require 'timeout'
class LivedoorClipCounter
   def initialize
      @client = XMLRPC::Client.new2('http://rpc.clip.livedoor.com/count')
   end
   def count urls
      begin
         @client.call('clip.getCount', *urls)
      rescue XMLRPC::FaultException => e
         e.faultString
      rescue TimeoutError => e
      end
   end
end
if __FILE__ == $0
   if ARGV.size != 1
      print "usage: #{__FILE__} urls\n"
      exit
   else
      result = LivedoorClipCounter.new.count(*ARGV)
      result.each do |url, count|
         puts "#{url} #{count}"
      end
   end
end

はてブの時と同様,コマンドラインからも使えるようになっている.また相変わらず Timeout::Error まわりは保留(激ぉ [2007-02-03]



で,permalink.rb 内で全く同様に

require 'livedoor_clip_counter'

した上で,

    lcc = 0
    resl = LivedoorClipCounter.new.count( urls )
    resl.each do |url, countl|
        lcc += countl
    end

lcc に件数を入れ,

<a href="http://b.hatena.ne.jp/entry/#{pml}"><img src="http://image.clip.livedoor.com/img/users/medium/#{'%05d' % lcc}.png" style="border: none;" alt="livedoor クリップ数" title="livedoor クリップ数" align="absmiddle" /></a>

で表示.



ついでに del.ici.ous もやろうかと思ったんだけど,API がなくて JSON の扱いがとても面倒そうだったのでやめてアイコンだけ表示することにした(ぉ.



さらについでに,以下のサイトにある JavaScript を利用して,tDiary 以外のコンテンツに対してもソーシャルブックマーク数を表示させることにした.こちらは JSON を自前で処理して del.ici.ous のブックマーク数も表示できるようになっている.

ただし,この JavaScript では del.ici.ous 用の件数を画像でなくて文字列で表示し,さらにそこに下線を引いているため,うちのサイトで表示させるとリンク用の下線と 2 重になってしまい,見苦しい (上記の日経 BP や著者のサイトではもともとリンクに下線を引いていないので問題ない).なので,CSS で下線なしリンク用のクラス a.noline を新たに定義し,JavaScript 内でリンクを発行する際に noline 属性を与える必要があった.

a.noline{ text-decoration:none; }
    var delicious_html = '<a href="http://del.icio.us/url/?url='+encurl+'"'+
        ' title="del.icio.us" class="noline">'+
        '<img src="'+DELICIOUS_ICON+'" width="14" height="14" border="0"'+
        ' style="vertical-align:middle; margin-right:2px;">'+
        '<span id="delicious_count_'+encurl+'"'+
        ' style="font-family:Verdana,Arial,Helvetica;'+
        ' font-size:10px; vertical-align:middle;'+
        ' color:#FF6563; background:#FFF0F0;'+
        ' font-weight:bold; text-decoration:underline;"></span></a> ';