サーバー上の画像取得とRSSのデータを表示する

2011年8月5日(金)
PROJECT KySS

RSSのデータを表示する

次のサンプルはRSSのデータを取得して表示するサンプルです。このプログラムで実装する機能の動作を、下記に解説しておきます。このサンプルではMicrosoft社の提供するRSSを使用しています。

実行すると分類の一覧が表示されます。任意の分類を選択すると、目次選択画面が表示されます。任意の目次を選択すると、該当するサイトがWebBrowserコントロール内に表示されます。WebBrowser内ではタッチスクリーンの場合、2本の指で拡大縮小が可能です。また、エミュレーターを横にして表示することもできます。

3

図4:実行すると分類の一覧が表示される(左図)。任意の分類を選択すると、目次選択画面が表示される(中央図)。任意の目次を選択すると、該当するサイトがWebBrowserコントロール内に表示される(クリックで拡大)

サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。
※サンプル実行でエラーが発生した場合は、「ソリューションのビルド」を実行後、再度、デバッグ開始を行ってください。

WebBrowserコントロールで表示されたサイトに、Target=”_blank”の記述があると、リンクをクリックしても表示されませんので、注意してください。

プロジェクトの作成

VS 2010のメニューから[ファイル(F)/新規作成(N)/プロジェクト(P)]を選択します。次に、「Windows Phone Application」を選択して、「名前(N)」に任意のプロジェクト名を指定します。ここでは「WP7_CodeRecipeRss」という名前を付けています。Windows Phoneのバージョンは7.0を選択します。

RSSのデータをLINQ to XMLで処理するため、VS2010メニューの「プロジェクト(P)/参照の追加(R)」と選択してSystem.Xml.Linqを追加しておいてください。

また、タイトルと関連するRSSフィードのURIを記述したリスト3のXML文書ファイル(Menu.xml)も追加しておきます。ダウンロードされたファイルには、XML文書ファイルは追加済みです。

リスト3 タイトルとRSSフィードのURIを記述したXML文書ファイル(Menu.xml)

<?xml version="1.0" encoding="utf-8" ?>
  <分類>
    <タイトル uri="http://www.microsoft.com/japan/msdn/rss.xml">MSDNオンライン最新ニュース</タイトル>
    <タイトル uri="http://www.microsoft.com/japan/msdn/rss/feed/silverlight_ja_jp.xml">Silverlight</タイトル>
    ~<タイトル></タイトル>繰り返し~
  </分類>

MainPage.xamlの編集とコントロールの追加

x:NameがPageTitleのTextBlockのTextプロパティに「分類を選択」と指定します。

ツールボックスからエミュレーターデザイン画面上に、ListBoxコントロールを1個配置し、文字サイズのFontSizeプロパティに26と指定します(図5)。

3

図5:エミュレーターデザイン画面上に、ListBoxコントロールを配置した(クリックで拡大)

書き出されるXAMLにリスト4のように、Page Transitionのコードを追加します。

リスト4 Page Transitionコードの追加されたXAMLコード(MainPage.xaml)

(1)エミュレーターを横に倒した場合、メニューもそれに伴って横向きに表示されるようにするには、PhoneApplicationPageを選択し、表示されるプロパティウィンドウの[その他]にあるSupportedOrientationsプロパティに、PortraitOrLandscapeを指定します。
(2)第3回の連載で解説したPage Transitionのコードを記述しています。TurnstileTransition効果を持たせています。Transition効果を有効にするには、第3回の解説を参考にApp.xaml.vb内を書き換えてください。
<phone:PhoneApplicationPage 
  x:Class="WP7_CodeRecipeRss.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
  mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
  FontFamily="{StaticResource PhoneFontFamilyNormal}"
  FontSize="{StaticResource PhoneFontSizeNormal}"
  Foreground="{StaticResource PhoneForegroundBrush}"
  SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" ■(1)
  shell:SystemTray.IsVisible="True">

  <toolkit:TransitionService.NavigationInTransition> ■(2)
    <toolkit:NavigationInTransition>
      <toolkit:NavigationInTransition.Backward>
        <toolkit:TurnstileTransition Mode="BackwardIn"/>
      </toolkit:NavigationInTransition.Backward>
      <toolkit:NavigationInTransition.Forward>
        <toolkit:TurnstileTransition Mode="ForwardIn"/>
      </toolkit:NavigationInTransition.Forward>
    </toolkit:NavigationInTransition>
  </toolkit:TransitionService.NavigationInTransition>
  <toolkit:TransitionService.NavigationOutTransition>
    <toolkit:NavigationOutTransition>
      <toolkit:NavigationOutTransition.Backward>
        <toolkit:TurnstileTransition Mode="BackwardOut"/>
      </toolkit:NavigationOutTransition.Backward>
      <toolkit:NavigationOutTransition.Forward>
        <toolkit:TurnstileTransition Mode="ForwardOut"/>
      </toolkit:NavigationOutTransition.Forward>
    </toolkit:NavigationOutTransition>
  </toolkit:TransitionService.NavigationOutTransition>
  ~コード略~
</phone:PhoneApplicationPage>

Windows Phone Portrait Page(CodeRecipeIndex.xaml)の追加

VS2010メニューの「プロジェクト(P)/新しい項目の追加(W)」と選択して、「Windows Phone Portrait Page」を追加します。「名前(N)」には、CodeRecipeIndex.xamlと指定します。目次を表示するページです。

x:NameがPageTitleというTextBlockのTextプロパティに「目次を選択」と指定します。

エミュレーターデザイン画面上に、ツールボックスからListBoxコントロールを1個配置します。エミュレーターを横に倒した場合はプログラム上からWidthの値を変更します。エミュレーターを横に倒した場合、メニューもそれに伴って横向きに表示されるようにするには、PhoneApplicationPageを選択し、表示されるプロパティウィンドウの[その他]パネルにあるSupportedOrientationsプロパティに、PortraitOrLandscapeを指定します。

また、Page Transition(TurnstileTransition)コードも追加しておきます。

XAMLコードは省略します(リスト4参照)。

Windows Phone Portrait Page(PageViewx.xaml)の追加

VS2010メニューの「プロジェクト(P)/新しい項目の追加(W)」と選択して、「Windows Phone Portrait Page」を追加します。「名前(N)」には、PageView.xamlと指定します。WebBrowserにサイトを表示するページです。 x:NameがPageTitleというTextBlockのTextとStyleプロパティを削除します。ここにはプログラムからタイトルを表示します。

エミュレーターデザイン画面上に、ツールボックスからWebBrowserコントロールを1個配置します。(図6)。エミュレーターを横に倒した場合は、プログラム上からWidthの値を変更します。エミュレーターを横に倒した場合、WebBrowserもそれに伴って横向きに表示されるようにするには、PhoneApplicationPageを選択し、表示されるプロパティウィンドウの[その他]パネルにあるSupportedOrientationsプロパティに、PortraitOrLandscapeを指定します。

また、WebBrowserコントロールでは、プロパティウィンドウの[共通]パネルにあるIsScriptEnabledにデフォルトでチェックが付いてなく(False)、JavaScriptが無効となっています。このままだと、JavaScriptを使用したページに入った場合、うまく表示できない不具合が発生します。このサンプルでは、必ずIsScriptEnabledにチェックを付けてTrueにしておく必要があります。

XAMLコードは省略します。

3

図6:エミュレーターデザイン画面上に、WebBrowserコントロールを配置した(クリックで拡大)

クラスファイルの作成

XML文書ファイル(Menu.xml)ファイルを読み込み、XElementを返すクラスを作成します。VS2010のメニューから「プロジェクト(P)/クラスの追加(C)」と選択しても、表示される「新しい項目の追加」テンプレート内には、クラスと名の付くテンプレートは見当たりません。ここでは「コードファイル」を選択します。「名前(N)」にはReadXmldoc.vbと指定し、[追加(A)]ボタンをクリックします。この現象は、Windows Phone Developer Tools 7.1 Betaで発生する現象です。

今回のサンプルは、Windows Phone Developer Tools 7.1 Betaで作成していますが、現在リリースされている、Windows Phone SDK 7.1 Beta2では、VS2010メニューから「クラスの追加(C)」を選択すると、クラスのテンプレートがきちんと表示されます。下記URIよりダウンロードの上、インストールしてください。
→参照:Windows Phone SDK 7.1 Beta2
インストール方法は、この連載の第1回と同じですので、そちらを参考にしてください。

表示されるコード画面内に、リスト5のコードを記述します。

リスト5 (ReadXmldoc.vb)

Option Strict On
LINQ to XMLを利用するためSystem.Xml.Linq名前空間をインポートしておきます。
Imports System.Xml.Linq

ReadXmldocというクラスを定義します。ReadXmldocは「コードファイル」に付けた名称と同じです。
このReadXmldocクラス内に、XElement型のCodeRecipeDoc関数を作成します。
XElement.LoadメソッドでXML文書ファイル(Menu.xml)を読み込み、読み込んだXElement型のxmldocを戻り値とします。
Public Class ReadXmldoc
  Function CodeRecipeDoc() As XElement
    Dim xmldoc As XElement = XElement.Load("Menu.xml")
    Return xmldoc
  End Function
End Class

ソリューションエクスプローラー内のMainPage.xamlを展開し、表示されるMainPage.xaml.vbをダブルクリックしてリスト6のロジックコードを記述します。

  • 「サーバー上の画像取得とRSSのデータを表示する」サンプルプログラム_1

  • 「サーバー上の画像取得とRSSのデータを表示する」サンプルプログラム_2

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています