はてなブックマークのAtom APIについては、地味に仕様が変わったり(要求するデータが仕様書と食い違っていたり)、昨日動いてたのが今日動かなくなったりエラーを返したりと言うことが以前にもあって、全然信用できないのである程度諦めてたんですが、さっき試しにプラグインを一旦削除して、ogawaさんのところからダウンロードしたものをそのままインストールして試してみたらば…いけるじゃん!
直りました。
びっくりした…
サーバのモジュールに変更があったのか(共用サーバだからあっても仕方ない)とか、今だけはてなのAPIがおかしいのかとか考えたんですが。結局理由は分かりませんでした。以前カスタマイズしていた部分(特定のエントリのみ、ブックマーク対象から外す)を再度加えてもまったく問題なく動いてるし…なんだったんだろう。
何か凄く謎ですが、とりあえず動いてるからいいんじゃね?ってことで良しとします。
追記
どうもやはり上手くブックマークできない時があるようです。正確に言うと、
- はてなブックマークへのPostは成功しているように見える
- ログにはエラーが記録される
- 稀にタイトルが入力できないときがある
といった感じ。
エラーログは、
ブログ記事 (ID:xxxx) はブックマークされましたが、何らかのエラーが発生しました: Error on GET atom/edit/yyyy: 400 URL must be absolute
で、どうやら「EditURI」に対するGETリクエストでエラーが出ている模様。
処理の流れはブックマークの「タイトル変更」の仕様に基づき、
- PostURI POST でブックマークを投稿
- EditURI GET でタイトルを取得
- 2. で取得したタイトルを変更したい場合は、EditURI PUT でタイトルを変更
となっているはずなので、エラーは2番目で起きていると言うことになるはず。
つまりCMS.pm100行目の、
my $bookmark = $client->getEntry($editURI);
と言う部分で、確かにここでした。
で、これは、Client.pmの継承元のXML::Atom::ClientのgetEntry()ということになるわけですが、流れとしてXML::Atom::Client->createEntry()の返り値をつっこんでやるのは定石っぽいので、(当たり前ですが)どこにも「これやったら上手くいんじゃね?」的な何かがないんですよねぇ。。
問題は「2回目以降の更新でタイトルが更新されない」ということだけで、ブックマーク自体には特に支障は無さそうなので、これに関してはこの辺で諦めって感じかなぁとも思います。エラーログが気になるようなら、99行目までで強制終了しておけばOKかなとも。