ふと思ったこと。
@IT 内 Insider.NET にある Insider.NET 会議室 ディレクトリって、探したい対象のカテゴリがわかっている場合、便利です。でも、新しい会議室の方には対応していません。
じゃぁ、自分で作っちまおうか?
でも、どうやって「新着情報」を知る???
そうか、RSS があるじゃないか!最近、質問掲示板でも RSS が配信されるものが多いから、RSS を拾って更新のあったものを自分で分類していけばいいやん!!かつ、ブログだろうがニュースだろうが、何でも登録できちゃうぜ!!
ってことで、RSS を調べた。したら、最初のバージョンが 0.9 だったらしい。次のバージョンが 0.91 で、ここからよりシンプルになることを目指した 2.0 と、0.9 を継承した 1.0 に分かれているらしい。
さらに、マイクロソフト ソーシャルは、Atom って奴で配信されている。ってことで、ひとまとめに RSS といわれている XML ファイルには、(0.9, 0.91, 1.0)と、(2.0)と、(Atom)の3つのフォーマットがあることがわかった。
う~ん。。。とりあえず、こんな感じか?
- RSS を取得する URL を、ユーザーが指定する。
- 複数ある URL を定期的に巡回する。
- XML の階層を調べて、フォーマットを特定する。
- フォーマットによって、配信された記事をばらす。
- 記事 ID を持っているものはそれを、持っていない場合はリンク先 URL をキーにして重複チェックを行う。
- 新しいものについて、「新着」として登録する。
- それぞれの記事を、人手で「分類」に分ける。
- 「分類」ごとに、HTML、または XML ファイルを作る。
- FTP ソフトなどで、HTML または XML を HTTP サーバーにアップする。
RSS を取ってくる方法は、VS2008 のサンプルの中にあるので、ドキュメントを「RSS」でキーワード サーチしてください。そのサンプルでは、.NET Framework が対応している、RSS 2.0 が扱えます。「はてな」が配信しているのは RSS 1.0 なので、そのままでは使えません。また、マイクロソフト ソーシャルが提供しているのは Atom なので、やはり使えません。
とりあえず、どのフォーマットか見分ける方法。
このことから、トップ レベル要素のローカル名を見て判断すればよいでしょう。
static public string WhichFormat(XDocument document) {
var root = document.Root;
if (string.Compare(root.Name.LocalName, "feed", true) == 0) {
return "ATOM";
} else if (string.Compare(root.Name.LocalName, "rdf", true) == 0) {
return "RSS10";
} else if (string.Compare(root.Name.LocalName, "rss", true) == 0) {
return "RSS20";
} else {
return "UNKNOWN";
}
}
で、次は、データの設計かな。
つーか。。。@IT の会議室、RSS 配信してないし。。。
あ。。。大文字小文字の区別をしないようにしたけど、XML って、識別するやんorz
さらに。RSS 1.0 にしろ 2.0 にしろ、バージョンアップしたらどうするよ?要るのは一部だけで、全部をパースするわけじゃないから、まいっか。
投稿日時 : 2009年6月4日 22:26