JoomlaへのScribefireでの投稿はそんなに問題なく成功。しかし、実際にやりたいのはJoomlaへの自動投稿。そのためにphpでプログラムを組む。
実はこれを成功するのにかなり手間取ってしまった。たぶん2週間以上はかかっている。基本的には
XML-RPCという手法を使って投稿する。この仕組だがhttp://mikilab.doshisha.ac.jp/dia/research/report/2005/0813/007/report20050813007.htmlを見るとわかりやすい。簡単に言うと、XMLデータでサーバーへリクエストするとXMLデータで結果がクライアントへ返ってくるというもの。XML-RPCを実際に使うためにはプログラムが必要なのだがそのプログラムはperl、java、PHPなどいろいろな言語で書くことが可能。どれでも好きなものを選ぶことができる。
まず、最初にちゃんとXML-RPCが使えるかどうかを確認するためのプログラムを紹介する。プログラムの詳細は別としてこのプログラムにはXML-RPCサーバーとXML-RPCクライアントの両方が必要となってくることだけ覚えていて欲しい。
実際に今の環境が使えるかどうかの確認用のソフトとしてhttp://unp.under.jpのページにあるcatlist.phpというソフトを利用した。
抜粋すると
@putenv(“TZ=JST-9″);
header(‘Content-Type: text/html; charset=Shift_JIS’);
header(‘Pragma: no-cache’);
header(‘Cache-Control: no-cache’);
require_once “jcode.php”;
require_once “IXR_Library.inc.php”;
include(“code_table.ucs2jis”);
//[↓設定ここから]==================================================================
define(“BLOG_USER_ID” , “hoge” ); //blogのログインユーザID
define(“BLOG_PASSWORD” , “password” ); //blogのログインパスワード
define(“BLOG_RPC_HOST” , “hoge.hogehoge.com” ); //blogのホスト名
define(“BLOG_RPC_PATH” , “/xmlrpc/index.php” ); //xmlrpc.phpのパス
//[↑設定ここまで]==================================================================
?>
カテゴリ一覧
<!–p
$client = new IXR_Client(BLOG_RPC_HOST, BLOG_RPC_PATH, 80);
$client->query(‘mt.getCategoryList’, “1″, BLOG_USER_ID, BLOG_PASSWORD);
if(!empty($client->error->code)){
echo “XML-RPCサーバに接続できませんでした、設定を確認して下さい。
“.$client->getErrorCode().’ : ‘.$client->getErrorMessage();
}
else{
$reply = $client->getResponse();
$rCount = count($reply);
for ($i = 0; $i < $rCount; $i++) {
echo “[".$reply[$i]['categoryId'].”]”;
echo JCodeConvert($reply[$i]['categoryName'], 4, 2);
echo ”
“;
}
}
?>
これを実行するとカテゴリー一覧が表示されるはず。
<実行結果>
カテゴリ一覧
[101]
[100]記事のタイトル
[22]はじめての投稿
[25]ようこそ、私のページへ
ちなみにcatlist2.phpとはcatlist.phpを改造したものでmetaWeblog.newPostというAPIを使って投稿に対応したプログラム。
catlist2.phpのcatlist.phpからの変更部分を抜粋すると
カテゴリ一覧
<!–p
$client = new IXR_Client(BLOG_RPC_HOST, BLOG_RPC_PATH, 80);
$content['title'] = “abcd”;
$content['description'] = “test”;
$dat = “20090523T11:11:11″;
$content['dateCreated'] = “test”;
$content = array (
‘title’ => JCodeConvert($entTitle, 0, 4),
‘description’ => JCodeConvert($entTitle, 0, 4)
);
$postFlg = FALSE;
// $content['dateCreated'] = “”;
$client->query(‘metaWeblog.newPost’, “1″, BLOG_USER_ID, BLOG_PASSWORD, $content, $postFlg);
if(!empty($client->error->code)){
echo “XML-RPCサーバに接続できませんでした、設定を確認して下さい。
“.$client->getErrorCode().’ : ‘.$client->getErrorMessage();
}
else{
$reply = $client->getResponse();
$rCount = count($reply);
for ($i = 0; $i < $rCount; $i++) {
echo “[".$reply[$i]['postid'].”]”;
echo JCodeConvert($reply[$i]['title'], 4, 2);
echo $reply[$i];
echo ”
“;
}
}
?>
という感じ。
callist2.phpの実行だがプラグインの有効/無効により状況が変わってくる。以下はそれをまとめたものとなる。
①
metaweblog API on
MovableType API on
catlist2(tytle,discription 英語) metaWeblog.newPost
が動かないがmataweblog APIのみにすると
XML-RPCサーバに接続できませんでした、設定を確認して下さい。
-32700 : parse error. not well formed
がでる。しかし投稿は英語なら可能となる。
——————————————————–
②
metaweblog API on
MovableType API on
catlist(mt.getCategoryList)とcatlist1(mt.getRecentPostTitlesを利用)が動かないことがある。影響する可能性あり。
catlist2
MovableType APIの方で動いているっぽい。
XML-RPCサーバに接続できませんでした、設定を確認して下さい。
801 : セクションが見つかりません.
catlist2
metaweblog APIのみにすると
XML-RPCサーバに接続できませんでした、設定を確認して下さい。
-32700 : parse error. not well formed
その他
Scribe Fire
metaweblog APIでもMovableType APIでも日本語も含め動く
このように今ひとつしゃきっと動かない状態が続いていて、もうあきらめようかと思うぐらいだった。しかし、やはりあきらめずに続けないと明かりは見えてこない。
とうとううまくできる方法を発見これは次回に。