Beispiel #1
0
        protected IList <RssNewsItem> GetNewsItems()
        {
            List <RssNewsItem> newsItems;
            CacheWrapper       cacheWrapper = Cache["AbleRssNews"] as CacheWrapper;

            if (cacheWrapper == null)
            {
                XmlDocument AbleRssXml = new XmlDocument();
                try
                {
                    AbleRssXml.Load("http://www.ablecommerce.com/rss/acgold.xml");
                }
                catch
                {
                    AbleRssXml.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><rss></rss>");
                }
                newsItems = new List <RssNewsItem>();
                XmlNodeList nodes      = AbleRssXml.SelectNodes("rss/channel/item");
                int         itemsCount = 0;
                foreach (XmlNode node in nodes)
                {
                    XmlElement  ele      = (XmlElement)node;
                    RssNewsItem newsItem = new RssNewsItem();
                    newsItem.PubDate     = AlwaysConvert.ToDateTime(XmlUtility.GetElementValue(ele, "pubDate"), DateTime.UtcNow);
                    newsItem.Link        = XmlUtility.GetElementValue(ele, "link");
                    newsItem.Title       = XmlUtility.GetElementValue(ele, "title");
                    newsItem.Description = XmlUtility.GetElementValue(ele, "description");
                    newsItems.Add(newsItem);

                    if (++itemsCount > 2)
                    {
                        break;
                    }
                }
                cacheWrapper = new CacheWrapper(newsItems);
                Cache.Remove("AbleRssNews");
                Cache.Add("AbleRssNews", cacheWrapper, null, DateTime.UtcNow.AddDays(1), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
            }
            else
            {
                newsItems = cacheWrapper.CacheValue as List <RssNewsItem>;
            }
            return(newsItems);
        }
Beispiel #2
0
        /// <summary>
        /// Helper. node.ChildNodes[0].InnerText + ">>" + node.Attributes["href"].Value + "; " + Environment.NewLine;
        /// </summary>
        /// <param name="node"></param>
        /// <param name="fetchDate"></param>
        /// <returns></returns>
        RssNewsItem CreateNewsItem(HtmlNode node, bool fetchDateAndDetails)
        {
            RssNewsItem item = new RssNewsItem(this);

            item.Author   = "Bloomberg";
            item.Comments = "";

            if (node.ParentNode.Name == "p" && node.ParentNode.ChildNodes[2].Name == "#text")
            {// Description available in parent.
                item.Description = GeneralHelper.RepairHTMLString(node.ParentNode.ChildNodes[2].InnerText);
                item.Description = item.Description.Replace("\n", " ");
            }
            else
            {
                item.Description = "";
            }

            item.Link  = new Uri(BaseAddress + node.Attributes["href"].Value);
            item.Title = node.ChildNodes[0].InnerText;

            if (fetchDateAndDetails)
            {
                HtmlDocument document = GenerateDocument(item.Link.AbsoluteUri);
                if (document == null)
                {
                    return(null);
                }

                HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//i");

                foreach (HtmlNode iNode in nodes)
                {
                    string   dateTimeInfo = iNode.ChildNodes[0].InnerText;
                    DateTime time         = GeneralHelper.ParseDateTimeWithZone(dateTimeInfo.Replace("Last Updated:", ""));
                    item.DateTime = time;
                }
            }

            return(item);
        }
Beispiel #3
0
        /// <summary>
        /// Result is new items found on page.
        /// </summary>
        /// <param name="uri"></param>
        List <RssNewsItem> ProcessPage(string uri, int channelId)
        {
            List <RssNewsItem> result = new List <RssNewsItem>();

            HtmlDocument document = GenerateDocument(uri);

            if (document == null)
            {
                return(result);
            }

            foreach (HtmlNode node in document.DocumentNode.SelectNodes("//a[@class]"))
            {
                if (node.ParentNode.Name == "p" &&
                    node.ParentNode.Attributes["class"] != null &&
                    node.ParentNode.Attributes["class"].Value == "summ")
                {
                    string itemTitle = node.ChildNodes[0].InnerText;

                    lock (this)
                    {
                        if (_latestNewsItemsTitles.ContainsKey(itemTitle))
                        {// News already listed.
                            continue;
                        }

                        RssNewsItem item = CreateNewsItem(node, true);
                        if (item != null)
                        {
                            _latestNewsItemsTitles.Add(itemTitle, item);
                            item.ChannelId = channelId;
                            result.Add(item);
                        }
                    }
                }
            }

            return(result);
        }