Ruby で XML-RPC を使用して、ブログの更新状況を Ping サーバに送信する方法についてです。
WordPress のような動的サイトなら、記事投稿時にプラグインで指定の Ping サーバに更新情報を Ping 送信してくれますが、 Octopress のような静的サイトでは通常そのようなことができません。
という訳で、Ruby で作成してみました。
取り敢えず手動ですが、サーバで cron 起動するなりすれば、自動になります。
0. 前提条件
- Ruby 1.9.3-p327 で作成・動作確認。
1. Ruby スクリプト作成
作成した Ruby スクリプトは以下の通り。
実際使用する際は、「Ping サーバ一覧」に URL を記入する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
GitHub にもアップしている。( komasaru/SendUpdatePing )
2. Ruby スクリプト実行
以下のようにして Ruby スクリプトを実行する。
1
|
|
失敗した場合のみ、メッセージを表示するようにしているが、成功した場合は XMLRPC::Client#call
の返り値として以下のような内容が返ってるはず。
1
|
|
3. その他
今回は weblogUpdates.ping
を使用しましたが、Ping サーバによっては、拡張された weblogUpdates.extendedPing
を使用できる場合があります。
引数に、サイトURLとは別に記事のURLとRSSのURLを追加して使用します。
当方は実際には、 weblogUpdates.extendedPing
で一旦 Ping 送信し、失敗した場合に weblogUpdates.ping
で Ping 送信し直すような処理にしています。
4. 問題点
Ruby で XML-RPC を使った場合、content-type
が text/xml
以外だとエラーになるようです。
実際には、以下のようなエラー。
1
|
|
このエラーについては、対策していません。
ライブラリを直接修正すれば、対応可能のようですが、他に複数の Ping サーバも利用しているので、今のところは放っています。
5. 参考サイト
- Rubyist Magazine - 標準添付ライブラリ紹介 【第 1 回】 XMLRPC4R
- class XMLRPC::Client
- XML-RPC§更新Pingの送信 - isnot.jp/wiki
さらに、当方はサーバで定期(cron)起動(エラー時にはメールで通知)するようにしています。
そして、エラーメールをチェックし、無効な Ping サーバ等には Ping 送信しないように整理したりしています。
以上。