HTTP_Requestを使ってはてなフォトライフへ画像を投稿
こことかを参考にしつつ(今さら)はてなフォトライフへAtomAPIを使用して画像を投稿する処理をあーでもないこーでもないって悩んでいた。
PEARのHTTP_Requestを使ってどうやらできたみたい。
とりあえずコードはこんな感じ。
function postImage($account,$password,$img) { $handle = fopen($img, "rb"); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); $jpegdata = base64_encode($contents); $created = date('Ymd\TH:i:s\Z'); $nonce = pack('H*', sha1(md5(time()))); $pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password))); $wsse = 'UsernameToken Username="'.$account.'", '. 'PasswordDigest="'.$pass_digest.'", '. 'Created="'.$created.'", '. 'Nonce="'.base64_encode($nonce).'"'; $rawdata = '<entry xmlns="http://purl.org/atom/ns#">'. '<title>Sample</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('XWSSE',$wsse ); $req>addHeader('ContentType', '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; } return true; }
にしてもWSSE認証って今後も普及するのかしら?