この記事は、今現在にリリースされている最新の「Windows 8 Release Preview(Build 8400)」、「Visual Studio 2012 RC」を利用しております。「Windows 8 Release Preview」は開発中のものであることにご留意ください。
「Windows.Data.Json名前空間のJsonArrayクラスを使って、JSONデータをパースする」のTipsを使って、Twitterのパブリック・タイムラインから情報を取得してみましょう。取得したデータをListViewで表示してみましょう。
取得したパブリック・タイムラインを表示するために、アカウントのサムネイル画像とScreenName、ツイートの内容を表示するListViewを定義します。
<Page x:Class="JsonReadSample.MainPage" IsTabStop="false" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:JsonReadSample" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <StackPanel> <Button x:Name="btnReadTwitter" Content="read twitter" Click="btnReadTwitter_Click" /> </StackPanel> <ListView x:Name="listView" HorizontalAlignment="Left" Margin="188,0,0,0" VerticalAlignment="Stretch" Width="366"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Source="{Binding ProfileImageUrl}" Width="100" Height="100" Stretch="Uniform"></Image> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding ScreenName}" /> <TextBlock Text="{Binding Text}" /> </StackPanel> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid> </Page>
ツイートを表示させるためのTweetクラスを定義します。
public class Tweet { public string Text { get; set; } public string ScreenName { get; set; } public string ProfileImageUrl { get; set; } }
Twitterのパブリック・タイムラインは、HttpClientクラスを使って取得しています。
HttpClientクラスの使い方は、「HttpClientを使ってReferrer等のリクエストヘッダを指定してインターネット上のリソースへアクセスする」にて軽く触れていますのでご覧ください。
private async void btnReadTwitter_Click(object sender, RoutedEventArgs e) { // Twitterのpublicタイムラインからデータを取得する var pubtl = new Uri(@"http://api.twitter.com/1/statuses/public_timeline.json?lang=ja"); var client = new HttpClient(); var result = await client.GetStringAsync(pubtl); // レスポンスを解析して一覧に追加 var array = default(JsonArray); var isSuccess = JsonArray.TryParse(result, out array); if (!isSuccess) { var dialog = new MessageDialog(@"JSONパースに失敗しました"); await dialog.ShowAsync(); return; } // パースしたデータから表示用にTweetクラスに変換する var tweets = array.Select(item => { var tweet = new Tweet(); var obj = item.GetObject(); tweet.Text = obj.GetNamedString("text"); var user = obj.GetNamedObject("user"); tweet.ScreenName = user.GetNamedString("screen_name"); tweet.ProfileImageUrl = user.GetNamedString("profile_image_url_https"); return tweet; }); // listView.ItemsSource = tweets; }