In this article, I will cover and explain the following three topics.
- How to use twitter search and get search result on page using RIA concept.
- Use of TextBox watermark
- How to change out of browser settings.
Getting Started: Creating Silverlight Project.
- Open Visual Studio 2010.
- Go to File => New => Project
- Select Silverlight in installed templates
- Select Silverlight Application
- Enter the Name and choose the location.
- Click OK
First of all add a new class using Add New Item option on the right click on the project name in Solution Explorer and rename that class as following.
public class SearchedTweets
{
public string Title { get; set; }public Uri Image { get; set; }
public Uri Link { get; set; }
}
Now change your MainPage.xaml as following by adding a ListBox and other controls. I also have two Button controls - Get Tweets and Export to Excel. The Get Tweets buttons gets the tweets for the give twitter handle in the TextBox.
xmlns:local="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls.WatermarkedTextBox"
<Grid
x:Name="LayoutRoot"
Background="White">
<ListBox
Margin="8,41,8,8"
HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
x:Name="lstTweets">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="Auto"
/>
<ColumnDefinition
Width="*"
/>
</Grid.ColumnDefinitions>
<Image
Source="{Binding
Image}"
Grid.Column="0"
Margin="3"
Width="50"
Height="50"
Stretch="UniformToFill"
/>
<TextBlock
Text="{Binding
Title}"
FontSize="14"
Margin="3"
Grid.Column="1"
TextWrapping="Wrap"
/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<Button x:Name="btnGetTweets" Width="80" Content="Get Tweets" VerticalAlignment="Top" Margin="147,9,169,0" Click="btnGetTweets_Click"/> <Button x:Name="btnExport" Content="Export Tweets in Excel" HorizontalAlignment="Right" VerticalAlignment="Top" Width="155" Margin="0,8,10,0" Click="btnExport_Click" d:LayoutOverrides="HorizontalAlignment"/>
<local:WatermarkedTextBox Name="txtSearchText" Watermark="Enter search name..." Height="22" Margin="10,9,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="134"/>
</Grid>
Now let's update the code behind. The MainPage.xaml.cs file looks like following. As you can see from this code, the Get Tweets method makes a call to the Twitter search, get results using LINQ and adds search results to the ListBox control including images and tweet text. The Export to Excel button simply creates an Excel sheet and export data from the ListBox to an Excel file.
Note: You must add reference to the Excel Interop library to use the Excel objects.
using System.Collections.ObjectModel;
using System.Xml.Linq;using System.Runtime.InteropServices.Automation;
ObservableCollection<SearchedTweets>
objSearchedTweets = new
ObservableCollection<SearchedTweets>();
public MainPage()
{
InitializeComponent();
Loaded += new
RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
lstTweets.ItemsSource = objSearchedTweets;
// btnExport.IsEnabled = AutomationFactory.IsAvailable;
}
private void
btnGetTweets_Click(object sender, System.Windows.RoutedEventArgs
e)
{
// TODO: Add event handler
implementation here.
if (!string.IsNullOrEmpty(txtSearchText.Text))
{
objSearchedTweets.Clear();
// lstTweets.ItemsSource =
null;
WebClient objWebClient =
new WebClient();
objWebClient.DownloadStringCompleted += (s, ra) =>
{
XDocument doc =
XDocument.Parse(ra.Result);
XNamespace ns =
"http://www.w3.org/2005/Atom";
var items =
from item in
doc.Descendants(ns + "entry")
select
new SearchedTweets()
{
Title = item.Element(ns +
"title").Value,
Image = new
Uri((from
XElement xe in
item.Descendants(ns + "link")
where xe.Attribute("type").Value ==
"image/png"
select xe.Attribute("href").Value).First<string>()),
Link = new
Uri((from
XElement xe in
item.Descendants(ns + "link")
where
xe.Attribute("type").Value ==
"text/html"
select xe.Attribute("href").Value).First<string>())
};
foreach (SearchedTweets
t in items)
{
objSearchedTweets.Add(t);
}
};
objWebClient.DownloadStringAsync(new
Uri("http://search.twitter.com/search.atom?q="
+ txtSearchText.Text));
}
else
{
MessageBox.Show("Type
search text");
}
}
private void btnExport_Click(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler
implementation here.
if (objSearchedTweets.Count == 0)
{
MessageBox.Show("No
tweets to export. Please get latest tweets first.");
return;
}
try
{
dynamic excel =
AutomationFactory.CreateObject("Excel.Application");
excel.workbooks.Add();
dynamic sheet = excel.ActiveSheet;
int row = 1;
// headers
dynamic linkHeaderCell = sheet.Cells[row, 1];
dynamic textHeaderCell = sheet.Cells[row, 2];
linkHeaderCell.Value = "Url";
textHeaderCell.Value = "Message Text";
// rows
foreach (SearchedTweets
t in objSearchedTweets)
{
dynamic linkCell = sheet.Cells[row, 1];
dynamic textCell = sheet.Cells[row, 2];
linkCell.Value = t.Link.ToString();
textCell.Value = t.Title;
}
excel.Visible = true;
}
catch (Exception
ex)
{
MessageBox.Show("Error
automating Excel: " + ex.Message);
}
When you run the application, UI looks like the following Image 1 where you can see there is a Get Tweets button, As you can see from the above code, I make a call to the Twitter search service using the following line of code:
"http://search.twitter.com/search.atom?q=" + txtSearchText.Text
Click on the Get Tweets buttons gets the tweets and displays in the ListBox including the account image and URL.

Image 1.

Image 2.
Now when you click on Export button you will get this error message.

Image 3.
To remove this error message you need to right click on Properties and click Open and check this check box.

Image 4.
After that click on Out-of-Browser Settings button and check these check boxes.

Image 5.
Save the changes and click on Export button now. The output Excel document looks like Figure 6.

Image 6.
Summary
In this article, we saw how to create a Silverlight application that uses Twitter search to get tweets and display in a formatted way. We also saw how to export tweets in an Excel document.

Mahesh ChandPosted Nov 24, 2011, 12:48 PM
Good article. It will be nice to have an article on how to implement same Twitter search in HTML 5.