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:これは自分のスキルの低さが主たる原因だろうけど