Code below consists of three classes that will get twitts for you. There is also caching so remember that new messages will be fetched only every UPDATE_EVERY_MINUTES minutes.
Single message:
public class TwitterCacheItem
{
public string Title {get;set;}
public string Link {get;set;}
public string Description {get;set;}
}
All of them:
public class TwitterCacheChannel : TwitterCacheItem
{
public TwitterCacheChannel()
{
Items = new List();
Loaded = false;
}
public DateTime NextUpdateTime { get; set; }
public bool Loaded { get; set; }
public List Items { get; private set; }
}
And finally the code:
public class TwitterCache
{
private const int UPDATE_EVERY_MINUTES = 60;
private static SortedList cache = new SortedList();
private static object cacheLock = new object();
public static TwitterCacheChannel GetTwitts(int id)
{
TwitterCacheChannel result = null;
lock (cacheLock)
{
if (cache.ContainsKey(id))
{
result = cache[id];
}
}
if ((result==null)||
(result.NextUpdateTime<DateTime.Now))
{
result = FetchTwitts(id);
}
return result;
}
private static string FetchTwittsUrl(int id)
{
return String.Format("http://twitter.com/statuses/user_timeline/{0}.rss", id);
}
private static TwitterCacheChannel FetchTwitts(int id)
{
TwitterCacheChannel result = new TwitterCacheChannel();
if (id > 0)
{
try
{
string url = FetchTwittsUrl(id);
string rssText = DownloadWebPage(url);
XmlDocument rss = new XmlDocument();
rss.LoadXml(rssText);
XmlElement channel = rss["rss"]["channel"];
result.Title = channel["title"].InnerText;
result.Link = channel["link"].InnerText;
result.Description = channel["description"].InnerText;
foreach (XmlElement node in channel.SelectNodes("item"))
{
TwitterCacheItem item = new TwitterCacheItem();
item.Title = node["title"].InnerText;
item.Link = node["link"].InnerText;
item.Description = node["description"].InnerText;
result.Items.Add(item);
}
result.Loaded = true;
}
catch
{
}
}
result.NextUpdateTime = DateTime.Now.AddMinutes(UPDATE_EVERY_MINUTES);
lock (cacheLock)
{
if (cache.ContainsKey(id))
{
cache[id] = result;
}
else
{
cache.Add(id, result);
}
}
return result;
}
private static string DownloadWebPage(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.UserAgent = ".NET Framework/2.0";
request.Referer = "http://www.example.com/";
WebResponse response = request.GetResponse();
Stream webStream = response.GetResponseStream();
StreamReader reader = new StreamReader(webStream);
string result = reader.ReadToEnd();
reader.Close();
webStream.Close();
response.Close();
return result;
}
}