不定期戯言

戻る

2013.06.26 (Wed)

ブログ用スクリプト

・職場では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;

コメント(1)

わたやん wrote at 2013-06-27 14:39:

時刻のところはpost_date_gmtじゃなくてpost_date。それと末尾に+09つけなきゃいけない。

コメントの受付は終了しました。