XML-RPC経由でNucleusへ投稿する方法

#!/usr/bin/ruby
require 'uri'
require 'xmlrpc/client'
require 'pp'
server_uri = URI.parse('http://example.com/nucleus/xmlrpc/server.php')
proxy_host = "proxyのアドレス"
proxy_port = "proxyのポート"
client = XMLRPC::Client.new(server_uri.host, server_uri.path,
                            server_uri.port,
                            proxy_host, proxy_port)

上記で生成したclientを用いて情報を取得するサンプルは以下のような感じでできます。

user = "ユーザー名"
pass = "パスワード(平文)"
result = client.call("mt.supportedMethods")
pp result
result = client.call("blogger.getUserInfo", "nucleus", user, pass)
pp result
result = client.call("blogger.getUsersBlogs", "nucleus", user, pass)
pp result
result = client.call("blogger.getRecentPosts", "nucleus", "1", user, pass, 2)
pp result
result = client.call("mt.getCategoryList", "1", user, post)
pp result

blogger.getUserInfoでユーザ情報を取得してみたり、blogger.getRecentPostsで最近の記事2件を取得してみたり、mt.getCategoryListでカテゴリリストを取得してみたりするサンプルです。


さて、肝心の記事を投稿するサンプルコードは以下のような感じになります。

body = "hoge\nfoo\nbar"
content = {
  'title' => "hoge",
  'description' => body
}
result = client.call("metaWeblog.newPost", "1", user, pass, content, false)
pp result

"1"にはブログIDを指定します。Nucleusでは複数ブログを作成できるのですが、ひとつだけなら1を指定するだけですね。複数ある場合はblogger.getUsersBlogsあたりであらかじめブログIDを調べておくと良いです。

最後の引数をfalseにしているのは下書きに保存するためです。
公開したい記事ならtrueを指定します。


上記で投稿したものはブログの標準のカテゴリ記事として投稿されます。
あとcontentはUTF-8にしときましょう。