PHPでweblogUpdates.ping その2: 更新Pingの仕様を研究
更新Pingを処理するサーバを自前で作ってみよう企画の第二弾、今回は更新Pingの仕様、どういった動作が期待されているのかという事の研究です。とりあえず基本的にHTTPで何か送って、それに対して返事が来る、という部分は知っていましたが、実際にサーバを書くとなるともう少し詳しい仕様が必要になるので、調べてみました。
わかった事
- プロトコルはXML-RPC。通信自体はHTTP(TCP:80)、POSTリクエスト。XML-RPC規格に沿ったXMLファイルがPOSTされてくる。
- 更新Pingは、どうやら正式にはweblogUpdates.pingという名前らしい。仕様書はWeblogs.Com XML-RPC interface(英語)。
- XML-RPC = Remote Procedure Call written in XML。要するにリモートの環境で処理(Procedure)を呼び出す(Call)のに必要な情報を、特定のXML形式に沿って書いてHTTP POSTで送りましょう、という規格。JavaにはRMI(Remote Method Invocation)なんてのがあるけども、それと似たようなものだろうか。
- ただ、仕様書を読んだ限りでは、送られてくるのがコレで、返事がコレ、という事しか決まってなくて、受け取った物で何をするかは別に自由っぽい。
- リモートで実行される関数のシグネチャは次の通り:
weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname="none") returns struct
。引数の一覧は次の通り:
- weblogname: String型、必須。ブログの名前を示す。
- weblogurl: String型、必須。ブログのURLを示す。
- cangesurl: String型、任意。変更を確認する際に読みにいくべきURL(ブログのトップURLと最新記事の載るページが違う場合に使うのかな?)。
- categoryname: String型、任意。仕様書を読んだ限り、この値がどういう意味でのカテゴリなのかが明確に示されていなかったので、用途不明。
- XML-RPC§更新Pingの送信によると、weblogUpdates.extendedPingというRPC名を使う場合は第3,4引数は必須で、第4引数にはカテゴリ名またはRSS,RDF,AtomフィードのURLが入るらしい。カテゴリとURLを混ぜるとは、なんともいい加減な仕様だ…。
- weblogUpdates.pingは、純粋に更新通知を受け取るだけの仕組みなので、更新された記事のタイトルやURLは送信されてくる情報には含まれていない。これらの情報を取得するには、更新通知のPingが送られてきてから、サーバが該当のブログのフィードの種類を自動判別して、RSSなりAtomなりを解釈して持ってくるしかない(アルェ?)。
…どうやら、weblogUpdates.pingそのものは非常に貧弱なプロトコルのようです。まぁ更新情報を通知するだけのプロトコルという事を考えるとそれも仕方ないですかね。さしあたってはping受け取りと同時にRSSを読みにいって云々はまた後ほどの実装ということにして、ごく最低限の、更新されたブログの名前とURLを取得する、という部分から実装しようかな、と思います。
参考にしたページ
TrackBack
TrackBack URL for this entry:
http://www.ppmz.com/cgi-bin/mt/mt-tb.cgi/52