![]() | AtomPub(Atom Publishing Protocol 以下 AtomPub) の実装の勉強がてら WordPress の記事のサマリ部分を Livedoor ブログに投稿に続きはてなダイアリーにも投稿したいなぁ~と思いプラスター業務日記分室 in はてなダイアリーってのに自動でPOSTしてます。 |
AtomPub で Hatena ブロブに投稿を行うプログラム
前回の Livedoor と同じく cURL を使って POST を行います。
ブログの記事投稿用のエンドポイントの URL は
http://d.hatena.ne.jp/hatena id/atom/blog
となります。
HTML タグをエンコードしないのであれば
<content type="text/plain"><![CDATA[本文]]></content>
にする事で HTML タグそのままで通ります。
$hatena_id = 'plustar';
$password = '******';
$atomapi_url = 'http://d.hatena.ne.jp/'.$hatena_id.'/atom/blog';
// WSSE認証用データの作成
$created = date('Y-m-d\TH:i:s\Z');
$nonce = pack('H*', sha1(md5(time())));
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password)));
$wsse =
'UsernameToken Username="'.$hatena_id.'", '.
'PasswordDigest="'.$pass_digest.'", '.
'Created="'.$created.'", '.
'Nonce="'.base64_encode($nonce).'"';
// XMLデータの作成
$rawdata = '<?xml version="1.0" encoding="utf-8"?>'.
'<entry xmlns="http://purl.org/atom/ns#">'.
'<title>'.$title.'</title>'. // ← タイトル
'<content type="text/plain"><![CDATA['.$text.']]></content>'. // ← 本文
'<updated>'.$created.'</updated></entry>';
$headers =array(
'Authorization: WSSE profile="UsernameToken"',
'X-WSSE: ' . $wsse,
'Content-Type: application/x.atom+xml'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $atomapi_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS,$rawdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
WSSE認証
WSSE認証は単に投稿者を確認して安全に通信を行うための約束事です。
仮にパスワードを平文で通信を行なって第三者に漏れた場合大変なことになります。
$created = date('Y-m-d\TH:i:s\Z');
$nonce = pack('H*', sha1(md5(time())));
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.$password)));
$wsse =
'UsernameToken Username="'.$hatena_id.'", '.
'PasswordDigest="'.$pass_digest.'", '.
'Created="'.$created.'", '.
'Nonce="'.base64_encode($nonce).'"';
ここで生成した WSSE認証文字列をヘッダに積んで通信を行います。
$headers =array( 'Authorization: WSSE profile="UsernameToken"', 'X-WSSE: ' . $wsse, 'Content-Type: application/x.atom+xml' ); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
参考
RESTful Webサービス
著者/訳者:Leonard Richardson Sam Ruby
出版社:オライリー・ジャパン( 2007-12-21 )
定価:¥ 3,990
単行本 ( 480 ページ )
ISBN-10 : 4873113539
ISBN-13 : 9784873113531


AtomPub で Livedoor ブロブに投稿
何やら便利そうなwordpress プラグイン「Twitter Digest」
「Twitter Digest」で出力されるURLを自社の短縮URLにする
PHP で BASIC 認証ページを取得する