PHPからはてなのAtomAPIを使ってみた
今までRESTのAPIしか使ったことがなかったので勉強がてらAtomAPIを触ってみました。
とりあえずはてなフォトライフへ画像をPOSTする関数を作ってみました。WSSE認証って何?ってレベルだったので苦戦しまくりでした。下記のサイトを参考にしています。
下のコードでPOSTに成功したところです。HTTP_Requestを使えば簡単にできるみたいですね。はてブやダイアリーも似たような感じなリクエストでいじれると思うので色々触ってみようと思います。
<?php require_once 'HTTP/Request.php'; function postImage($account, $password, $img, $title) { $handle = fopen($img, 'rb'); $contents = stream_get_contents($handle); fclose($handle); $jpegdata = base64_encode($contents); $created = date('Y-m-d\TH:i:s\Z'); $nonce = pack('H*', sha1(md5(time()))); $pass_digest = base64_encode(sha1($nonce.$created.$password, true)); $wsse = 'UsernameToken Username="'.$account.'", PasswordDigest="'.$pass_digest.'", Created="'.$created.'", Nonce="'.base64_encode($nonce).'"'; $rawdata = '<entry xmlns="http://purl.org/atom/ns#">'.'<title>'.$title.'</title>'.'<content mode="base64" type="image/jpeg">'.$jpegdata.'</content>'.'</entry>'; $url = 'http://f.hatena.ne.jp/atom/post'; $req = new HTTP_Request(); $req->addHeader('Accept','application/x.atom+xml, application/xml, text/xml, */*'); $req->addHeader('Authorization', 'WSSE profile="UsernameToken"'); $req->addHeader('X-WSSE',$wsse); $req->addHeader('Content-Type', 'application/x.atom+xml'); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->setURL($url); $req->addRawPostData($rawdata); $res = $req->sendRequest(); if(PEAR::isError($res)) return $res; } ?>
参考にしたサイトにHeader名が「XWSSE」とハイフンが無かったのでそこで嵌ってました(;^ω^)あと、作ってる途中に気づいたんですがPEAR::Services_Hatenaモジュールがあるらしいですorz