Consumindo dados da web no Windows Phone

Veja neste artigo como consumir dados da internet utilizando a classe WebClient em aplicações Windows Phone.

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.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados