Search Twitter from C# using LINQ to XML

In some applications, it could be cool to have a feature that enabled the user to quickly get a glimpse of what people are saying on Twitter about the user or their product, service, company etc.

For instance, a service like has a feature just like that. They call it Overheard, and this is what it looks like:


There’s nothing like Twitter to give you feedback. I think MediaTemple felt the effect of unhappy customers on Twitter when their servers broke down, and stayed there for more than two days!

Anyway. I wanted to search from C#, and get back a DataTable. Here’s how it’s done:


/// Searches Twitter for the specified query./// /// The query./// Returns the search results as a DataTablepublic DataTable Search(string query) { DataTable dt = new DataTable(); dt.Columns.Add("text"); dt.Columns.Add("html"); dt.Columns.Add("pubdate"); dt.Columns.Add("id"); dt.Columns.Add("link"); dt.Columns.Add("authorname"); dt.Columns.Add("authorlink"); XDocument tweetResults = XDocument.Load(String.Format(

"{0}", HttpUtility.UrlEncode(query)));

XNamespace atomNS = ""; var q = from tweet in tweetResults.Descendants(atomNS + "entry") select new { Text = (string)tweet.Element(atomNS + "title"), Html = (string)tweet.Element(atomNS + "content"), DatePublished = DateTime.Parse((string)tweet.Element(atomNS + "published")), Id = (string)tweet.Element(atomNS + "id"), Link = (string)tweet.Elements(atomNS + "link") .Where(link => (string)link.Attribute("rel") == "alternate") .Select(link => (string)link.Attribute("href")) .First(), Author = (from author in tweet.Descendants(atomNS + "author") select new { Name = (string)author.Element(atomNS + "name"), Uri = (string)author.Element(atomNS + "uri"), }).First() }; foreach (var item in q) { dt.Rows.Add(item.Text, item.Html, item.DatePublished, item.Id, item.Link,

item.Author.Name, item.Author.Uri); } return dt; }

Martin H. Normark

Product and UX Hacker. Web and iOS developer.

Subscribe to Martin Normark's Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!