サーバーと連携するWindowsストアアプリを作成する(後編)

CodeZine / 2014年10月2日 14時0分

ストアアプリの実行結果

 前回は、HttpClientクラスを利用した基本的なHTTP通信で、サーバーと連携する方法を紹介しました。HttpClientクラスは便利なクラスですが、FacebookのようなSNSとやり取りするには、SNS側の仕組みが複雑ということもあり、骨が折れます。そういう場合はFacebookに特化したライブラリなどを利用すると、簡単に連携できます。今回は上の例のようなHttpClientを使わずにRSSやSNSと連携する方法を紹介します。

■RSSフィードを取得する

 RSSとはブログなどの更新情報を公開する際に使われるフォーマットです。情報はXML形式で配信されます。

 例えば、CodeZineでも下図のようにページ下部にあるフッターからRSSの配信を確認することができます。

CodeZineのRSS配信


 「CodeZineのRSS配信」をクリックすると、下図のようにRSS 2.0で「新着記事」「新着コメント」「新着ブログ」といった情報を、それぞれRSS配信していることが分かります。

RSS配信の種類


 新着記事のRSS配信URLは以下です。

http://rss.rssad.jp/rss/codezine/new/20/index.xml●HttpClientを使うと

 まずは、新着記事のRSS配信を以下のようにHttpClientで取得してみます(RSSReader_000.zip)。コードは前編で紹介したものとほぼ同じですので、解説が見たい方は前編を参照ください。

HttpClientによるRSSフィードの取得
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)。

SyndicationClientによるRSSフィードの取得
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コントロールが配置されています。

MainPage.xaml
<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をListViewに表示


●RSSフィードの取得まとめ

 このようにRSSフィードを取得する場合は、SyndicationClientを知っていると処理が簡潔になります。

 ブログ記事の更新など、RSSフィードを取得して表示する機会も多いので、ぜひ覚えておきましょう。



CodeZine

トピックスRSS

ランキング