XML-RPCでブログ投稿の始めの一歩「mt.supportedMethods」

XML-RPCを使ってブログを操作するためには、まずどういった操作が可能なのかを調べる必要があるでしょう。
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html
リファレンスの下部にある mt.supportedMethods ってのがそれにあたります。

mt.supportedMethods

説明
 サーバで提供されている XML-RPC の呼び出し方法を取得します。
引数
 なし
返り値
 サーバで提供されている呼び出し方法の配列が返ります。

http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html

具体的には以下をFC2ブログのエンドポイントである http://blog.fc2.com/xmlrpc.php にポストします。

<methodCall>
<methodName>mt.supportedMethods</methodName>
<params>
</params>
</methodCall>

投稿のためのPHPはコチラ。

//投稿先
$path = '/xmlrpc.php';
$host = 'blog.fc2.com';
$port = 80;

//デバッグ
$debug = 1;

require_once('XML/RPC.php');

$client = new XML_RPC_client($path, $host, $port);
$client->setDebug($debug);

$message = new XML_RPC_Message('mt.supportedMethods');
$response = $client->send($message);

これで返ってくるはずなんですが、実際にやってみるとエラーとなってしまいます。
どうやらFC2ブログはこの mt.supportedMethods 自体を許可していないようです。
この mt.supportedMethods は呼び出しにIDもパスワードも必要としないので、なんらかのセキュリティ対策で禁止しているんだとは思うんですがよくわかりません。以前は出来ていたんですが。。。
仕方ないので今回はDTIブログでやってみます。

//投稿先
$path = '/xmlrpc.php';
$host = 'blog.dtiblog.com';
$port = 80;

//デバッグ
$debug = 1;

require_once('XML/RPC.php');

$client = new XML_RPC_client($path, $host, $port);
$client->setDebug($debug);

$message = new XML_RPC_Message('mt.supportedMethods');
$response = $client->send($message);

DTIブログは無事に返ってきました。

<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<string>blogger.getUsersBlogs</string>
</value>
<value>
<string>blogger.getUserInfo</string>
</value>
<value>
<string>blogger.newPost</string>
</value>
<value>
<string>blogger.editPost</string>
</value>
<value>
<string>blogger.deletePost</string>
</value>
<value>
<string>blogger.getRecentPosts</string>
</value>
<value>
<string>metaWeblog.newPost</string>
</value>
<value>
<string>metaWeblog.editPost</string>
</value>
<value>
<string>metaWeblog.getPost</string>
</value>
<value>
<string>metaWeblog.getRecentPosts</string>
</value>
<value>
<string>metaWeblog.newMediaObject</string>
</value>
<value>
<string>mt.getRecentPostTitles</string>
</value>
<value>
<string>mt.getCategoryList</string>
</value>
<value>
<string>mt.getPostCategories</string>
</value>
<value>
<string>mt.setPostCategories</string>
</value>
<value>
<string>mt.supportedMethods</string>
</value>
<value>
<string>mt.supportedTextFilters</string>
</value>
<value>
<string>mt.getTrackbackPings</string>
</value>
<value>
<string>mt.publishPost</string>
</value>
<value>
<string>mt.setNextScheduledPost</string>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>

これが何をやっているのかというと、まず XML_RPC_clientってのが送受信や送信データのベースとなるものです。そして、XML_RPC_Message ってのが具体的な送信内容です。mt.supportedMethods は引数なしなのでこの様にシンプルになります。$client->send() を使って $message を送信し、帰ってきたものが $response です。
$client->setDebug($debug) とすることにより、デバッグ情報が表示されるので理解しやすくなります。


これでXML-RPCでどういった操作ができるのかがわかりました。
今後はこの mt.getCategoryList、metaWeblog.newMediaObject、metaWeblog.newPost などを使って実際にブログに投稿してみたいと思います。
今回のPHPスクリプトが原型となって投稿内容にあわせて XML_RPC_Message に情報を加えていくだけですので、そんなに難しくはありません。

今回はここまで。