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"]
とか。