RubyからBuzznet APIを呼び出す

XML-RPCによる呼び出し

Rubyにはxmlrpcのライブラリが添付されているので、それを利用します。APIを呼び出すときは、XMLRPC::Clientを使うので、以下の宣言が必要。

require 'xmlrpc/client'

で、まずはXMLRPC::Clientのインスタンスを作成。インスタンス作成用のクラスメソッドは以下の2つが便利でしょう。

Client.new( host = "localhost", path = "/RPC2", port = 80 or 443,
            proxy_host = nil, proxy_port = nil, user = nil,
            password = nil, use_ssl = false, timeout = 30)
Client.new3( hash = {} )

XMLRPC::Client.new3を利用する場合は、パラメタのハッシュのキーには次のものがあります。

  • host
  • paht
  • port
  • proxy_host
  • proxy_port
  • user
  • password
  • use_ssl
  • timeout

デフォルト値はClient.newに準じる(気がする)←未確認
で、インスタンス作成。今回はClient.new3を使いました。

params = {:host => 'www.buzznet.com',
          :path => "/interface/xmlrpc/?key=my_api_key",
          :port => 80,
          :user => username,
          :password => password}
client = XMLRPC::Client.new3(params)

my_api_keyには適宜自分のAPI keyで置き換える。ちなみに、Client.new3のパラメタのキーはcase-insensitiveなので、

params = {:Host => 'www.buzznet.com',
          :Path => "/interface/xmlrpc/?key=my_api_key",
          :pORt => 80,
          :UseR => username,
          :paSSwoRd => password}

とかにしてもリクエストは普通に成功します。が、そんな変態的なキーを使うのはよっぽどのマゾでしょう。
インスタンスを作成したら、次はいよいよAPIを呼び出しましょう。メソッドの呼び出しは

XMLRPC::Client#call( method, *args )

を使います。メソッド名、パラメタは、API Documentationを参照。例えば、getGallery(ユーザーの写真取得)の場合は

res = client.call "buzznet.getGallery", "username", "user",
                  "", 0, 30

とすると、リクエストが成功した場合resにはXMLRPCのレスポンス(XML)が、Rubyの型に変換されて代入されます。getGalleryの場合は

res #=> [
          { 'entry_id' => 123456,
            'img_small' => 'http://hogehoge.com/hogehoge.jpg',
            ...
          }, 
          { 'entry_id' => 234567,
            'img_small' => 'http://hogehoge.com/hogehoge.jpg',
            ...
          },
        ...
       ]

と、各画像の情報が入ったハッシュの配列が戻ってきます。

未解決問題

$KCODE='u'で、ソースコード文字コードUTF-8の状態で、日本語をポストすると化ける。文字コードの問題は往々にして解決が面倒&いんちきhackをかまさないといけないことがある*1ので、解決には少々時間がかかりそう。

*1:これは自分のスキルの低さが主たる原因だろうけど