News container
Inheritance: CrossDomainObject
 /// <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;
        }