今回は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());
}
}
}
以上でよううやっと終了です。
これは実行する為のプログラムなので、送信コマンドはターミナルで打たなければなりません。




コメントはまだありません。