ブログ用スクリプト
職場ではWordPressでブログを用意しているのだが,やはりログインして書くのはめんどくさい。そこで,XML::RPCを使ってオフラインで書いたのをアップロードできるようにスクリプトを書いてみた。これで少しは職場ブログも更新頻度が上がるかな。
だいたいこんなコード。ぐぐるとPHPのコードは見つかるんだけど,Perlのがなかなか見つからなかった。
use RPC::XML; use RPC::XML::Client; my ($host,$user,$pass,$blogid,$client); sub register_bloginfo($$$) { local ($url,$userid,$password) = @_; $host = $url; $user = RPC::XML::string->new($userid); $pass = RPC::XML::string->new($password); get_blogid(); } sub get_blogid() { $client = RPC::XML::Client->new($host.'/xmlrpc.php'); $request = RPC::XML::request->new('wp.getUsersBlogs', $user, $pass); $result = $client->send_request($request); return 0 if !ref($result) || $result->is_fault; foreach $v (@$result) { while(($a,$b) = each %$v) { $blogid = $1 if $a eq 'blogid' && $b->as_string =~ /(\d+)/; } } return $blogid; } sub post($$$$$$$$$$) { # category と tag は配列のリファレンス local ($title,$content,$year,$month,$day,$hour,$min,$sec,$category,$tag) = @_; die "No blogid" if $blogid < 1; $tags = RPC::XML::array->new(@$tag); $categories = RPC::XML::array->new(@$category); $title = RPC::XML::string->new($title); $content = RPC::XML::string->new($content); $date = RPC::XML::datetime_iso8601->new( sprintf("%04d%02d%02dT%02d:%02d:%02d", $year,$month,$day,$hour,$min,$sec)); $request = RPC::XML::request->new( 'wp.newPost', RPC::XML::int->new($blogid), $user, $pass, RPC::XML::struct->new( post_type => RPC::XML::string->new('post'), post_status => RPC::XML::string->new('publish'), post_title => $title, post_content => $content, post_date_gmt => $date, terms_names => RPC::XML::struct->new( category => $categories, post_tag => $tags ) ) ); $result = $client->send_request($request); return 0 if !ref($result) || $result->is_fault; return 1; } 1;
わたやん wrote at 2013-06-27 14:39:
コメントの受付は終了しました。