2014年2月10日月曜日

XMLRPCによるコマンドラインからのFC2投稿スクリプト(カテゴリ対応版)


FC2へのphpからの自動投稿のスクリプト

コマンドラインから以下の様に実行することで、自動投稿可能。

php <保存ファイル名>.php -u"<ログインID>" -p"<パスワード>" -t"<タイトル>" -b"<内容>" -c"<カテゴリ>"

カテゴリは事前に作成しておく必要があります。(無い場合は未分類となります。)
また、FC2では1日に10件までの投稿しか許しておらず、10件に達すると”XML-RPC fault (102): Error:Up to 10 entry a day. ”というエラーが出るので気をつけてください。

###ソース###
<?php
date_default_timezone_set('Asia/Tokyo');
$options = getopt('t:c:u:p:b:');
require_once("XML/RPC.php");
//XML-RPCインタフェース、ユーザ定義
$fc2_host = "blog.fc2.com";
$fc2_xmlrpc_path = "/xmlrpc.php";
$fc2_user = "$options[u]";
$fc2_passwd = "$options[p]";
//投稿内容
$title = "$options[t]";
$content = "$options[b]";
$category_tar = "$options[c]";
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
//クライアントの作成
$c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 );
//メッセージ作成
$blogid = new XML_RPC_Value( 0, 'string');
$username = new XML_RPC_Value($fc2_user, 'string');
$passwd = new XML_RPC_Value($fc2_passwd, 'string');
$content = new XML_RPC_Value(array(
  'title'=> new XML_RPC_Value($title, 'string'),
  'description'=> new XML_RPC_Value($content, 'string'),
  'dateCreated'=> new XML_RPC_Value(date("Ymd\TH:i:s",time()), 'dateTime.iso8601')
), 'struct');
$publish = new XML_RPC_Value( 1, 'boolean');
//投稿
$message = new XML_RPC_Message('metaWeblog.newPost',  array($blogid, $username, $passwd, $content, $publish));
$response = $c->send($message);
if( !$response ){
     exit('Could not connect to the server.');
}else if( $response->faultCode() ){
     exit('XML-RPC fault ('.$response->faultCode().'): '.$response->faultString());
}
// ブログのカテゴリを設定
$message = new XML_RPC_Message('mt.getCategoryList', array($blogid, $username, $passwd));
$category_list = $c->send($message);
$categories = $category_list->value();

for ($i = 0; $i < $categories->arraysize(); $i++) {
  $category_pair = $categories->arraymem($i);
  $category_id = $category_pair->structmem("categoryId");
  $category_name = $category_pair->structmem("categoryName");
  if (strcmp($category_name->scalarval(), $category_tar) == 0) {
    $category_set = array('categoryId'=> $category_id, 'isPrimary'=> new XML_RPC_Value(1, 'boolean'));
    $category = new XML_RPC_Value(array(new XML_RPC_Value($category_set, 'struct')), 'array');
    $message = new XML_RPC_Message('mt.setPostCategories', array($response->value(), $username, $passwd, $category));
    $retval = $c->send($message);
    if (!$retval || $retval->faultCode() != 0) {
      return false;
    }
    break;
  }
}
?>

0 件のコメント:

コメントを投稿