MT XML-RPCの叩き方

自作スクリプトで画像ファイルのサムネイル、スクリーンネイル自動作成まではしていたのですが、エントリー化するにはHTMLを新規エントリーへコピペしてました。これが面倒になってきたので、flickrみたいにXML-RPCを叩いてコピペせずにエントリーできるようにしようというのがもくろみです。


プログラミングインターフェイス

ここで行うのは新規エントリー作成のみなので、metaWeblog.newPostメソッドがそれに当たります。

MovableType で使える XML-RPC API

metaWeblog.newPost
説明
新しい記事を投稿します。公開することもできます。
引数

String blogid, /* blog ID */
String username, /* blog のユーザ名(アカウント) */
String password, /* 上記ユーザの blog への login 用パスワード */
struct content, /* content構造体 (記事情報) */
boolean publish /* 公開するか否か (0: 「下書き」状態で記事を登録, */
/* 1: 「公開」状態で記事を登録 */


注意: content 構造体は、次のような標準的な項目を含みます:

String title, /* 記事の件名 */
String description, /* 記事の本文 */
ISO.8601 dateCreated, /* 記事の投稿日時 */


それに加えて、Movable Type では次の7つの項目に値を入れて渡すことができます:

int mt_allow_comments, /* コメントを受け入れるか否か */
int mt_allow_pings, /* トラックバックPingを受け入れるか否か */
String mt_convert_breaks, /* 記事本文の改行の扱いをどうするか */
String mt_text_more, /* 追記 */
String mt_excerpt, /* 概要 */
String mt_keywords, /* キーワードの値 */
array mt_tb_ping_urls, /* 当該記事に関して送信したい */
/* トラックバック Ping 先の URL 群 */


mt_convert_breaks に 0 (もしくは none) を指定した場合、 「記事の本文」および「追記」中の改行は <br /> あるいは </p><p> に変換されません。 1 (もしくは convert_breaks)を指定した場合、 「記事の本文」および「追記」中の改行は <br /> あるいは </p><p> に変換されます。

dateCreated は、ISO.8601 形式で表記してください (ただし、省略することも可能です。 省略した場合は現在時刻を指定したものとみなされます)。
ココログの場合、dateCreated は UTC (協定世界時。正確には違う概念なのですが、 GMT[グリニッジ標準時]と同じと考えて構いません) で指定してください。 日本時間を使うと9時間未来の記事になってしまうので注意。
返り値
成功すると、String postid が投稿後の「記事ID」として返ってきます。
失敗すると、fault です。

そもそもXML-RPCとはなんでしょう。

XML-RPC 仕様書

XML-RPC はインターネット上でリモートプロシージャコールを実行するためのプロトコルです。

XML-RPC メッセージは HTTP-POST リクエストで、リクエストの body は XML です。プロシージャはサーバ側で実行され、その結果もまた XML 形式で返されます。

プロシージャのパラメータにはスカラー値、数値、文字列、日付等のほか、複合的なレコード/リスト構造で指定することができます。

コマンドでいうと

$ POST -c text/xml http://url/path/to/mt/mt-xmlrpc.cgi < newpost.xml


で叩けます。newpost.xmlはxmlが記述されたテキストファイルです。具体例はbloggerツールを作ろうの例が参考になります。

metaWeblog.newPost
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
    <methodName>metaWeblog.newPost</methodName>
    <params>
        <param>
            <value><string>1</string></value>
        </param>
        <param>
            <value><string>username</string></value>
        </param>
        <param>
            <value><string>password</string></value>
        </param>
        <param>
            <value>
                <struct>
                    <member>
                        <name>title</name><value><string>これがタイトル</string></value>
                    </member>
                    <member>
                        <name>description</name><value><string>これが本文</string></value>
                    </member>
                    <member>
                        <name>mt_allow_comments</name><value><int>1</int></value>
                    </member>
                    <member>
                        <name>mt_allow_pings</name><value><int>1</int></value>
                    </member>
                    <member>
                        <name>mt_convert_breaks</name><value><int>1</int></value>
                    </member>
                </struct>
            </value>
        </param>
        <param>
            <value><boolean>1</boolean></value>
        </param>
    </params>
</methodCall>

これを自作スクリプト&CGIに組み込めば、写真をさらに楽々エントリーが出来ることでしょう。続く。