Twitter Search in Silverlight

Tìm kiếm trên Twitter trên ứng dụng Silverlight

I.Introduction:

-Twitter có lẽ là một mạng xã hội rất quen thuộc với chung ta.

-Trong bài này mình xin chia sẻ cách Search trên Twitter và lấy kết quả về ứng dụng.

II.Creating Project And Coding:

– Mở Visual Studio lên và tạo Silverlight Application Project:

image

-Tiếp theo chúng ta làm một giao diện đơn giản như doạn Code sau:

   1: <UserControl x:Class="TwitterSearch.MainPage"

   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   4:     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

   5:     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

   6:     mc:Ignorable="d"

   7:     d:DesignHeight="600" d:DesignWidth="800">

   8:     

   9:     <Grid x:Name="LayoutRoot" Background="White">

  10:         <Grid.RowDefinitions>

  11:             <RowDefinition Height="100"/>

  12:             <RowDefinition Height="50"/>

  13:             <RowDefinition Height="*"/>

  14:         </Grid.RowDefinitions>

  15:         <TextBlock Text="Twitter Search" FontSize="48" Grid.Row="0"/>

  16:         <StackPanel Grid.Row="1">

  17:             <StackPanel.Background>

  18:                 <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">

  19:                     <GradientStop Color="Black" Offset="0" />

  20:                     <GradientStop Color="White" Offset="1" />

  21:                 </LinearGradientBrush>

  22:             </StackPanel.Background>

  23:         </StackPanel>

  24:         <Grid Grid.Row="2" Margin="1">

  25:             <Grid.ColumnDefinitions>

  26:                 <ColumnDefinition Width="12*" />

  27:                 <ColumnDefinition Width="641*" />

  28:                 <ColumnDefinition Width="133*" />

  29:                 <ColumnDefinition Width="12*" />

  30:             </Grid.ColumnDefinitions>

  31:             <Grid.RowDefinitions>

  32:                 <RowDefinition Height="18*" />

  33:                 <RowDefinition Height="43*" />

  34:                 <RowDefinition Height="27*" />

  35:                 <RowDefinition Height="342*" />

  36:                 <RowDefinition Height="18*" />

  37:             </Grid.RowDefinitions>

  38:             <Grid.Background>

  39:                 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

  40:                     <GradientStop Color="#FF4343D1" Offset="0" />

  41:                     <GradientStop Color="White" Offset="1" />

  42:                 </LinearGradientBrush>

  43:             </Grid.Background>

  44:             <Button Click="btn_GetTwitter_Click" Content="Get Twitter" Name="btn_GetTwitter" FontSize="14" Grid.Row="1" Grid.Column="2" Margin="0,4,0,0" />

  45:             <TextBlock Text="Result: "  Margin="2,6,74,0" Grid.Row="2" Grid.Column="1" />

  46:             <ListBox Name="lbx_Result" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2">

  47:                 <ListBox.ItemTemplate>

  48:                     <DataTemplate>

  49:                         <Grid>

  50:                             <Grid.ColumnDefinitions>

  51:                                 <ColumnDefinition Width="Auto"/>

  52:                                 <ColumnDefinition Width="*"/>

  53:                             </Grid.ColumnDefinitions>

  54:                             <Image Source="{Binding Image}" Grid.Column="0"/>

  55:                             <TextBlock Text="{Binding Message}" Grid.Column="1"/>

  56:                         </Grid>

  57:                     </DataTemplate>

  58:                 </ListBox.ItemTemplate>

  59:             </ListBox>

  60:             <TextBox Grid.Column="1" Grid.Row="1" Margin="2,4,6,0" Name="txt_Query" />

  61:         </Grid>

  62:     </Grid>

  63: </UserControl>

image

Bây giờ chúng ta tạo một Lớp đơn giản, để chứa hình avata và kết quả trả về:

   1: public class Tweet

   2: {

   3:     public string Message { get; set; }

   4:     public Uri Image { get; set; }

   5: }

Quay lại xử lý cho trang MainPage(Mainpage.xaml.cs):

   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Net;

   5: using System.Windows;

   6: using System.Windows.Controls;

   7: using System.Windows.Documents;

   8: using System.Windows.Input;

   9: using System.Windows.Media;

  10: using System.Windows.Media.Animation;

  11: using System.Windows.Shapes;

  12: using System.Collections.ObjectModel;

  13: using System.Xml.Linq;

  14:  

  15: namespace TwitterSearch

  16: {

  17:     public partial class MainPage : UserControl

  18:     {

  19:         private ObservableCollection<Tweet> _Tweet = new ObservableCollection<Tweet>();

  20:         public MainPage()

  21:         {

  22:             InitializeComponent();

  23:         }

  24:  

  25:         private void btn_GetTwitter_Click(object sender, RoutedEventArgs e)

  26:         {

  27:             WebClient Service = new WebClient();

  28:             if (txt_Query.Text == "")

  29:             {

  30:                 MessageBox.Show("Bạn vẫn chưa nhập Tweet");

  31:                 txt_Query.Focus();

  32:             }

  33:             else

  34:             {

  35:                 

  36:                     Service.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Service_DownloadStringCompleted);

  37:                     string url = "http://search.twitter.com/search.atom?q=" + txt_Query.Text;

  38:                     //Service.DownloadStringAsync(new Uri("http://search.twitter.com/search.atom?q=silverlight"));

  39:                     Service.DownloadStringAsync(new Uri(url));

  40:                     lbx_Result.ItemsSource = _Tweet;

  41:             }

  42:         }

  43:  

  44:         void Service_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

  45:         {

  46:             XDocument doc = XDocument.Parse(e.Result);

  47:             XNamespace ns = "http://www.w3.org/2005/Atom";

  48:             var items = from item in doc.Descendants(ns+"entry")

  49:                         select new Tweet()

  50:                         {

  51:                             Message = item.Element(ns+"title").Value,

  52:                             Image = new Uri((from XElement i in item.Descendants(ns+"link")

  53:                                              where i.Attribute("type").Value == "image/jpg" || 

  54:                                              i.Attribute("type").Value == "image/png" || 

  55:                                              i.Attribute("type").Value == "image/gif"

  56:                                             select i.Attribute("href").Value

  57:                                             ).First<String>())

  58:                         };

  59:             foreach (Tweet t in items)

  60:             {

  61:                 _Tweet.Add(t);

  62:             }

  63:         }

  64:     }

  65: }

Chạy ứng dụng và xem kết quả :

image

Leave a comment