Adding a Twitter Feed to Your Website

Be warned, this blog post has not aged well. It may contain information that is outdated or no longer relevant.

A twitter feed is a great way to breath a little life into an otherwise static website. Check out the bottom right corner of my portfolio site as an example.

Update: Twitter upgraded their API to version 1.1. The code in this post no longer works, but you can reference the Twitter feed module that I wrote for SuperFeed to see how to use the new API. Also, I no longer have a twitter feed on my portfolio site.

The Code

So let’s get right to it. With C#, a little LINQ, and the excellent twitter API, something like this is relatively easy to do. Here’s the code (more or less) that I use on my website:

using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

public class TweetLoader
{
    const string ATOM_NAMESPACE = "http://www.w3.org/2005/Atom";
    const string SCREEN_NAME = "lonekorean"; // TODO: your twitter name goes here
    const int NUM_TWEETS = 5;
    const int MAX_ATTEMPTS = 3;
    
    public static List<string> LoadTweets()
    {
        XNamespace xmlns = ATOM_NAMESPACE;
        XDocument doc = null;

        // defensively attempt to get XML document
        int attempts = 0;
        while (attempts < MAX_ATTEMPTS &&
            (doc == null || doc.ToString().Length == 0))
        {
            attempts++;
            string url = string.Format(
                "http://api.twitter.com/1/statuses/user_timeline.atom" +
                "?screen_name={0}&count={1}", SCREEN_NAME, NUM_TWEETS);
            try
            {
                doc = XDocument.Load(url);
            }
            catch
            {
                // pause half a second before retrying
                System.Threading.Thread.Sleep(500);
            }
        }

        List<string> tweets = new List<string>(NUM_TWEETS);
        if (doc != null && doc.ToString().Length > 0)
        {
            // use linq to translate XML document into a list of strings
            tweets = (
                from item in doc.Descendants(xmlns + "entry")
                select item.Element(xmlns + "title").Value
                    .Replace(SCREEN_NAME + ": ", "")
            ).ToList<string>();
        }

        return tweets;
    }
}

The Walkthrough

First things first, you’ll want to change the screen name on line 8, and maybe the values on line 9 and 10 to your liking.

Line 19 sets up a while loop with a defensive try/catch block inside to retry the API request, just because the internet isn’t perfect and you never know when a request will fail. If the max number of attempts is reached without success, the final output will be null, so make sure your code can handle that.

Lines 23-25 are where the magic is. Feel free to test that URL directly in your browser. For more options, refer to the documentation.

Lines 41-45 use LINQ to pull out the actual strings that we want and package them into a tidy list. Oddly enough, every one of these strings is prepended with “lonekorean: ” (or your screen name, obviously), so line 44 takes that out for us.

And that’s it. The one thing I got stuck on while coding this was the namespacing for Atom. Notice how I apply it on lines 42 and 43 with “xmlns +“. Just don’t forget that part and you’re golden.

Hey, you reached the end!

Feel free to check out my other blog posts or subscribe to my RSS feed. You can also click a tag below to see related blog posts.