using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Xml; namespace MockSubSonic { public class Technorati { private static ITechnoratiAccessor dataStore = new TechnoratiAccessor(); public static ITechnoratiAccessor TechnoratiAPI { get { return dataStore; } set { dataStore = value; } } public static List GetTagListFromPost(string post) { List tags = new List(); tags.AddRange(GetTagList(GetMatches(post))); return tags; } public static MatchCollection GetMatches(string post) { Regex r = new Regex("(.+?)", RegexOptions.IgnoreCase); MatchCollection collection = r.Matches(post); return collection; } public static List GetTagList(MatchCollection collection) { List list = new List(collection.Count); foreach (Match match in collection) { list.Add(match.Groups[1].Value); } return list; } public static string GetUrl(string technoratiTerm) { string technoratiAPI = "REMOVED"; int limit = 10; string url = string.Format("http://api.technorati.com/tag?key={0}&tag={1}&limit={2}", technoratiAPI, technoratiTerm, limit); return url; } public static XmlNodeList GetXmlNodeList(string technoratiUrl) { return TechnoratiAPI.GetXmlNodeList(technoratiUrl); } public static Blog CreateBlogPost(XmlNode post) { Blog blog = new Blog(); blog.Title = post["title"].InnerText; blog.Description = post["excerpt"].InnerText; blog.Created = Convert.ToDateTime(post["created"].InnerText); blog.Url = post["permalink"].InnerText; return blog; } public static List CreateBlogPostList(XmlNodeList xmlNodes) { List blogs = new List(xmlNodes.Count); foreach (XmlNode node in xmlNodes) { blogs.Add(CreateBlogPost(node)); } return blogs; } public static List CreateBlogPostList(List terms) { List blogs = new List(); foreach (string s in terms) { XmlNodeList nodes = GetXmlNodeList(GetUrl(s)); blogs.AddRange(CreateBlogPostList(nodes)); } return blogs; } } public class Blog { #region Properties private string title; public string Title { get { return title; } set { title = value; } } private string desc; public string Description { get { return desc; } set { desc = value; } } private DateTime created; public DateTime Created { get { return created; } set { created = value; } } private string link; public string Url { get { return link; } set { link = value; } } #endregion } public interface ITechnoratiAccessor { XmlNodeList GetXmlNodeList(string technoratiUrl); } public class TechnoratiAccessor : ITechnoratiAccessor { public XmlNodeList GetXmlNodeList(string technoratiUrl) { XmlDocument xmlResultsSet = new XmlDocument(); xmlResultsSet.Load(new XmlTextReader(technoratiUrl)); XmlNodeList xmlResponse = xmlResultsSet.SelectNodes("/tapi/document/item"); return xmlResponse; } } }