このブログに投稿したエントリは自動的にはてなブックマークに"自ブクマ"(自分で自分のエントリをブックマークすること)されるようになっています(エントリの整理と告知のため)。ブクマにはogawaさん謹製のプラグイン「Hatena Bookmarker」を使っていたのですが、昨年末くらいからどうも調子が悪く(Permalinkが正しく渡されない)、手を入れたらなお一層悪く、2月終わりくらいからはエントリを投稿するとエラーで止まるようになってしまった(エラーはXML::Atomが不明な形式のデータを受け取ったとか何かそんなの)ためプラグインの動作を停止していました。


はてなブックマークのAtom APIについては、地味に仕様が変わったり(要求するデータが仕様書と食い違っていたり)、昨日動いてたのが今日動かなくなったりエラーを返したりと言うことが以前にもあって、全然信用できないのである程度諦めてたんですが、さっき試しにプラグインを一旦削除して、ogawaさんのところからダウンロードしたものをそのままインストールして試してみたらば...いけるじゃん!

直りました。

びっくりした...


サーバのモジュールに変更があったのか(共用サーバだからあっても仕方ない)とか、今だけはてなのAPIがおかしいのかとか考えたんですが。結局理由は分かりませんでした。以前カスタマイズしていた部分(特定のエントリのみ、ブックマーク対象から外す)を再度加えてもまったく問題なく動いてるし...なんだったんだろう。

何か凄く謎ですが、とりあえず動いてるからいいんじゃね?ってことで良しとします。

追記

どうもやはり上手くブックマークできない時があるようです。
正確に言うと、

  • はてなブックマークへのPostは成功しているように見える
  • ログにはエラーが記録される
  • 稀にタイトルが入力できないときがある

といった感じ。


エラーログは、

ブログ記事 (ID:xxxx) はブックマークされましたが、何らかのエラーが発生しました: Error on GET atom/edit/yyyy: 400 URL must be absolute

で、どうやら「EditURI」に対するGETリクエストでエラーが出ている模様。


処理の流れはブックマークの「タイトル変更」の仕様に基づき、

  1. PostURI POST でブックマークを投稿
  2. EditURI GET でタイトルを取得
  3. 2. で取得したタイトルを変更したい場合は、EditURI PUT でタイトルを変更

となっているはずなので、エラーは2番目で起きていると言うことになるはず。
つまりCMS.pm100行目の、

my $bookmark = $client->getEntry($editURI);

と言う部分で、確かにここでした。
で、これは、Client.pmの継承元のXML::Atom::ClientのgetEntry()ということになるわけですが、流れとしてXML::Atom::Client->createEntry()の返り値をつっこんでやるのは定石っぽいので、(当たり前ですが)どこにも「これやったら上手くいんじゃね?」的な何かがないんですよねぇ。。



問題は「2回目以降の更新でタイトルが更新されない」ということだけで、ブックマーク自体には特に支障は無さそうなので、これに関してはこの辺で諦めって感じかなぁとも思います。エラーログが気になるようなら、99行目までで強制終了しておけばOKかなとも。