/// <summary> /// Helper. node.ChildNodes[0].InnerText + ">>" + node.Attributes["href"].Value + "; " + Environment.NewLine; /// </summary> /// <param name="node"></param> /// <param name="fetchDate"></param> /// <returns></returns> RssNewsEvent CreateNewsItem(HtmlNode node, bool fetchDateAndDetails) { RssNewsEvent item = new RssNewsEvent(); item.Author = "Bloomberg"; item.Comments = string.Empty; 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).ToString(); item.Title = node.ChildNodes[0].InnerText.Trim(); if (fetchDateAndDetails) { HtmlDocument document = GenerateDocument(item.LinkUri.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); }
/// <summary> /// Result is new items found on page. /// Page corresponds to a channel. /// </summary> /// <param name="uri"></param> List <EventBase> ProcessPage(EventSourceChannel channel) { List <EventBase> result = new List <EventBase>(); HtmlDocument document = GenerateDocument(channel.Address); 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; } RssNewsEvent item = CreateNewsItem(node, true); if (item != null) { _latestNewsItemsTitles.Add(itemTitle, item); item.Initialize(channel); result.Add(item); } } } } return(result); }