コード例 #1
0
        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);
            }
        }
コード例 #2
0
        /// <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;
        }