Xml-RPCを使う(サーバー編)

次はサーバー側を作ってみる。あちこち読んでよく分からなかったのが、クライアント側から引数として名前付き(api_key=>"....")で渡しているものを受け付けるサンプルが見当たらなかったのでどうすればいいのかわからなかった。

そこで、前回作ったクライアント側は、flickrに名前付きの引数できちんと渡せている事が分かっているのでこれに応答するものを作ってみた。

結果からいくと、引数の1つ目がHash構造でわたってくるのでその中を解析すればきちんと個別のパラメータを取れる事が分かった。

require "xmlrpc/server"

serv = XMLRPC::Server.new("8080")
#CGIとして稼働するときは、上の1行を下の行に書き換える。Apacheの配下等に置けばこれで動作する
#serv = XMLRPC::CGIServer.new()

serv.add_handler("flickr.photos.getRecent") do |params|
     #渡された引数
      params["api_key"]
      params["page"]
      params["per_page"]
      #後は何か処理を書く
end

serv.set_default_handler do |name, *args|
    raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
                                     " or wrong number of parameters!")
end

serv.serve

とりあえず、これで簡単なサンプルとしては動くように見える。