読者です 読者をやめる 読者になる 読者になる

はてなブックマークフィードAPIで取得したXMLで、パースエラーが発生する

スポンサーリンク

以前作った、はてなブックマークインクリメンタルサーチするブックマークレットGreasemonkeyスクリプトですが、エラーが発生して全件読み込めないことが多々あるようです。

はてなブックマークフィードのAPIを使用してフィードを取得しているのですが、APIで取得できたXMLをパースしようとすると、エラーに遭遇することがあります。

試しに、b:id:brazilさんのブックマークを全部読み込んでみようとしたところ、下記のような問題が発生し、全件読み込むことは出来ませんでした。

1. titleに制御文字のBS(\08)が入っているブックマークが存在し、XMLのパースでエラー

下記のサイトをブックマークすると、titleに\08が入ってしまうようです。

で、XMLのパースにて不正な文字が入っているということで、エラーとなります。
(エラーになる、ならないは、パーサによって違うのかもしれません)

他の方のブックマークも確認したところ、下記のページをブックマークしても変な制御文字が入ってしまいます。

ちなみにdel.icio.us APIで取得したXMLをみると、こういった制御文字は除去してくれているようです。

2. たまにメンテナンス中の画面のHTMLが帰ってくる

20件ずつ繰り返しfeedを取得しているのですが、たまにメンテナンス中の画面のHTMLが帰ってくる場合があります。
頻度はまちまちですが、当然XMLとしてパースしようとしてエラーとなるので、痛いです。。

エラーの対処方法について

1.については、XMLをパースする際に、制御文字を除去してからパースすれば防げそうですが、2.の方はどうしようもない気がしてます。
(もしかしてDOS攻撃だと判断されてたりして!?)


[2006/07/16 追記]
Greasemonkey版については、XMLパースする際に制御文字を除去してからパースするようにしました。
(ブックマークレット版は、XMLのパースがXMLHttpRequest内で行われる都合上、対処が難しそうです。)
また、エラー発生時に、リトライ可能としました。

これで、ブックマークが取得出来ないということは、防げるかなと思います。