PHPでlivedoorBlogのAtomAPIをそこそこ手懐けた

                                                                                    • -

11/10追記
記事の内容が古くなっていたので新しいコードを置いておきますね。
PHPでlivedoorBlogのAtomPubをそこそこ手懐けた【改】 - アンバランスな日々に

                                                                                    • -

livedoorBlogに記事を投稿するphpのコードです。

curl関数使用

<?php

$livedoor_id = ""; /* livedoorID */
$password = ""; /* パスワード */
$category = ""; /* カテゴリ */
$title = ""; /* 記事タイトル */
$text = "";/* 記事本文 */

$atomapi_url = "http://cms.blog.livedoor.com/atom/";

$created = date('Y-m-d\TH:i:s\Z');
$nonce = pack('H*', sha1(md5(time())));
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password)));
$wsse =
  'UsernameToken Username="'.$livedoor_id.'", '.
  'PasswordDigest="'.$pass_digest.'", '.
  'Nonce="'.base64_encode($nonce).'", '.
  'Created="'.$created.'"';

$text64= base64_encode($text);

$rawdata =
  '<?xml version="1.0"?>'.
  '<entry xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">'.
    '<title type="text/html" mode="escaped">'.$title.'</title>'.
    '<dc:subject type="text/html" mode="escaped">'.$category.'</dc:subject>'.
    '<content type="application/xhtml+xml" mode="base64">'.$text64.'</content>'.
  '</entry>';

$headers =array(
  'X-WSSE: ' . $wsse,
  'Expect:'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $atomapi_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$rawdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);

//出力結果確認用
//echo $res;

カテゴリー入力欄を作ってありますけど自分の結果では反映されませんでした。でも一応記事が投稿できるので公開。だれか知ってる人がいたらそっと耳打ちしてあげて下さい。
それと記事の本文だけ更新することは出来るけど記事の追記文、「続きを読む」の部分も投稿出来るようにしたいんだけど無理なんですかね?


4/11追記:
curlを使ってpostすると文字数制限があるらしくて超えてしまうとエラーが出てしまうようです。下の記述に変更したらエラーがでなくなりました。

$headers = "X-WSSE: " . $wsse;

curl_setopt($ch, CURLOPT_HTTPHEADER,array($headers));

$headers =array(
  'X-WSSE: ' . $wsse,
  'Expect:'
);

curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);

(上のコードは変更済み)


参考リンク:
AtomAPIでlivedoorBlogに投稿する【PHP】 : 目指せ1級!30代サラリーマンボルダリング日記
API/AtomPub - livedoor Blog まとめサイト
PHP: cURL 関数 - Manual
【続報】アメブロのAtomAPIを倒した : 目指せ1級!30代サラリーマンボルダリング日記
http://pct.unifas.co.jp/php%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A2%E3%83%A1%E3%83%96%E3%83%AD%E3%81%B8%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-226/