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.
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.
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.
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.
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.