はてなダイアリ以外にもはてなが提供しているサービスはいくつかある。はてなアンテナやはてなブックマークだ。で、そのへんに関連する情報をXML-RPCを用いて問合せするAPIがあって、「被ブックマーク合計数取得API」はそのひとつ。
例のコードはPerlで書いてあるのだれども、ちょっとためしにGaucheを使って書いてみた。Gauche 0.8.8リリース記念ということで。
(use text.tree) (use sxml.tools) (use sxml.ssax) (use rfc.http) (define (make-request uri) (call-with-output-string (lambda(str-port) (write-tree `(,"<?xml version='1.0'?>" ,@ (sxml:sxml->xml `(methodCall (methodName "bookmark.getTotalCount") (params (param (value (string ,uri))))))) str-port) (get-output-string str-port)))) (define (parser xml) (string->number ((ssax:make-parser NEW-LEVEL-SEED (lambda a '()) CHAR-DATA-HANDLER (lambda (s1 s2 seed) s1) FINISH-ELEMENT (lambda (elem-gi attributes namespaces parent-seed seed) seed)) (open-input-string xml) '()))) (define (getTotalCount uri) (receive (result-number headers body) (http-post "b.hatena.ne.jp" "/xmlrpc" (make-request uri)) (parser body)))
getTotalCountにuriを渡すとブックマーク数が返ってくる。
gosh> (getTotalCount "http://d.hatena.ne.jp/SaitoAtsushi/") 11
案外多いような少ないような。
ところで、初めてssaxを使ってみたのだけれど、なかなか使いでがありそう。今回はかなりやる気なさげな使い方しかしてないのに、これでXMLがパースできるんだから立派なものだ。実際には木の最後の末端を取得してるだけ。
Document ID: a71054a6b37691cd7e893a580712428f