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