ameblo APIの仕様変更について(メモ)

アメブロですが、去年の11月21日あたりの仕様変更で外部投稿ができなくなったのでやっとこさ修正しました。
今までcurlでやっていたのですが、PearからRequest.phpをダウンロードして下記のコードに修正。

とりあえず忘れそうなのでメモ。

require_once 'HTTP/Request.php';
$atomapi_url = "http://atomblog.ameba.jp/servlet/_atom/blog";

$user_id = "ユーザID";
$password = "パスワード";
$title = "日記のタイトル";
$body = "お腹減った!!!";

$created = date('Y-m-d\TH:i:s\Z');
$nonce = sha1(md5(time()));
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtolower(md5($password)))));

$wsse =
'UsernameToken Username="'.$user_id.'", '.
'PasswordDigest="'.$pass_digest.'", '.
'Nonce="'.base64_encode($nonce).'", '.
'Created="'.$created.'"';

$req = new HTTP_Request($atomapi_url);
$req -> addHeader( 'X-WSSE',$wsse );
$req -> addHeader('Content-Type', 'application/x.atom+xml');
$req -> sendRequest();
$res = $req -> getResponseBody();

preg_match('/rel="service.post" type="application\/x\.atom\+xml" href="(.*?)"/',$res,$postURl);

$rawdata = sprintf('

%s




',$title,$body);

$req = new HTTP_Request($postURl[1]);
$req->addHeader('X-WSSE',$wsse );
$req->addRawPostData($rawdata);
$req->addHeader('Content-Type', 'application/x.atom+xml');
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->sendRequest();
$code = $req -> getResponseCode();
$req->clearPostData();


Headerに'Content-Type', 'application/x.atom+xml'を追加するだけで良かったらしいのですが、curlでやってみたらダメでしたね・・・。
$codeは201が返ってきたら成功です。