<?xml version="1.0" encoding="UTF-8" ?>
<entry
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
	xml:lang="ja-JP"
>
	<title>はてなブックマークAtomAPIだのWSSEだの</title>
	<id>tag:txqz.net,2006-02-02:blog/2006/02/02/1125</id>
	<link rel="self" href="http://txqz.net/blog/2006/02/02/1125.atom"/>
	<link rel="alternate" type="application/rss+xml" href="http://txqz.net/blog/2006/02/02/1125.rdf"/>
	<link rel="alternate" type="application/xhtml+xml" href="http://txqz.net/blog/2006/02/02/1125.xhtml"/>
	<link rel="alternate" type="text/html" href="http://txqz.net/blog/2006/02/02/1125.html"/>
	<link rel="contents" href="http://txqz.net/blog/2006/02/02/.atom" title="2006年2月2日"/>
	<link rel="first" href="http://txqz.net/blog/2001/08/04/0001.atom" title="地球空冷化"/>
	<link rel="prev" href="http://txqz.net/blog/2006/02/02/0856.atom" title="そつけんはっぴょうよこく"/>
	<link rel="next" href="http://txqz.net/blog/2006/02/02/2123.atom" title="訴えたいことがないんです"/>
	<link rel="last" href="http://txqz.net/blog/2010/02/14/1221.atom" title="VIASO/K-power追悼"/>
	<author>
		<name>陽坂智佐</name>
		<email>spambasket@txqz.net</email>
	</author>
	<content type="xhtml">
		<div xmlns="http://www.w3.org/1999/xhtml">
<p>私はタブブラウザにめぼしいものをいっぱい開いておいて、一通り見終わったら一気にはてブに放り込んでいる。ブックマークレットのボタンを押して次のタブに移ってまたブックマークレットのボタンを押して……というのを繰り返し、はてブの入力画面が出てきたらそこに戻るという感じでやっていた。で、コメントを書いて「追加する」を押して次のタブに移ってまたコメントを書いて……とやっているのだけれども、他のタブでブクマの登録が終わると、いま文字を入力していたテキストフォームのフォーカスがなんか変な感じになって未変換だった文字が消えたり、やけにフォーム入力が遅くなったり、裏で色々なJavaScriptが動いている副作用なんだろうけどストレスを感じる原因になっていた。なので<a href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AFAtomAPI" title="はてなダイアリー - はてなブックマークAtomAPIとは">はてなブックマークAtomAPI</a> を使ってマイ入力装置を作った。</p>
<p>WSSE とか API 仕様とか REST がどうのこうのとかなんか面倒だったのでとりあえず検索。なんか perl なんだな。 PHP で実装しているのをまた検索。<a href="http://dev.blogtribe.org/entry-cecf9a906039e562690956e918c84f49.html" title="眠る開発屋blog:HTTP_Requestを使ってはてなフォトライフへ画像を投稿">HTTP_Requestを使ってはてなフォトライフへ画像を投稿</a>という記事を見つけた。<a href="http://pear.php.net/" title="PEAR :: The PHP Extension and Application Repository">PEAR</a> を使わないといけない。いまはローカルに PHP をインストールしておらず、したがって PEAR もないので、必要なモジュールだけダウンロードしてきてサーバに上げた。あとちょっと元スクリプトを改良してできあがり。</p>
<pre><code class="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 = '&lt;entry xmlns="http://purl.org/atom/ns#"&gt;&lt;title&gt;dummy&lt;/title&gt;&lt;link rel="related" type="text/html" href="'.$url.'" /&gt;&lt;summary type="text/plain"&gt;'.$body.'&lt;/summary&gt;&lt;/entry&gt;';
   $url = 'http://b.hatena.ne.jp/atom/post';
   $req = new HTTP_Request();
   $req-&gt;addHeader('Accept','application/x.atom+xml, application/xml, text/xml, */*');
   $req-&gt;addHeader('Authorization', 'WSSE profile="UsernameToken"');
   $req-&gt;addHeader('X-WSSE',$wsse );
   $req-&gt;addHeader('Content-Type', 'application/x.atom+xml');
   $req-&gt;setMethod(HTTP_REQUEST_METHOD_POST);
   $req-&gt;setURL($url);
   $req-&gt;addRawPostData($rawdata);
   $res = $req-&gt;sendRequest();
}</code></pre>
<p>にしても PEAR は便利なのだなぁと思った。思うのが遅すぎ。</p>
<ins class="ps" datetime="2008-06-11T12:52:31+09:00" id="PS20080611125231">
<p><a href="http://txqz.net/blog/2008/06/06/1554" title="はてブのAtomAPIからまとめてブクマ">Java版</a>も作りました。</p>
</ins>
		</div>
	</content>
	<category term="API"/>
	<category term="AtomPP"/>
	<category term="WSSE"/>
	<category term="XML"/>
	<category term="はてな"/>
	<category term="はてなブックマーク"/>
	<trackback:ping>http://txqz.net/blog/2006/02/02/1125/tb</trackback:ping>
	<trackback:about>http://zapanet.info/blog/item/1057</trackback:about>
	<published>2006-02-02T11:25:00+09:00</published>
	<updated>2008-06-11T12:51:53+09:00</updated>
	<rights>Attribution-Noncommercial-Share Alike 3.0 Unported</rights>
</entry>