2017年11月20日更新

LivedoorにAtomPubで自動投稿する

LivedoorはWordpressと違ってXML-RPCでは操作できません。AtomPubという別の方法で投稿する必要があります。

  • 追加

Livedoorに外部から投稿する

外部から投稿することでどんな利点があるでしょうか。

まず一つは、システム化した投稿ができる事でしょう。
一気にエクセルから大量投稿…のようなことも外部からスクリプトを投げ込めば可能です。

しかし、システム化、という面で言えば、一番有効な部分は、
テンプレートを使用できる点では無いでしょうか。

HTMLで一個一個レスを抜き出す…ということを今はもうやっている人は少ないでしょうが、
レス間に広告を入れる際、通常のエディタで挿入すると、
DIVの間に挿入されてしまったり、
変な所に挿入されてしまうことは多いです。

HTMLエディタで挿入すると、場所を探すのが面倒であったりします。

そうした部分を、システム化してしまう事で、予め広告を何レス目に挿入等を組み込めます。

AtomPubでLivedoorに投稿する前の準備

Livedoorに外部から投稿する場合、通常のログインIDとログインパスワードでは投稿できません。
APIキーを取得する必要があります。

ブログ設定よりAPIキーを取得しましょう。

AtomPubで投稿

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$>」:記事の先頭抜粋

上記の二つを使って記事一覧のレイアウトを組み立てることが必要です。
これを使えば、続きを読むを使わずにレイアウトが作れます。

オススメの記事Gmatom注目まとめ

シェアする気になったらシェアする

ツイート

ユーザー情報ユーザーの紹介

Gmatom 浜田貴朗

2008年よりコミュニティサイトを運営しつつ、効果の高い広告はバナー広告では無く誘導的コンテンツ広告と気付き、コンテンツ作成を手掛ける。 ポイントサイト・キュレーションサイト・動画自動投稿サイトや自動記事作成ツール、自動フォローツール等ツールの開発等、主にウェブ系の業界にて開発・運営を行っています。 V系バーの立ち上げ・ウェブ戦略・立地戦略等飲食店の立ち上げ・運営も携わっていました。

関連するキーワードキーワードからまとめを探す