かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Windows Phone 7でRSSの読み込み

さくっとですが、以下のような動きをするRSSリーダーもどきを作ってみました。

ソースコードは以下からダウンロードできます。
OkazukiRssReader.zip

とりあえずMVVMパターンとかいう作るのがめんどくさいのは置いといて、素直にイベントハンドラに処理を書いています。
肝になるのは、以下のコードかな?

var ns = XNamespace.Get("http://purl.org/rss/1.0/");
var rssUrl = textBox1.Text;
var req = HttpWebRequest.Create(rssUrl);
Observable.FromAsyncPattern<object>(
    req.BeginGetResponse,
    req.EndGetResponse)()
    .OfType<HttpWebResponse>()
    .Select(res =>
        {
            var doc = XDocument.Load(res.GetResponseStream());
            return doc.Root.Descendants(ns + "item");
        })
    .SelectMany(items => items)
    .Select(element =>
        new RssInfo
        {
            Title = element.Element(ns + "title").Value,
            Url = element.Element(ns + "link").Value
        })
    .ObserveOnDispatcher()
    .Subscribe(rss => listBox1.Items.Add(rss),
        ex => 
        {
            MessageBox.Show(ex.Message);
        },
        () => { });

Reactive Extensionを使って非同期処理だけどさくっと書いてます。
レスポンスを取得してXDocumentにしてitemタグだけ抽出したあとにRssInfo型(独自定義)に変換して、UIスレッドでListBoxに追加してます。
何かエラーがあったら画面に出すようにもしています。(動画で最初にボタンを押したときのような動きをする)

適当に作るぶんには割合簡単にできます。