前回のlivedoorBlogにAtomAPIで投稿に引き続きアメブロもやっちゃうぜーと思ったらハマった。
同じAtomAPIだしコード同じで行けるだろうと思ったら違うらしい。
いろいろ調べてみるとWSSE認証が独自ぽい。
でもいくら調べても同じように困ってる人はいても、解決してる人が見つからない。。
これまで調べてlivedoorBlogと違うと思われる部分がpass_digestの作成部分。
livedoorBlog
アメブロ
パスワードをmd5したあとに大文字化するらしいとの情報。
デマかホントかわかりません。。
返ってくるレスポンスは
だめだー、なんか違うとこで間違ってるのか・・・。
今回使用したコードは以下。
こういうのって一度忘れてから再度調べたらいけたりするよね。。
いけたらいいなぁ・・・。
同じAtomAPIだしコード同じで行けるだろうと思ったら違うらしい。
いろいろ調べてみるとWSSE認証が独自ぽい。
でもいくら調べても同じように困ってる人はいても、解決してる人が見つからない。。
追記)倒しました!!(2010-02-03) >>こちらの記事へ。
これまで調べてlivedoorBlogと違うと思われる部分がpass_digestの作成部分。
livedoorBlog
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password)));
アメブロ
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtoupper(md5($password)))));
パスワードをmd5したあとに大文字化するらしいとの情報。
デマかホントかわかりません。。
返ってくるレスポンスは
CurlResponse Object ( [body] =>X-WSSE authentication required [headers] => Array ( [Http-Version] => 1.1 [Status-Code] => 401 [Status] => 401 Unauthorized [Set-Cookie] => BIGipServerPool_comment=3395622060.20480.0000; expires=Sat, 17-Oct-2009 01:32:13 GMT; path=/ [Date] => Fri, 16 Oct 2009 02:18:33 GMT [Server] => Apache [Content-Length] => 83 [Content-Type] => application/x.atom+xml ) )
だめだー、なんか違うとこで間違ってるのか・・・。
今回使用したコードは以下。
<?php require_once 'cURL.php'; $atomapi_url = "http://atomblog.ameba.jp/servlet/_atom/blog"; $user_id = "USERID"; $password = "PASS"; $category = 'hoge'; $title = "foo"; $text = 'bar'; $created = date('Y-m-d\TH:i:s\Z'); $nonce = pack('H*', sha1(md5(time()))); $pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtoupper(md5($password))))); $wsse = 'UsernameToken Username="'.$user_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, "Content-Type" => "application/x.atom+xml", "Cache-Control" => "no-cache", ); $curl = new Curl(); $curl->headers = $headers; $curl->options = array("POSTFIELDS" => $rawdata); $res = $curl->post($atomapi_url); ?>
こういうのって一度忘れてから再度調べたらいけたりするよね。。
いけたらいいなぁ・・・。
コメント