private void buttonNewRSS_Click(object sender, EventArgs e) { var rssCategory = listBoxCategory.SelectedItem as RssCategory; if (rssCategory == null) { return; } var rssWebsite = new RssWebsite(); var subgroupForm = new RSSForm { RssWebsite = rssWebsite }; if (subgroupForm.ShowDialog(this) == DialogResult.OK) { rssCategory.RssWebsites.Add(rssWebsite); } }
/// <summary> /// Parse XML content from RSS feed /// </summary> /// <param name="html"></param> /// <param name="rssCategory"></param> /// <param name="rssWebsite"></param> private void ParseRss(string html, RssCategory rssCategory, RssWebsite rssWebsite) { var doc = new XmlDocument(); doc.LoadXml(html); var nodes = doc.SelectNodes("//item"); if (nodes == null) { return; } for (var i = nodes.Count - 1; i >= 0; i--) //get them in inverse order ( old items first { var rssItem = new RssItem { Category = rssCategory, Website = rssWebsite }; var xmlNode = nodes[i].SelectSingleNode("title"); if (xmlNode == null) { continue; } rssItem.Title = Utilities.CleanString(xmlNode.InnerText).Trim(); xmlNode = nodes[i].SelectSingleNode("link"); if (xmlNode == null) { continue; } rssItem.Link = xmlNode.InnerText; xmlNode = nodes[i].SelectSingleNode("description"); if (xmlNode == null) { continue; } rssItem.Description = Utilities.CleanString(xmlNode.InnerText).Trim(); xmlNode = nodes[i].SelectSingleNode("pubDate"); if (xmlNode != null) { var text = xmlNode.InnerText; if (Regex.IsMatch(text, "\\s[a-zA-Z]{3}$", RegexOptions.Multiline)) { text = text.Substring(0, text.Length - 4); } DateTime tempDateTime; if (DateTime.TryParse(text, new CultureInfo("en-US", false), DateTimeStyles.None, out tempDateTime)) { rssItem.PubDate = tempDateTime; } } xmlNode = nodes[i].SelectSingleNode("author"); if (xmlNode != null) { rssItem.Author = Utilities.CleanString(xmlNode.InnerText).Trim(); } xmlNode = nodes[i].SelectSingleNode("guid"); if (xmlNode != null) { rssItem.Guid = xmlNode.InnerText; } Logger.Info($"Retrieved RSS item \"{rssItem.Title}\" pub date {rssItem.PubDate} link {rssItem.Link}"); if (rssItem.PubDate > rssWebsite.LastUpdate) { Logger.Info($"Published RSS item \"{rssItem.Title}\" pub date {rssItem.PubDate} link {rssItem.Link}"); rssWebsite.LastUpdate = rssItem.PubDate; OnNewRss(rssItem); } } rssWebsite.FirstUpdate = false; }