txqz memo

はてなブックマークAtomAPIだのWSSEだの

私はタブブラウザにめぼしいものをいっぱい開いておいて、一通り見終わったら一気にはてブに放り込んでいる。ブックマークレットのボタンを押して次のタブに移ってまたブックマークレットのボタンを押して……というのを繰り返し、はてブの入力画面が出てきたらそこに戻るという感じでやっていた。で、コメントを書いて「追加する」を押して次のタブに移ってまたコメントを書いて……とやっているのだけれども、他のタブでブクマの登録が終わると、いま文字を入力していたテキストフォームのフォーカスがなんか変な感じになって未変換だった文字が消えたり、やけにフォーム入力が遅くなったり、裏で色々なJavaScriptが動いている副作用なんだろうけどストレスを感じる原因になっていた。なのではてなブックマークAtomAPI を使ってマイ入力装置を作った。

WSSE とか API 仕様とか REST がどうのこうのとかなんか面倒だったのでとりあえず検索。なんか perl なんだな。 PHP で実装しているのをまた検索。HTTP_Requestを使ってはてなフォトライフへ画像を投稿という記事を見つけた。PEAR を使わないといけない。いまはローカルに PHP をインストールしておらず、したがって PEAR もないので、必要なモジュールだけダウンロードしてきてサーバに上げた。あとちょっと元スクリプトを改良してできあがり。

<?php
// はてなブックマークにブクマをpost
function post_bkmk($user,$pass,$url,$body){
   require_once '../pear/Request.php';
   $body = mb_convert_encoding($body,"UTF-8","EUC-JP");
   $created = date('Y-m-d\\TH:i:s\\Z');
   $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).'"';
   $rawdata = '<entry xmlns="http://purl.org/atom/ns#"><title>dummy</title><link rel="related" type="text/html" href="'.$url.'" /><summary type="text/plain">'.$body.'</summary></entry>';
   $url = 'http://b.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();
}

にしても PEAR は便利なのだなぁと思った。思うのが遅すぎ。


Java版も作りました。