Existem alguns modos de consumir dados pela web, e um deles é com a classe WebClient, assim é possível consumir qualquer endereço HTTP podendo ser JSON, HTML, XML e etc...

No exemplo deste artigo será consumida a API do Twitter e será exibido no ListBox a listagem de Tweets da página escolhida. Para isso abra o Visual Studio 2012 e crie um projeto Windows Phone Application, conforme a figura 1.

Criação do Projeto ConsumindoWebClient no Visual Studio

Figura 1: Criação do Projeto ConsumindoWebClient no Visual Studio

Ao criar o projeto é exibida uma caixa com a opção de escolha da versão do Windows Phone, escolha a 7.1, pois assim o seu aplicativo funcionará em todas as versões de Windows Phone disponíveis.

Abra o arquivo MainPage.xaml e vá ao content panel para adicionar o TextBox que irá ser preenchido com o nome do usuário a serem listados os tweets, o botão Pesquisar para ter o método de busca, e o listbox que terá o conteúdo consumido.

Listagem 1: Código da página MainPage.xaml


<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <TextBox Height="72" HorizontalAlignment="Left" Margin="10,10,0,0"
Name="txtNome" VerticalAlignment="Top" Width="287" />
        <Button Name="btnPesquisar" Width="160"  Height="70" Content="Pesquisar"
HorizontalAlignment="Left" Margin="290,10,0,0" VerticalAlignment="Top"/>
        <ListBox Name="lstTweets" Width="415" HorizontalAlignment="Left"
Margin="24,88,0,0" VerticalAlignment="Top">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Height="130" Orientation="Horizontal">
                        <Image Source="{Binding SourceImage}" Width="70" Height="70"
VerticalAlignment="Top" Margin="0,10,8,0" />
                        <StackPanel Width="370">
                            <TextBlock Text="{Binding NomeUsuario}" Foreground="White"
FontSize="30" />
                            <TextBlock Text="{Binding Mensagem}" TextWrapping="Wrap"
FontSize="25" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>

Agora será necessário criar a classe ItemTwitter, que será a classe que representa o dado, a usaremos para manipular as informações recebidas. Vá ao Solution Explorer e clique com o botão direito no projeto, e depois em Add e então selecione Class. Defina o nome da classe para ItemTwitter e clique em Add conforme a figura 2.

Criação da classe ItemTwitter.cs

Figura 2: Criação da classe ItemTwitter.cs

Essa classe possuirá três variáveis, uma chamada NomeUsuario que terá o nome do usuário do Twitter, como o próprio nome já diz; outra chamada Mensagem que conterá o tweet do usuário pesquisado; e SourceImage que conterá o caminho da imagem do Twitter do usuário, a classe ficará conforme a listagem 2.

Listagem 2: Código da classe ItemTwitter.cs


class ItemTwitter
{
	public string UserName { get; set; }
	public string Message { get; set; }
	public string ImageSource { get; set; }
}

Neste projeto também deverá ser adicionado o assembly System.XML.Linq para utilizar a classe XElement que contém o método que irá transformar em XML o resultado do consumo do link. Portanto, vá ao Solution Explorer e clique com o botão direito em References e depois Add Reference, marque o System.XML.Linq e clique em Ok, conforme a figura 3.

Adicionando o Assembly System.XML.Linq

Figura 3: Adicionando o Assembly System.XML.Linq

Então agora abra o arquivo MainPage.xaml.cs e então você irá adicionar ao método btnPequisarClick o tratamento dos dados recebidos, em que através do link do Twitter e o nome do usuário você irá listar os tweets no ListBox. Você também deverá adicionar a utilização do System.XML.Linq no topo do arquivo. A classe ficará conforme a listagem 3.

Listagem 3: Arquivo da classe MainPage.xaml.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Xml.Linq;
 
namespace ConsumindoWebClient
{
	public partial class MainPage : PhoneApplicationPage
	{
		// Constructor
		public MainPage()
		{
			InitializeComponent();
		}
 
		private void btnPesquisar_Tap_1(object sender, GestureEventArgs e)
		{
			WebClient twitter = new WebClient();
 
			twitter.DownloadStringCompleted += twitter_DownloadStringCompleted;
			Uri uri = new Uri("https://api.twitter.com/1/statuses/
user_timeline.xml?include_entities=true&include_rts=true&screen_name=" +
txtNome.Text);
			twitter.DownloadStringAsync(uri);
		}
 
		void twitter_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
		{
			if (e.Error != null)
			{
				return;
			}
			XElement tweets = XElement.Parse(e.Result);
 
			lstTweets.ItemsSource = from t in tweets.Descendants("status")
			select new ItemTwitter
			{
				SourceImage = t.Element("user").Element("profile_image_url").Value,
				Mensagem = t.Element("text").Value,
				NomeUsuario = t.Element("user").Element("screen_name").Value
			};
		}
	}
}

Você pode notar que é essencial a verificação do resultado, caso não tenha acontecido algum erro você irá exibir os tweets na lista. Assim evita o encerramento da aplicação.

Agora você pode executar a aplicação pressionando F5, e digitar no campo, por exemplo, nabil_safatli e clicar em pesquisar. O aplicativo deve exibir os dados, conforme a figura 4.

Aplicação em funcionamento com o retorno dos dados

Figura 4: Aplicação em funcionamento com o retorno dos dados

Tomando como base o código aqui apresentado, outros serviços podem ser consumidos e as respostas tratadas da forma mais adequada. Um abraço e até o próximo artigo.