世界の観光地情報を眺めるサンプルプログラム
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト3のコードを記述します。
ロジックコードを記述する
リスト3 (MainWindow.xaml.vb)
Option Strict On
最新の HTTP アプリケーション用のプログラミングインターフェイスを提供するクラスの含まれる、System.Net.Http名前空間をインポートします。
Imports System.Net.Http
TouristInfoクラス内に文字列型のname、title、description、urlプロパティを定義しておきます。
Public Class TouristInfo Property name As String Property title As String Property description As String Property url As String End Class Public NotInheritable Class MainPage Inherits Page<
リクルートより取得したキーで定数メンバ変数ApiKeyを初期化しておきます。APIキーは下記のURLより「新規登録」でメールアドレスを入力して送ると、リクルートよりキーが送られてきますので、それを使用します。
→ http://webservice.recruit.co.jp/ab-road/reference.html
ConstApiKey As String = "リクルートより取得したキー"
Dim countryName As String
コンボボックスより地域が選択された時の処理
ComboBoxより選択された値をComboBoxItemにキャストし、Contentプロパティで取得した値を文字列に変換して変数areaNameに格納します。
変数areaNameの値で条件分岐を行います。
それぞれの地域の名前で変数countryNameにエリアコードを格納します。
変数myUrlに
String.Format("http://webservice.recruit.co.jp/ab-road/spot/v1/?key={0}&area={1}&count=100&format=xml", ApiKey, countryName)
と指定して、引数keyにリクルートより取得したApiKeyを指定し、areaに変数countryName変数の値を指定します。このクエリで返される結果XMLは図5のような構造です。赤い下線部分の要素の値を使用します。
新しいHttpClientのインスタンスmyHttpClientオブジェクトを作成します。
GetFileAsyncメソッドで、指定URIにGET要求を送信し、非同期操作で応答本体を文字列として取得し、変数myResultに格納します。
ルート要素
XElement.Parseメソッドで変数myResultの内容を文字列として読み込みます。
TouristInfoクラス型のリストであるmyTouristInfoオブジェクトを作成します。
Descendantsメソッドで全ての子孫要素
TouristInfoクラスのnameプロパティに
GridViewのItemsSourceプロパティに変数myTouristInfoオブジェクト値を指定します。これでタイルの中にname、title、descriptionの内容が表示されます。TitleTextBlockにComboBoxより選択した地域名を「の観光地」という文字列と連結して表示します。
Private Async Sub ComboBox1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboBox1.SelectionChanged Dim areaName = DirectCast(ComboBox1.SelectedItem, ComboBoxItem).Content.ToString Select Case areaName Case "アジア" countryName = "AAS" Case "ビーチリゾート" countryName = "BCH" Case "ハワイ" countryName = "HWI" Case "ヨーロッパ" countryName = "EUR" Case "アメリカ" countryName = "DUS" Case "オセアニア" countryName = "FOC" Case "アフリカ・その他" countryName = "CAF" End Select Dim myUrl = String.Format("http://webservice.recruit.co.jp/ab-road/spot/v1/?key={0}&area={1}&count=100&format=xml", ApiKey, countryName) Dim myHttpClient As New HttpClient Dim myResult As String = Await myHttpClient.GetStringAsync(myUrl) myResult = myResult.Replace("<results xmlns=" &ChrW(34) & "http://webservice.recruit.co.jp/ab-road/" &ChrW(34) & ">", "<results>") Dim xmldoc As XElement = XElement.Parse(myResult) Dim myTouristInfo As New List(Of TouristInfo) For Each result In From c In xmldoc.Descendants("spot") Select c With myTouristInfo .Add(New TouristInfo With {.name = result.Element("name").Value, .title = result.Element("title").Value, .description = result.Element("description").Value, .url = result.Element("url").Value}) End With Next GridView1.ItemsSource = myTouristInfo TitleTextBlock.Text = areaName& "の観光地" End Sub
GridViewの項目が選択された時の処理
Frameを表示状態にします。
ComboBoxを選択不可とします。
変数myUrlにGridViewから選択された項目を、TouristInfoクラスにキャストして、そのurlプロパティの値を取得し格納します。
変数myUrlの値を引数にWebBrowserPageに遷移します。
例外が発生した場合は、ComboBoxの選択を可能にし、Frameを非表示とします。
Private Sub GridView1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridView1.SelectionChanged Try myFrame.Visibility = Windows.UI.Xaml.Visibility.Visible ComboBox1.IsEnabled = False Dim myUrl As String = DirectCast(GridView1.SelectedItem, TouristInfo).url myFrame.Navigate(GetType(WebBrowserPage), myUrl) Catch ComboBox1.IsEnabled = True myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Try End Sub
戻る(←)アイコンがタップされた時の処理
ComboBoxの使用を可能とし、Frameを非表示にします。
Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click ComboBox1.IsEnabled = True myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Sub End Class
次に、ソリューションエクスプローラー内のWebBrowserPage.xamlを展開して表示される、WebBrowserPage.xaml.vbをダブルクリックしてリスト4のコードを記述します。
ロジックコードを記述する
リスト4 (WebBrowserPage.xaml.vb)
Option Strict On Public NotInheritable Class WebBrowserPage Inherits Page
ページがアクティブになった時の処理
MainPage.xamlから渡された引数(myUrl)は、e.Parameterで取得できます。これはObject型であるため、DirectCastでString型にキャストして、変数myUriに格納します。
WebBrowserのSourceプロパティにmyUriの値を指定します。これでWebBrowser内に、該当する観光地の情報が表示されます。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myUri As String = DirectCast(e.Parameter, String) WebBrowser1.Source = New Uri(myUri, UriKind.Absolute) End Sub End Class
今回でこの連載は終了です。長い間おつきあいありがとうました。
次回の連載も、ぜひ楽しみに待っていてくだされば嬉しいです。
筆者からのお知らせ
筆者はWindowsストアでアプリを公開しています。チャームの検索からWindowsストアを選択して、検索欄に、kuniyasuまたはYakushijiKuniyasuと入力すると、公開されているアプリの一覧が表示されます。上記はどちらも私のアカウントですので、興味のある方は是非ダウンロードして使ってみてください。
世界の観光地を表示・検索するプログラム