phaの日記

パーティーは終わった

PHPではてなダイアリーAtomPubを使って日記を投稿するサンプル



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

そういえばちょっと前からはてなダイアリーAPIから投稿できるようになってるんですね。上記のページにはPerlRubyの例は載っているのだけどPHPの例がなかったので、自分用備忘録も兼ねてサンプルコードを載せておきます。

<?php
//はてなダイアリーAtomPubを使ってはてなダイアリーに記事を投稿するサンプル
function post_atom($user,$pass,$entrytitle,$entrybody){
    
    //PEAR::HTTP_Requestを使う
    require_once("HTTP/Request.php");    
    $posturl = "http://d.hatena.ne.jp/".$user."/atom/blog";
    $entrybody = mb_convert_encoding($entrybody,"UTF-8",auto);
    $created = date("Y-m-d\TH:i:s\Z");   
    
    //WSSE認証用データの作成
    $nonce = pack('H*', sha1(md5(time())));
    $pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$pass))); 
    $wsse = 'UsernameToken Username="'.$user.'", PasswordDigest="'.$pass_digest.'", Created="'.$created.'", Nonce="'.base64_encode($nonce).'"';
   
    //XMLデータの作成
    $postdata = '<?xml version="1.0" encoding="utf-8"?>'.
                '<entry xmlns="http://purl.org/atom/ns#">'.
                '<title>'.$entrytitle.'</title>'.
                '<content type="text/plain">'.$entrybody.'</content>'.
                '<updated>'.$created.'</updated></entry>';
            
    //HTTP_Request()より投稿
    $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($posturl);
    $req->addRawPostData($postdata);
    $req->sendRequest();
    return $req->getResponseBody();
}
?>