javaではてなブックマークAtomAPIを使う

はてなjigletが唯のRSSリーダーにならない為に、はてなブックマーク投稿機能を付けることにしました。
そのために必要なのがはてなブックマークAtomAPI!
AtomAPIって名前は聞いたことがあったのですが、こんなんだったんですね。
覚えてるうちにメモ残しておくことにします。


AtomAPIや、はてなブックマークAtomAPIの詳しい仕様については
上のリンクから辿って見に行ってください。

どこから手をつければいいのか

とりあえずネットで同じことしてる人がいないかを検索したら、1件だけjavaで同じことをやってる人の記事を見つけました。
yohei-y:weblog: Java からはてなフォトライフAtomAPIを使う


これはフォトライフAtomAPIですが、ブックマークでも同じです。
ほとんどこれ丸写しでいけます。
ありがとうありがとう。


ただ、これはルートAtomエンドポイントに対しGETリクエストを行ってるだけなので
はてなブックマークを投稿する場合、この後にも色々することはあります。

WSSE認証

↑で紹介したブログをコピペすれば、何か色々な情報がつまったxmlが返ってきて、
それを解析すれば投稿や編集ができるんだろうなと思っていたのですが、失敗しました。


解析は成功して、そこから得たPostURIにGETリクエストを送ったのですが
なぜか正常なレスポンスが返ってこない・・・・。


原因は、WSSE認証に対する誤った考え方でした。

WSSE認証はHTTPのX-WSSEヘッダを用いて認証用文字列を送信する認証手段です。

↑の通り、WSSE認証とは、リクエストのヘッダにX-WSSEヘッダを付け加えるものです。
X-WSSEヘッダの付け加え方は、↑で紹介したブログ記事に書いてあります。


その部分は理解できたのですが、なんか勘違いしてしまって
ルートAtomエンドポイントに対するGETリクエストのヘッダーにだけX-WSSEを付け加えればいいと考えてしまっていました。
ですが実際は、その後のPostURIなどにリクエストを送る時もX-WSSEヘッダーを付ける必要があったみたいです。
はてなの説明ページ分かりにくいよ!w


今考えると当然なんですけどね・・・、実際にはてブ投稿する時に必要な認証なわけですから。


というわけでリクエストにX-WSSEヘッダを付けたら、正常なレスポンスが返ってきました。
あとはxmlの解析を頑張れば、はてなブックマークの投稿でも編集でも何でもできます。

あとがき

xmlの解析はエントリー取得の時に初めてやりましたが、
色々使う場面が多そうなので勉強してよかったと実感しました。
いきなりAtomAPIで使うことになったしねw


jigletの方はもうほぼ完成しているので、そろそろ公開しようと思います。

追記

403エラーになる方はこちらを参考にどうぞ
はてなブックマークAtomAPIで403 解決編 - てきろぐ(仮)