アメブロのAtomAPI(AtomPUB) 仕様変更 | ひつじ組長のウェブログ

ひつじ組長のウェブログ

Webに関して気になったことを残していく、メモ帳代わりです。

いきなり利用できなくなったアメブロ(アメーバブログ)のAtomAPI(AtomPUB)

2013年11月21日 14時20分頃から forbidden を返すようになっていた為
AtomAPIからの投稿・エンドポイントの取得が不可能な状態が続いていた。

API廃止の可能性もあるのかと思っていましたが、解決しました。
廃止ではなくて、仕様変更のようです。

ヘッダーにいくつか追加してあげる必要がありました。
WSSE認証の仕様に近づけたということなのでしょうか。

ヘッダーに追加する情報

Accept: application/x.atom+xml, application/xml, text/xml, */*
Authorization: WSSE profile="UsernameToken"
Content-Type: application/x.atom+xml
User-Agent: Jakarta Commons-HttpClient/3.1
X-WSSE: UsernameToken Username="***", PasswordDigest="***", Nonce="***", Created="***"


アメブロ エンドポイント(投稿先)を取得する方法 (PHP)

$user = 'アメーバID';
$password = 'パスワード';

$atomapi_url = 'http://atomblog.ameba.jp/servlet/_atom/blog';
$created = date('Y-m-d\TH:i:s\Z');
$nonce = sha1(md5(time()));
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.md5($password))));
$wsse =
    'UsernameToken Username="'.$user.'", '.
    'PasswordDigest="'.$pass_digest.'", '.
    'Nonce="'.base64_encode($nonce).'", '.
    'Created="'.$created.'"';
$Header = array(
    'Accept: application/x.atom+xml, application/xml, text/xml, */*'
    ,'Authorization: WSSE profile="UsernameToken"'
    ,'Content-Type: application/x.atom+xml'
    ,'User-Agent: Jakarta Commons-HttpClient/3.1'
    ,'X-WSSE: '.$wsse
);

$res = NULL;
if($ch = curl_init()){
    curl_setopt($ch, CURLOPT_URL, $atomapi_url);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $Header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $res = curl_exec($ch);
    curl_close($ch);
}

echo $res;

アメブロのエンドポイントが取得できさえすれば、
あとは同様の方法で投稿用の仕様変更も可能ですよね。