RSSフィードを取得する
RSSとはブログなどの更新情報を公開する際に使われるフォーマットです。情報はXML形式で配信されます。
例えば、CodeZineでも下図のようにページ下部にあるフッターからRSSの配信を確認することができます。
「CodeZineのRSS配信」をクリックすると、下図のようにRSS 2.0で「新着記事」「新着コメント」「新着ブログ」といった情報を、それぞれRSS配信していることが分かります。
新着記事のRSS配信URLは以下です。
HttpClientを使うと
まずは、新着記事のRSS配信を以下のようにHttpClientで取得してみます(RSSReader_000.zip)。コードは前編で紹介したものとほぼ同じですので、解説が見たい方は前編を参照ください。
HttpClient client = new HttpClient(); String url = "http://rss.rssad.jp/rss/codezine/new/20/index.xml"; HttpResponseMessage message; String responseString; try { message = await client.GetAsync(url); responseString = await message.Content.ReadAsStringAsync(); resultTextBlock.Text = responseString; // 文字列として取得しているのでここから色々加工して・・・ } catch { }
実行結果としてXML形式の文字列が取得できます。
この結果のXMLを解析すればRSSデータを利用することができますが、解析する手間がかかります。
ストアアプリではSyndicationClientクラスを用いることで、より処理を簡便化できます。
SyndicationClientクラスを用いたサンプル
SyndicationClientクラスを用いてRSSフィードを取得するサンプルは以下です(RSSReader_001.zip)。
Uri uri = new Uri("http://rss.rssad.jp/rss/codezine/new/20/index.xml"); SyndicationClient client = new SyndicationClient(); SyndicationFeed feed = await client.RetrieveFeedAsync(uri); // 取得したアイテムをListViewに表示 this.FeedListView.DataContext = feed.Items;
MainPage.xamlには、以下のようなListViewコントロールが配置されています。
<Page.Resources> <DataTemplate x:Key="FeedDataTemplate"> <Grid> <StackPanel Orientation="Vertical"> <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Title.Text}" VerticalAlignment="Top"/> <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Summary.Text}" VerticalAlignment="Top" Height="40"/> </StackPanel> </Grid> </DataTemplate> </Page.Resources> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ListView x:Name="FeedListView" HorizontalAlignment="Left" Margin="60" ItemTemplate="{StaticResource FeedDataTemplate}" ItemsSource="{Binding}"/> </Grid>
SyndicationClientを用いると、簡単にListViewへの表示までできてしまうことが分かります。
SyndicationClientクラス
RSSフィードを処理するためのSyndicationClientクラスです。
SyndicationClient.RetrieveFeedAsyncメソッド
非同期に指定されたURLのRSSフィードを取得します。
取得したRSSフィードは、先ほどのHttpClientを用いた処理のように文字列ではなく、専用のSyndicationFeedクラスとして取得できるため、その後の処理を行いやすくなっています。
ListViewへの表示
最後に取得したfeedを加工なしにListViewに表示しています。
SyndicationFeedのItemsプロパティからフィードの一覧を簡単に取得できます。
RSSフィードの取得まとめ
このようにRSSフィードを取得する場合は、SyndicationClientを知っていると処理が簡潔になります。
ブログ記事の更新など、RSSフィードを取得して表示する機会も多いので、ぜひ覚えておきましょう。