/// <summary> /// Initializes a new <see cref="NewsItem"/> based on another /// </summary> /// <param name="item">Source <see cref="NewsItem"/></param> public NewsItem(NewsItem item) { this.Mode = item.Mode; this.Subject = item.Subject; this.Date = item.Date; this.Content = item.Content; this.Url = item.Url; }
public override List<NewsItem> GetNews() { LogManager.Info("Getting JoyMax news..."); HtmlDocument doc = new HtmlDocument(); List<NewsItem> news = new List<NewsItem>(); HtmlNodeCollection newsNode = null; int tryCount = 5; while (newsNode == null && tryCount > 0) { string html = WebClientEx.DownloadContent(LogManager, "http://dmo.gameking.com/Main/Main.aspx", 5000); doc.LoadHtml(html); newsNode = doc.DocumentNode.SelectNodes("//div[@class='news-list']/ul/li"); tryCount--; } if (newsNode == null) { return null; } HtmlNode newsWrap = newsNode[0]; HtmlNodeCollection newsList = doc.DocumentNode.SelectNodes("//div[@class='news-list']/ul/li"); NewsItem item; if (newsList != null) { for (int i = 0; i <= newsList.Count - 1; i++) { item = new NewsItem(); item.Mode = newsWrap.SelectNodes("//div[@class='lead']/span[contains(@class, 'mode')]")[i].InnerText; item.Subject = System.Web.HttpUtility.HtmlDecode(newsWrap.SelectNodes("//div[@class='lead']/span[@class='subj']")[i].InnerText); item.Date = newsWrap.SelectNodes("//div[@class='lead']/span[@class='date']")[i].InnerText; Regex r = new Regex(STR_DATE_FORMAT_REGEX, RegexOptions.IgnoreCase | RegexOptions.Singleline); Match m = r.Match(item.Date); if (m.Success) { item.Date = m.Groups[1].ToString() + "-" + m.Groups[3].ToString() + "-20" + m.Groups[5].ToString(); } else { item.Date = null; } foreach (HtmlAttribute atr in newsWrap.SelectNodes("//div[@class='view']/div[@class='btn-right']/span[@class='read-more']/a")[i].Attributes) { if (atr.Name == "href") { item.Url = string.Format(STR_URL_NEW_PAGE, atr.Value); break; } } item.Content = System.Web.HttpUtility.HtmlDecode(newsWrap.SelectNodes("//div[@class='view']/div[@class='memo']")[i].InnerText); item.Content = item.Content.Trim().Replace("\r\n\r\n", "\r\n").Replace("\t", ""); news.Add(item); } } if (news.Count == 0) { return null; } return news; }