RSS・AtomフィードはValidatorでチェックしよう
なにをいまさら、と言われそうですが、RSSやAtomのフィードリーダーを作っていると、世の中には意外に仕様違反でエラーになるRSSが多い事に気が付きます。
特に多いのが、1.日付形式の仕様に沿っていないもの(RSS仕様違反)。2.アンパサンド &などのエスケープをしていないもの(XML仕様違反)。3.その他、稀に文字コードの変換か何かで、Unicodeの制御文字などのゴミが混じっている。
有名どころだと、Yahoo Japan が配信するRSSには日付違反の問題があります。(問い合わせフォームから報告しておきました)
RSS・AtomはXMLなので、まずはXML仕様に準拠したXMLライブラリで生成すればXMLエラーは回避できます。単なるテキストファイルとして書き出していると、思わぬエラーを起こしている可能性があります。そして、XMLの仕様はパスしたとしても、RSS・Atomの仕様に準拠しているかどうかという問題があります。特に日付形式は沢山種類があり、ちゃんと個別に仕様が決まっているため、どんな形式でも良いという訳ではありません。
そういった各仕様に準拠しているかどうか、チェックできるのが、本家W3CのフィードValidator.
(これ、十数年以上前から存在しているのに、なんで皆さん使わないのだろう・・・)
このツールに、先に触れたYahooジャパンのRSSを掛けてみると・・・
Feed Validator Results: https://news.yahoo.co.jp/rss/topics/top-picks.xml
Validateに失敗しています。
他の有名どころのサイトだと、英語サイトのEngadget のRSSフィードも同様の理由でダメですね。日本版サイトは大丈夫でしたが。
Feed Validator Results: https://www.engadget.com/rss.xml
Feedリーダーを開発している身からすると、日付フォーマット違反くらいだと、日付解析でエラーが起きたら別の方法で解析し直す、という簡単な方法で対処できるのですが、それだと仕様違反をそのままOKとして扱ってしまい、間違いを助長している事になりかねない、という懸念があり、悩ましい所です。RSSフィードって、日付ないとほぼ意味ないし・・
特に日本のYahooという有名所でこれをやられると、困る・・・。
とりあえず、日付は無理やり解析しておいて、デバッグウィンドウ にエラーをツラツラと出すようにしてみました。(誰が見るというのか・・・)
余談:
あと、珍しいエラーとしては、BitBankさんの技術ブログのRSSフィード。
これ、XMLのパーサーエラー
hexadecimal value 0x08, is an invalid character
というのが出たので、何だろうと思って調べた所、記事中に変なゴミ(制御文字か何か)が混じっていました。ブラウザで直接RSSフィードを開いてもエラーが確認できます。
W3CのValidatorでもちゃんとエラーになっていますね。
Feed Validator Results: https://tech.bitbank.cc/rss/
サイトのHTMLで、generatorを確認すると、Ghost 3.42というツールを使ってブログ(ページとRSS)を生成している模様。Ghostってツールは初めて聞いたけれども、Node.js を使った今風?のCMSらしい。新しくなおかつ英語圏ものなので、文字コードの取り扱いや不要なUnicodeの制御文字を取り除く処理がまだ微妙なのかもしれません。
これも、Bitbankの方に報告しておきました。
追記:問い合わせフォームから報告したら、下記のバグバウンティプログラムを通せ(以上)という一行程度の返信が来ました。
バグバウンティ自体は昔から知っていたし、Bitbankさんの告知のおかげで、日本でも始まったのも知っていたのですが、こんな大したことのない不具合・障害報告なんで、普通に対象外でしょう、と思っていました。
問い合わせフォームの返信はそっけなかったけども、報奨金がもらえるかも知れないものを告知せずいるよりも、良い対応といえば良い対応なのでしょう。
個人的にはどうでも良い話しで、単に面倒くさいのですが、まぁおもしろそうだったから、バグバウンティに本件を登録してみました。結果、何かあったらまた報告します。
続編: