torum

主に開発中のアプリにまつわる技術系の事。

RSS・AtomフィードはValidatorでチェックしよう

f:id:torum:20210623104102p:plain

BlogWrite

なにをいまさら、と言われそうですが、RSSAtomフィードリーダーを作っていると、世の中には意外に仕様違反でエラーになるRSSが多い事に気が付きます。

特に多いのが、1.日付形式の仕様に沿っていないもの(RSS仕様違反)。2.アンパサンド &などのエスケープをしていないもの(XML仕様違反)。3.その他、稀に文字コードの変換か何かで、Unicodeの制御文字などのゴミが混じっている。

有名どころだと、Yahoo Japan が配信するRSSには日付違反の問題があります。(問い合わせフォームから報告しておきました)

news.yahoo.co.jp

 

RSSAtomXMLなので、まずはXML仕様に準拠したXMLライブラリで生成すればXMLエラーは回避できます。単なるテキストファイルとして書き出していると、思わぬエラーを起こしている可能性があります。そして、XMLの仕様はパスしたとしても、RSSAtomの仕様に準拠しているかどうかという問題があります。特に日付形式は沢山種類があり、ちゃんと個別に仕様が決まっているため、どんな形式でも良いという訳ではありません。

そういった各仕様に準拠しているかどうか、チェックできるのが、本家W3CのフィードValidator.

validator.w3.org

 (これ、十数年以上前から存在しているのに、なんで皆さん使わないのだろう・・・)

 

このツールに、先に触れたYahooジャパンのRSSを掛けてみると・・・

Feed Validator Results: https://news.yahoo.co.jp/rss/topics/top-picks.xml

 

Validateに失敗しています。

 

Yahoo Japan RSS feed validator result

他の有名どころのサイトだと、英語サイトのEngadget のRSSフィードも同様の理由でダメですね。日本版サイトは大丈夫でしたが。 

Feed Validator Results: https://www.engadget.com/rss.xml

 

Feedリーダーを開発している身からすると、日付フォーマット違反くらいだと、日付解析でエラーが起きたら別の方法で解析し直す、という簡単な方法で対処できるのですが、それだと仕様違反をそのままOKとして扱ってしまい、間違いを助長している事になりかねない、という懸念があり、悩ましい所です。RSSフィードって、日付ないとほぼ意味ないし・・

特に日本のYahooという有名所でこれをやられると、困る・・・。

とりあえず、日付は無理やり解析しておいて、デバッグウィンドウ にエラーをツラツラと出すようにしてみました。(誰が見るというのか・・・)

github.com

 

余談:

あと、珍しいエラーとしては、BitBankさんの技術ブログRSSフィード

これ、XMLのパーサーエラー

hexadecimal value 0x08, is an invalid character

というのが出たので、何だろうと思って調べた所、記事中に変なゴミ(制御文字か何か)が混じっていました。ブラウザで直接RSSフィードを開いてもエラーが確認できます。

f:id:torum:20210710010018j:plain

 

W3CのValidatorでもちゃんとエラーになっていますね。

Feed Validator Results: https://tech.bitbank.cc/rss/

サイトのHTMLで、generatorを確認すると、Ghost 3.42というツールを使ってブログ(ページとRSS)を生成している模様。Ghostってツールは初めて聞いたけれども、Node.js を使った今風?のCMSらしい。新しくなおかつ英語圏ものなので、文字コードの取り扱いや不要なUnicodeの制御文字を取り除く処理がまだ微妙なのかもしれません。

これも、Bitbankの方に報告しておきました。

追記:問い合わせフォームから報告したら、下記のバグバウンティプログラムを通せ(以上)という一行程度の返信が来ました。

bitbank.cc

 バグバウンティ自体は昔から知っていたし、Bitbankさんの告知のおかげで、日本でも始まったのも知っていたのですが、こんな大したことのない不具合・障害報告なんで、普通に対象外でしょう、と思っていました。

問い合わせフォームの返信はそっけなかったけども、報奨金がもらえるかも知れないものを告知せずいるよりも、良い対応といえば良い対応なのでしょう。

個人的にはどうでも良い話しで、単に面倒くさいのですが、まぁおもしろそうだったから、バグバウンティに本件を登録してみました。結果、何かあったらまた報告します。

 

続編:

torum.hatenablog.com