コードを舐める日々

わからないことがわからないことをしる日々

WSSEではてなダイアリーにポスト

PHPでどう書くかという情報が乏しいようなので書いておく。

error_reporting(E_ALL);
require_once 'HTTP/Request.php';

function wsse_blogPost($user, $pass)
{
    $url = 'http://d.hatena.ne.jp/' . $user .'/atom';
    $blogurl = 'http://d.hatena.ne.jp/' . $user . '/atom/blog';
    $rawdata = <<<EOF
<entry xmlns="http://purl.org/atom/ns#">
  <title>wsse_test</title>
  <content type="text/plain">
  - test
  - テスト
  </content>
</entry>
EOF;
    $nonce = pack('H*', sha1(md5(time().rand().posix_getpid())));
    $created = date('Y-m-d\TH:i:s\Z');
    $digest = base64_encode(sha1($nonce . $created . $pass, true));
    $wsse_header = sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"', $user, $digest, base64_encode($nonce), $created);
    $request = new HTTP_Request($url);
    $request->addHeader('X-WSSE', $wsse_header);
    $request->addHeader('ContentType', 'application/x.atom+xml');
    $request->setMethod(HTTP_REQUEST_METHOD_POST);
    $request->setURL($blogurl);
    $request->addRawPostData($rawdata);
    if (PEAR::isError($request->sendRequest())) {
        die('request failed');
    }
}

はてなダイアリーAtomPubとは - はてなキーワード