検証結果4 RSSの解釈部の検証 : RSSリーダを.NET Framework 2.0で作る (第5回)
今回は、RSS.NETを組み込んで20以上のRSSを読み取り「精度」「速度」について検証を行う。
早速ごにょ ごにょとテストコードを作り、購読先を登録します。
CNET Japan, IT Media を初めとする10余りのRSSのURLを登録して取得処理の時間と取得内容をチェックします。
ダウンロードと解析速度
まず、速度ですが1つのURLに対して0.03秒〜2.2秒で読み込みと解析を完了しています(3スレッド並行時)。 アプリケーションの性格から10秒かかってもバックグランド動作とすれば実質問題ないので実用に十分です。
解析精度
肝心のRSS.NETの解析結果ですが、10数個の登録に対して数個しか公開日付が取れていません。
以前のテストでは、たまたま正しく取れるRSSのみ試してしまったようです。
正しく取れなかったRSSと取れたものを比較するとスグに分かるのですが、日付が取れなかったものは、RSS 1.0 として生成されたもので、取れたものはRSS 2.0でした。
テストした多くのものがダメということは、未だRSS 2.0は普及していないのですね。
Web 2.0なんて書いてあるサイトのRSSが1.0なのも玄人向けの洒落が利いていて思わず ニヤッ とさせられます。
RSS.NETのサイトを再度確認すると、
It is fully compatible with RSS versions 0.90, 0.91, 0.92, and 2.0.1, implementing all constructs.
あれ、意識していなかったのですが1.0は含まれていないの?
RSS.NETのRSSバージョン比較のページを見ると、RSS 1.0は意図してはずしているようですね。
RSS 1.0が多い現実と、意図して外されている仕様の天秤をかければ自ずとどうするか決まります。 MicroRssReaderはあくまで実用ツールですから必要な部分は読むしかないです。
RSS 1.0 対応する
MicroRssReaderが読み取りたい項目は、「タイトル」「リンク」「内容」「日付」の4つが最低限です。 このうち RSS.NET で読み取れていないのは 日付 のみです。幸いRSS.NETのライセンス上改変は禁止されていないため、実益を優先してしまいます。
RSSの解析を行っているのはRssReader.csに含まれている Rss.RssReader クラスでRead()メソッド内でXMLを解釈しています。
pubdate (RSS2.0)を解釈している部分を見ると素晴らしいswich文のネストで正攻法で付け入る隙がありません。
ちょっと躊躇しましたがここはcaseを注入することにします。
次のように pubdate に流れるように dc:date の case を追加してしまいます。
case "dc:date":
case "pubdate":
try
{
channel.PubDate = DateTime.Parse(elementText.ToString());
}
2箇所あるので両方入れておきます。
再度テストプログラムで読み込むと、今度は日付が入って成功です。
RSS1.0, RSS2.0 は読み込めるのでOKとします。
これでプロトタイプによる検証は終わりです。
実際にはそれっぽいリーダが出来ているのですが「プロトタイプは捨てなさい」という誰が言ったか分からない言葉に習って次回から動作するものを作っていきます。
第6回に続く

Comments