プラスター業務日記 - プログラム(php,VC++などなど)やサーバ設定(Ubuntu Linux)などをメモがわりに書き残します。

AtomPub で はてなダイアリーに投稿

by なお (読完時間:推定 5分30秒|画像は1枚)

はてな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);

参考

Atom
はてなダイアリーAtomPub

RESTful Webサービス

RESTful Webサービス

著者/訳者:Leonard Richardson Sam Ruby

出版社:オライリー・ジャパン( 2007-12-21 )

定価:¥ 3,990

単行本 ( 480 ページ )

ISBN-10 : 4873113539

ISBN-13 : 9784873113531


カテゴリ:PHP, WordPress  | コメントは受け付けていません。

Comments are closed.