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フィードを取得して表示する機会も多いので、ぜひ覚えておきましょう。



