public RSSShreder(string rssfeedUrl, int timeOffSet) { XmlDocument doc = new XmlDocument(); doc.Load(rssfeedUrl); XmlNodeList nodes = doc.SelectNodes(@"//item"); foreach(XmlNode node in nodes) { XmlDocument reader = new XmlDocument(); FeedDeffinition feed = new FeedDeffinition(); reader.LoadXml("<root>" + node.InnerXml + "</root>"); feed.Title = reader.SelectSingleNode("//title").InnerText; feed.Link = reader.SelectSingleNode("//link").InnerText; var yearReg = "(20[0-9][0-9]|20[0-9][0-9])"; //< Allows a number between 2014 and 2029 var monthReg = "(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"; //< Allows a number between 00 and 12 var dayReg = "([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])"; //< Allows a number between 00 and 31 var hourReg = "([0-1][0-9]|2[0-4])"; //< Allows a number between 00 and 24 var minReg = "([0-5][0-9])"; //< Allows a number between 00 and 59 var reg = new Regex(dayReg+"\\s"+monthReg+ "\\s" + yearReg+ "\\s" + hourReg + ':' +minReg + ':'+minReg); string date = reader.SelectSingleNode("//pubDate").InnerText; string output = reg.Match(date).ToString(); DateTime time = new DateTime(); try { time = DateTime.Parse(output); } catch { reg = new Regex(dayReg + "\\s" + monthReg + "\\s" + yearReg); output = reg.Match(date).ToString(); time = DateTime.Parse(output); } time=time.Add(new TimeSpan(timeOffSet, 0,0)); feed.PubDate = time; string descriptionText = reader.SelectSingleNode("//description").InnerText; if (descriptionText.Contains("img src=")) { descriptionText = descriptionText.Replace("<", "<"); descriptionText = descriptionText.Replace(">", ">"); feed.Image = "<img style=\"min-width: 200px; max-width: 500px; height: auto;\"" + descriptionText.Split(new string[] { "<img" }, StringSplitOptions.None)[1].Split(new string[] { ">" }, StringSplitOptions.None)[0]+">"; bool remove = false; for(int i =0;i< descriptionText.Length;i++) { if(descriptionText[i]=='<'&& descriptionText[i+1] == 'i'&& descriptionText[i+2] == 'm' && descriptionText[i+3] == 'g') { remove = true; descriptionText = descriptionText.Remove(i, 1); while(remove) { if (descriptionText[i] == '>') remove = false; descriptionText = descriptionText.Remove(i, 1); } } } } feed.Description = descriptionText; items.Add(feed); } }
public RSSShreder(string rssfeedUrl, int timeOffSet) { XmlDocument doc = new XmlDocument(); doc.Load(rssfeedUrl); XmlNodeList nodes = doc.SelectNodes(@"//item"); foreach (XmlNode node in nodes) { XmlDocument reader = new XmlDocument(); FeedDeffinition feed = new FeedDeffinition(); reader.LoadXml("<root>" + node.InnerXml + "</root>"); feed.Title = reader.SelectSingleNode("//title").InnerText; feed.Link = reader.SelectSingleNode("//link").InnerText; var yearReg = "(20[0-9][0-9]|20[0-9][0-9])"; //< Allows a number between 2014 and 2029 var monthReg = "(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"; //< Allows a number between 00 and 12 var dayReg = "([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])"; //< Allows a number between 00 and 31 var hourReg = "([0-1][0-9]|2[0-4])"; //< Allows a number between 00 and 24 var minReg = "([0-5][0-9])"; //< Allows a number between 00 and 59 var reg = new Regex(dayReg + "\\s" + monthReg + "\\s" + yearReg + "\\s" + hourReg + ':' + minReg + ':' + minReg); string date = reader.SelectSingleNode("//pubDate").InnerText; string output = reg.Match(date).ToString(); DateTime time = new DateTime(); try { time = DateTime.Parse(output); } catch { reg = new Regex(dayReg + "\\s" + monthReg + "\\s" + yearReg); output = reg.Match(date).ToString(); time = DateTime.Parse(output); } time = time.Add(new TimeSpan(timeOffSet, 0, 0)); feed.PubDate = time; string descriptionText = reader.SelectSingleNode("//description").InnerText; if (descriptionText.Contains("img src=")) { descriptionText = descriptionText.Replace("<", "<"); descriptionText = descriptionText.Replace(">", ">"); feed.Image = "<img style=\"min-width: 200px; max-width: 500px; height: auto;\"" + descriptionText.Split(new string[] { "<img" }, StringSplitOptions.None)[1].Split(new string[] { ">" }, StringSplitOptions.None)[0] + ">"; bool remove = false; for (int i = 0; i < descriptionText.Length; i++) { if (descriptionText[i] == '<' && descriptionText[i + 1] == 'i' && descriptionText[i + 2] == 'm' && descriptionText[i + 3] == 'g') { remove = true; descriptionText = descriptionText.Remove(i, 1); while (remove) { if (descriptionText[i] == '>') { remove = false; } descriptionText = descriptionText.Remove(i, 1); } } } } feed.Description = descriptionText; items.Add(feed); } }