2007-11-09  XMLRPC::Liteで“さくらのブログ”に記事を投稿する

XML-RPCを使って「さくらのブログ」に記事を投稿するコードを作りました。

あらまし

普通,ブログに記事を投稿するにはWebブラウザで管理画面を開いて,フォームに記事を入力しなければなりません。XML-RPC(いわゆるブログAPI)を使うと,Webの管理画面を使わなくても記事を投稿できます。

動作概要

  • PerlのXMLRPC::Liteモジュールを使う
  • 新規記事を投稿するAPIには数種類あるが,今回は「metaWeblog.newPost」を使う
  • 「さくらのブログ」「Seesaaブログ」に対応。ほかの商業ブログもだいたい同じはず。ただし動作確認した環境は「さくらのブログ」のみ

コード

use strict ;
use XMLRPC::Lite trace => 'debug' ;
use Encode ;
use encoding 'utf8' ;

#####

my $blogid = '123456' ;
my $username = 'username.sakura.ne.jp' ;
my $password = '********' ;

my $content = {

        title           => Encode::encode( 'utf8', '件名' ),
        description     => Encode::encode( 'utf8', '本文' ),
        mt_text_more    => Encode::encode( 'utf8', '追記' ),
        dateCreated     => '2007-01-01T00:00:00', # ISO8601形式

} ;

my $publish = XMLRPC::Data->type( boolean => 1 ) ;

#####

my $uri = 'http://blog.sakura.ne.jp/rpc/' ;
my $method = 'metaWeblog.newPost' ;

my @params = (

        $blogid,
        $username,
        $password,
        $content,
        $publish,

) ;

#####

my $result = XMLRPC::Lite->proxy( $uri )->call( $method, @params )->result ;

# $resultにはpostidが入る

if( !$result )
{
        die 'ERR' ;
}

注意点

(1) ソースファイルはUTF-8(BOMなし)で保存してください。Windowsの「メモ帳」で保存すると,この条件を満たさないので注意してください。

(2) あらかじめブログの管理画面で「パスワード」を設定しておきます。パスワードが思いつかない方は, 「yumi-ii | パスワード文字列を作る」をお試しください。

メモ

  • 日本語を扱う方法 ― XML-RPCの引数に日本語を含めるときは「Encode::encode('utf8', '日本語')」として,UTF-8フラグを外しておきます。UTF-8フラグを外さないと,実行時に「Wide character in subroutine entry at ...」というエラーが発生します
  • 未対応の属性 ― 現時点ではconvert_breaksやallow_commentsなどには対応していない模様。対応していない属性は無視されます
  • 記事の作成日時 ― dateCreatedを省略すると,現在の日時が記事の作成日時になります