今回はWordPressに標準に備わっているXML-RPCサーバー機能を使って、
管理ページからではなく、csvファイル等をアップして一括投稿をする方法を試してみます。
例えば、商品を同じレイアウトで一気にアップしたいときなんか、便利じゃないですかね??

ちなみに私の制作環境はMacなので、Macで使用する方法をご紹介します。
Winの方は下の内容の【1】の部分をWinで設定する方法を別途見つけて下さい。
【2】以降は同じで大丈夫だと思います。

参考にさせていただいた記事はこちらです
[WordPress] XML-RPC を使用する方法

1. まずはXAMPPでPEARのライブラリであるXML-RPCを使えるように設定する
[ターミナル]で以下のコマンドを入力する

$ cd /Applications/XAMPP/xamppfiles/bin
$ sudo ./pear install XML_RPC
$ ./pear list

現在インストールされているパッケージの一覧が表示されるのでその中に

XML_RPC 1.5.2 stable

という一行があればインストール成功です。
以上が出来上がれば、次に投稿用PHPを書いていきます。

2. http通信でWordPressのユーザー名やパスワードを渡して、ブログ情報を取得します。

require_once("XML/RPC.php");
$host = "ドメイン名";
$xmlrpc_path = "/xmlrpc.php";
$appkey = '';
$user = '自分のユーザー名';
$passwd ='自分のパスワード';

$c = new XML_RPC_client($xmlrpc_path, $host, 80);

$appkey = new XML_RPC_Value($appkey, 'string');
$username = new XML_RPC_Value($user, 'string');
$passwd = new XML_RPC_Value($passwd, 'string');

$message = new XML_RPC_Message(
	'blogger.getUsersBlogs', array($appkey, $username, $passwd)
	);

$result = $c->send($message);

if (!$result) {
	exit('Could not connect to the server.');
} else if($result->faultCode()) {
	exit($result->faultString());
}

$blogs = XML_RPC_decode($result->value());

$blog_id = new XML_RPC_Value($blogs[0]["blogid"], "string");

$c = new XML_RPC_client($xmlrpc_path, $host, 80);

この一行でXML RPCクライアントを生成して

$message = new XML_RPC_Message(
‘blogger.getUsersBlogs’, array($appkey, $username, $passwd)
);

$result = $c->send($message);

これでブログ情報を取得して

$blog_id = new XML_RPC_Value($blogs[0]["blogid"], “string”);

最終的にブログIDを取得して準備完了です。

3. 投稿用CSVファイルを解析する。
もちろん他の形式でも大丈夫なのですが、今回はCSVファイルを使用しての投稿です。

私が管理ページを使用せずに投稿する時、特にやりたかった事として、
一つの記事に複数のカテゴリーと複数のカスタムフィールドを付けたい、という事がありました。
ので、解析はこんな感じになります。

$cnt = 0;
$num = 0;
$file = file_get_contents("post.csv");
$file = preg_replace("\r\n|\r|\n", "\n", mb_convert_encoding($file, "UTF-8", "SJIS-win"));
$fp = tmpfile();
fputs($fp, $file);
fseek($fp, 0);

$contents = array();

while (($data = fgetcsv($fp)) !== false) {

	$csv_title = $data[0];
	$csv_description = $data[1];
	$csv_cat_item = $data[2];
	$csv_cat_price = $data[3];
	$csv_cat_color = $data[4];
	$csv_price = $data[5];
	$csv_brand = $data[6];

	$cnt++;
	if ($cnt > 1 ) {
		//------タイトル---------
		$title = $csv_title;

		//------本文---------
		$description = $csv_description;

		//------カテゴリー---------
		$categories = array(
			new XML_RPC_Value($csv_cat_price, "string"),
			new XML_RPC_Value($csv_cat_item, "string"),
			new XML_RPC_Value($csv_cat_color, "string"),
			);

		//------カスタムフィールド---------
		$custom_fields = array();
		$custom_fields[] = new XML_RPC_Value(
			array(
			'key'=> new XML_RPC_Value('PRICE', 'string'),
			'value'=> new XML_RPC_Value($csv_price, 'string')
			),
			'struct');

		$custom_fields[] = new XML_RPC_Value(
			array(
			'key'=> new XML_RPC_Value('BRAND', 'string'),
			'value'=> new XML_RPC_Value($csv_brand, 'string')
			),
			'struct');

1行ずつarray形式で「$data」に入れていき(fgetcsv)、それをそれぞれ別の変数名に置き換えていきます。
CSVファイルの1行目はファイルを作るときのタイトルとして使っているので、その部分は読み飛ばし、
2行目からWordPress用の登録内容に編集していきます。

3. 最後、いよいよ投稿です。
編集し終えた内容をWordPress用のXML−RPC APIにいれていき、サーバーへの送信後書き込める準備をし、最終的に送信します。

		$line = new XML_RPC_Value(
			array(
			'title' => new XML_RPC_Value($title, 'string'),
			'categories' => new XML_RPC_Value($categories, 'struct'),
			'description' => new XML_RPC_Value($description, 'string'),
			'wp_slug' => new XML_RPC_Value($title, 'string'),
			'dateCreated' => new XML_RPC_Value(time(), 'dateTime.iso8601'),
			'custom_fields'=> new XML_RPC_Value($custom_fields, 'struct')
			),
			'struct');

		$publish = new XML_RPC_Value(1, "boolean");

		$message = new XML_RPC_Message(
			'metaWeblog.newPost', array($blog_id, $username, $passwd, $line, $publish)
			);

		$result = $c->send($message);

		if (!$result) {
			exit('Could not connect to the server.');
		} else if ($result->faultCode()) {
			exit($result->faultString());
		}

	}

}

以上でよううやっと終了です。
これは実行する為のプログラムなので、送信コマンドはターミナルで打たなければなりません。

タグ:, , ,

関連する投稿