RubyでXML-RPCを使ってweblogUpdates Pingを送る

ブログの更新通知などに使われているweblogUpdates PingをRubyで送ることを試してみた。
特に目新しいことはないけど自分用メモ。

XMLRPC::Clientを使えば簡単に送ることができるようだ。

Pingサーバ

とりあえず以下のPingサーバに送ってみる。

  • http://rpc.technorati.jp/rpc/ping
  • http://api.my.yahoo.co.jp/RPC2
  • http://blogsearch.google.co.jp/ping/RPC2
  • http://blog.goo.ne.jp/XMLRPC

コード

以下が全コード。

require 'xmlrpc/client'

ping_servers = [
  "http://rpc.technorati.jp/rpc/ping",
  "http://api.my.yahoo.co.jp/RPC2",
  "http://blogsearch.google.co.jp/ping/RPC2",
  "http://blog.goo.ne.jp/XMLRPC",
]

ping_servers.each do |ping_server|
  client = XMLRPC::Client.new2(ping_server)
  begin
    res = client.call("weblogUpdates.ping", 'ひげろぐ', 'http://brass.to/blog/')
  rescue Exception => e
    res = {"message" => "#{e.class}: #{e.message}", "flerror" => nil}
  end
  p ping_server
  p res["message"]
end

XMLRPC::Client.new2でインスタンスを作って、callでリクエストを送る。
引数は見ての通り。

例外補足はPingサーバにつながらなくてソケットエラーとかもあるのでざっくり実装した。

レスポンスの見方

結果は以下のようなハッシュで返ってくる。

キー 内容
“message” ThanksとかOKとかInvalidとか人が読める結果
“flerror” 成功したら true 失敗したら false

XML的にはこんなのらしい。

<methodResponse>
<params>
<param>
<value><struct>
<member><name>flerror</name>
<value><boolean>0</boolean></value>
</member>
<member><name>message</name>
<value><string>Thanks for the ping.</string></value>
</member>
</struct></value>
</param>
</params>
</methodResponse>

実際はバックグラウンドで動かす処理だろうからこの内容をログに書いとけばいいだろうね。
Railsだったら

logger.info res["message"]

とか。

参考