using System.Data; using System.Xml; namespace AlexaDataLib { public static class AlexaData { public static DataSet GetSiteData(string domain) { // Create a DataSet, then DataTables for each group of data // then add the respective needed DataColumns to each DataSet ds = new DataSet(); DataTable dtRelated = new DataTable(); dtRelated.Columns.Add("HREF"); dtRelated.Columns.Add("TITLE"); DataTable dtSiteData = new DataTable(); dtSiteData.TableName = "SiteData"; dtSiteData.Columns.Add("TITLE"); dtSiteData.Columns.Add("STREET"); dtSiteData.Columns.Add("CITY"); dtSiteData.Columns.Add("STATE"); dtSiteData.Columns.Add("ZIP"); dtSiteData.Columns.Add("COUNTRY"); dtSiteData.Columns.Add("OWNER"); dtSiteData.Columns.Add("PHONE"); dtSiteData.Columns.Add("EMAIL"); dtSiteData.Columns.Add("CREATED"); dtSiteData.Columns.Add("LINKSIN"); dtSiteData.Columns.Add("SPEED"); dtSiteData.Columns.Add("POPULARITY"); dtSiteData.Columns.Add("REACH"); dtSiteData.Columns.Add("DESC"); DataTable dtDomains = new DataTable(); dtDomains.Columns.Add("DOMAIN"); dtDomains.TableName = "Domains"; // create the alexa request url string url = "http://alexa.com/xml/dad?url=" + domain; XmlDocument doc = new XmlDocument(); // load the xml document from the url doc.Load(url); XmlNodeList relatedNods = doc.SelectNodes("//RL"); DataRow relRow = null; string href = ""; string titl = ""; foreach (XmlNode nod in relatedNods) { relRow = dtRelated.NewRow(); href = nod.Attributes["HREF"].InnerText; titl = nod.Attributes["TITLE"].InnerText; relRow.ItemArray = new object[] {href, titl}; dtRelated.Rows.Add(relRow); } dtRelated.TableName = "RelatedSites"; ds.Tables.Add(dtRelated); XmlNodeList domainsNods = doc.SelectNodes("//DO"); DataRow doRow = null; string dom = ""; foreach (XmlNode nod in domainsNods) { doRow = dtDomains.NewRow(); dom = nod.Attributes["DOMAIN"].InnerText; doRow.ItemArray = new object[] {dom}; dtDomains.Rows.Add(doRow); } ds.Tables.Add(dtDomains); string title = doc.SelectSingleNode("//SITE").Attributes[1].InnerText; string street = doc.SelectSingleNode("//ADDR").Attributes[0].InnerText; string city = doc.SelectSingleNode("//ADDR").Attributes[1].InnerText; string state = doc.SelectSingleNode("//ADDR").Attributes[2].InnerText; string zip = doc.SelectSingleNode("//ADDR").Attributes[3].InnerText; string country = doc.SelectSingleNode("//ADDR").Attributes[4].InnerText; string owner = doc.SelectSingleNode("//OWNER").Attributes[0].InnerText; string phone = doc.SelectSingleNode("//PHONE").Attributes[0].InnerText; string email = doc.SelectSingleNode("//EMAIL").Attributes[0].InnerText; string created = doc.SelectSingleNode("//CREATED").Attributes[0].InnerText; string linksin = doc.SelectSingleNode("//LINKSIN").Attributes[0].InnerText; string speed = doc.SelectSingleNode("//SPEED").Attributes[0].InnerText; string popularity = doc.SelectSingleNode("//POPULARITY").Attributes[1].InnerText; string reach = doc.SelectSingleNode("//REACH").Attributes[0].InnerText; string desc = doc.SelectSingleNode("//SITE").Attributes[2].InnerText; DataRow row = dtSiteData.NewRow(); row.ItemArray = new object[] { title, street, city, state, zip, country, owner, phone, email, created, linksin, speed, popularity,reach, desc }; dtSiteData.Rows.Add(row); ds.Tables.Add(dtSiteData); return ds; } } }