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:
-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>
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ả :