LivedoorはWordpressと違ってXML-RPCでは操作できません。AtomPubという別の方法で投稿する必要があります。
外部から投稿することでどんな利点があるでしょうか。
まず一つは、システム化した投稿ができる事でしょう。
一気にエクセルから大量投稿…のようなことも外部からスクリプトを投げ込めば可能です。
しかし、システム化、という面で言えば、一番有効な部分は、
テンプレートを使用できる点では無いでしょうか。
HTMLで一個一個レスを抜き出す…ということを今はもうやっている人は少ないでしょうが、
レス間に広告を入れる際、通常のエディタで挿入すると、
DIVの間に挿入されてしまったり、
変な所に挿入されてしまうことは多いです。
HTMLエディタで挿入すると、場所を探すのが面倒であったりします。
そうした部分を、システム化してしまう事で、予め広告を何レス目に挿入等を組み込めます。
Livedoorに外部から投稿する場合、通常のログインIDとログインパスワードでは投稿できません。
APIキーを取得する必要があります。
ブログ設定よりAPIキーを取得しましょう。
public function post($f) {
$this->post_url = "https://livedoor.blogcms.jp/atompub/" . $this->to->xpcid . "/article";
$idname = explode("-", $this->to->xpcid);
//ブログアップロード
$created = date('Y-m-d\TH:i:s\Z');
$nonce = pack('H*', sha1(md5(time())));
$pass_digest = base64_encode(pack('H*', sha1($nonce . $created . $this->to->xpcpass)));
$wsse =
'UsernameToken Username="' . $idname[0] . '1", ' .
'PasswordDigest="' . $pass_digest . '", ' .
'Nonce="' . base64_encode($nonce) . '", ' .
'Created="' . $created . '"';
$cat_list = explode(",", $this->history->category);
$str = "";
foreach ($cat_list as $k => $category) {
if ($category != "") {
$str .= '<category term="' . $category . '"/>';
}
}
if ($this->to->draft == 1) {
$str .= "<app:control><app:draft>yes</app:draft></app:control>";
}
if ($f["thumb"] != null) {
$thumb = $f["thumb"]->target_url;
$body = mb_convert_encoding("<img src='" . $thumb . "' class='article_thumbnail' style='max-width:100%;'><br/>\n", "UTF-8", "auto");
} else {
$thumb = null;
$body = "";
}
$body .= mb_convert_encoding($this->childa($f["desc"]), "UTF-8", "auto");
$more = mb_convert_encoding($this->childa($f["more"]), "UTF-8", "auto");
$text64 = base64_encode($body . $more);
$rawdata =
'<?xml version="1.0" encoding="UTF-8"?>' .
'<entry xmlns="http://purl.org/atom/ns#" xmlns:app="http://www.w3.org/2007/app">' .
'<title type="text/html" mode="escaped">' . $this->history->title . '</title>' .
'<content type="application/xhtml+xml" mode="base64">' . $text64 . '</content>' .
// '<content type="application/xhtml+xml" mode="base64">'.$body_text.'</content>'.
$str . '</entry>';
$headers = array(
'X-WSSE: ' . $wsse,
'Expect:',
);
try {
$req = new HTTP_Request2();
$req->setUrl($this->post_url);
$req->setConfig(array('ssl_verify_host' => false, //* 下記参照
'ssl_verify_peer' => false, //* 下記参照
));
$req->setMethod(HTTP_Request2::METHOD_POST);
$req->setHeader($headers);
$req->setAuth($idname[0], $this->to->xpcpass);
$req->setBody($rawdata);
$response = $req->send();
$arr = (array) $response;
$return = $response->getBody();
if ($return == "Requested XML is invalid.") {
return ["error" => "requested XML is invalid"];
} else {
if (isset($response->getHeader()["location"])) {
return ["id" => $response->getHeader()["location"]];
} else {
return ["error" => $return];
}
}
} catch (HTTP_Request2_Exception $e) {
return ["error" => $e->getMessage()];
} catch (Exception $e) {
return ["error" => $e->getMessage()];
}
}出典:code
Wordpressと違う点は、「続きを読む」を挿入できない点です。
続きを読むに頼らない記事作りが必要になります。
具体的には、トップの記事一覧に、数レスを載せて…というレイアウトが出来ません。
「<$ArticleFirstImage$>」:記事の最初のイメージ
「<$ArticleDescription$>」:記事の先頭抜粋
上記の二つを使って記事一覧のレイアウトを組み立てることが必要です。
これを使えば、続きを読むを使わずにレイアウトが作れます。