XMLRPC による MT の更新
MT を CMS として使っている、とある案件で英語版が必要になった。
こういう用途だと、管理画面経由ではとてもやってられない*1ので、原稿を Perl でパースし、MT の xmlrpc.cgi に食わせるバッチを書いた。
構造体を作るところは完全に adhoc になるので適当な class にしてある程度コードを汎化したが、いまひとつなので、スケルトン部分のみを掲載しておく。
#!/usr/local/bin/perl use strict; use warnings; #use myParseData; # 構造体パース用の野良クラス use XMLRPC::Lite; my $uri = 'http://MT_HOME/mt-xmlrpc.cgi'; # mt-xmlrpc.cgi の URI。 適宜書き換え my $user = "BLOG_USERNAME"; # mt の管理用ユーザ名。 適宜書き換え my $pass="XMLRPC_PASSWORD"; # xmlrpc 用のパスワード。適宜書き換え # データのパース #my $datas = myParseData::parse_data(); # 野良クラスを使用 my $datas = [ { blogid => 1, # blogid categories => [{ CategoryId => 1, isPrimary=>1 },{ CategoryId => 50, isPrimary=>0 }], # categories structure ( メインカテゴリとサブカテゴリ) title => "hogehoge", # title dateCreated => "2008-06-01T00:00:00", # time description => "hogehogehoge", mt_text_more => "bodybodybody", # more }, ]; ## こんな感じで array_ref を構築しておく。 # コンストラクタ my $rpc = XMLRPC::Lite -> proxy($uri); for my $record (@$datas) { my $blogid = $record=>{blogid}; delete $record->{blogid}; my $categories_ref = $record=>{categories}; delete $record->{categories}; my $rec = { %$record, mt_allow_comments => 0, # コメントはつけられない mt_allow_pings => 0, # ping も不要 }; my $id = $rpc->call('metaWeblog.newPost',$blogid,$user,$pass,$rec, 1)->result; # 最期の引数の 1 は、"公開" $rpc->call('mt.setPostCategories',$id,$user,$pass,$categories_ref)->result || die("error by $id"); }
*1:エントリを修正するたびいちいち再構築する