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を省略すると,現在の日時が記事の作成日時になります