/// <summary> /// 通过主站爬取错误期号列表中每一个期号 /// (百度乐彩) /// </summary> private void DoYesterdayFailedListByMainUrl() { if (!string.IsNullOrEmpty(Config.MainUrl) && FailedQiHaoList.Count > 0) { var OpenList = GetOpenListFromMainUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } OpenCode8DTModel matchItem = null; var SuccessList = new List <string>(); foreach (var failedQiHao in FailedQiHaoList) { matchItem = OpenList.Where(R => R.Term.ToString() == failedQiHao).FirstOrDefault(); if (matchItem != null && OptimizeMainModel(ref matchItem) && services.AddDTOpen8Code(currentLottery, matchItem)) { //Do Success Log log.Info(GetType(), CommonHelper.GetJobMainLogInfo(Config, failedQiHao)); if (matchItem.Term > LatestItem.Term) { LatestItem = matchItem; } isGetData = true; SuccessList.Add(failedQiHao); } } foreach (var successQiHao in SuccessList) { FailedQiHaoList.Remove(successQiHao); } } }
/// <summary> /// 作业执行入口 /// </summary> /// <param name="context">作业执行上下文</param> public void Execute(IJobExecutionContext context) { Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap); //预设节假日不开奖 if (Config.SkipDate.Contains(CommonHelper.SCCSysDateTime.ToString("yyyyMMdd"))) { return; } LatestItem = context.JobDetail.JobDataMap["LatestItem"] as OpenCode8DTModel; try { //服务启动时配置初始数据 if (LatestItem == null) { LatestItem = services.GetOpenCode8DTLastItem(currentLottery); if (LatestItem == null) { LatestItem = new OpenCode8DTModel { Term = CommonHelper.GenerateQiHaoYYYYQQQ(0), OpenTime = new DateTime(CommonHelper.SCCSysDateTime.Year, 1, 1) } } ; } //程序时间第二天,程序根据配置检查是否昨天有开奖 isGetData = false; if (CommonHelper.CheckDTIsNeedGetData(Config)) // { DoMainUrl(); DoBackUrl(); } if (!LatestItem.Term.ToString().StartsWith(CommonHelper.SCCSysDateTime.ToString("yy"))) { LatestItem = new OpenCode8DTModel { Term = CommonHelper.GenerateQiHaoYYYYQQQ(0), OpenTime = new DateTime(CommonHelper.SCCSysDateTime.Year, 1, 1) } } ; //当今日开奖并且当前时间是晚上8点过后开始抓取 if (CommonHelper.CheckTodayIsOpenDay(Config) && CommonHelper.SCCSysDateTime.Hour > 12) { DoMainUrl(); DoBackUrl(); } } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】抓取时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } //保存最新期号 context.JobDetail.JobDataMap["LatestItem"] = LatestItem; }
private void DoMainUrl() { if (!string.IsNullOrEmpty(Config.MainUrl)) { var openList = GetOpenListFromMainUrl(Config.MainUrl); if (openList.Count == 0) { return; //无抓取数据 } //抓取到的最新期数 var newestQiHao = Convert.ToInt32(openList.First().Term.ToString()); //数据库里面最新期数 var startQiNum = Convert.ToInt32(LatestItem.Term.ToString()); if (startQiNum > newestQiHao) { return; //无最新数据 } //处理最新开奖数据 var getQiHao = string.Empty; OpenCode8DTModel matchItem = null; for (var i = startQiNum; i <= newestQiHao; i++) { getQiHao = i.ToString(); matchItem = openList.FirstOrDefault(r => r.Term.ToString() == getQiHao); if (matchItem != null && services.AddDTOpen8Code(currentLottery, matchItem)) { //Do Success Log log.Info(GetType(), CommonHelper.GetJobMainLogInfo(Config, getQiHao)); LatestItem = matchItem; isGetData = true; } } } }
private void DoBackUrl() { if (!string.IsNullOrEmpty(Config.BackUrl)) { var OpenList = GetOpenListFromBackUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } var newestQiHao = OpenList.Max(w => w.Term).ToString(); var startQiNum = Convert.ToInt32(LatestItem.Term.ToString().Substring(4)) + 1; var newestQiNum = Convert.ToInt32(newestQiHao.Substring(4)); if (startQiNum > newestQiNum) { return; //无最新数据 } //处理最新开奖数据 var getQiHao = string.Empty; OpenCode8DTModel matchItem = null; for (var i = startQiNum; i <= newestQiNum; i++) { getQiHao = i.ToString(); matchItem = OpenList.Where(R => R.Term.ToString() == getQiHao).FirstOrDefault(); if (matchItem != null && services.AddDTOpen8Code(currentLottery, matchItem)) { //Do Success Log log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, getQiHao)); LatestItem = matchItem; isGetData = true; } } } }
/// <summary> /// 完善备站数据详情 /// </summary> /// <param name="model"></param> /// <param name="tr"></param> /// <returns></returns> private bool OptimizeBackModel(ref OpenCode8DTModel model, HtmlNode tr) { try { var entity = new KaijiangDetailsEntity(); entity.KaiJiangItems = new List <Kaijiangitem>(); var tds = tr.ChildNodes.Where(w => w.Name == "td").ToList(); var xiaoshoue = tds[2].InnerText.Trim().Replace(",", "").Replace("元", ""); var jiangchi = ""; var tedengjiang = new Kaijiangitem { Name = "特等奖", Total = tds[3].InnerText.Trim(), TotalMoney = tds[4].InnerText }; entity.KaiJiangItems.Add(tedengjiang); var yidengjiang = new Kaijiangitem { Name = "一等奖", Total = tds[5].InnerText.Trim(), TotalMoney = tds[6].InnerText }; entity.KaiJiangItems.Add(yidengjiang); var erdengjiang = new Kaijiangitem { Name = "二等奖", Total = tds[7].InnerText.Trim(), TotalMoney = tds[8].InnerText }; entity.KaiJiangItems.Add(erdengjiang); entity.Gdje = jiangchi; entity.Trje = xiaoshoue; model.Spare = entity.TryToJson(); } catch (Exception ex) { log.Error(typeof(JSTC7WSJob), string.Format("【{0}】通过主站点优化开奖详情时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(false); }
/// <summary> /// 通过备用地址抓取错误期号列表中每一个期号 /// (新疆体彩网) /// </summary> private void DoYesterdayFailedListByBackUrl() { if (!string.IsNullOrEmpty(Config.BackUrl) && FailedQiHaoList.Count > 0) { var OpenList = GetOpenListFromBackUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } OpenCode8DTModel matchItem = null; KeyValuePair <string, string> termItem; var SuccessList = new List <string>(); foreach (var failedQiHao in FailedQiHaoList) { termItem = OpenList.Where(R => R.Key == failedQiHao).FirstOrDefault(); if (string.IsNullOrWhiteSpace(termItem.Key)) { continue; } matchItem = GetOpenModelFromBackUrl(termItem); if (matchItem != null && services.AddDTOpen8Code(currentLottery, matchItem)) { //Do Success Log log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, failedQiHao)); if (matchItem.Term > LatestItem.Term) { LatestItem = matchItem; } SuccessList.Add(failedQiHao); isGetData = true; } } foreach (var successQiHao in SuccessList) { FailedQiHaoList.Remove(successQiHao); } } }
/// <summary> /// 通过备用站点抓取开奖数据 /// (新疆体彩网) /// 仅仅抓取首页上的最新5条数据 /// </summary> private void DoTodayJobByBackUrl() { if (!string.IsNullOrEmpty(Config.BackUrl)) { var OpenList = GetOpenListFromBackUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } var newestQiHao = OpenList.First().Key; var startQiNum = Convert.ToInt32(LatestItem.Term.ToString().Substring(4)) + 1; var newestQiNum = Convert.ToInt32(newestQiHao.Substring(4)); if (startQiNum > newestQiNum) { return; //无最新数据 } //处理最新开奖数据 var getQiHao = string.Empty; OpenCode8DTModel matchItem = null; KeyValuePair <string, string> termItem; for (var i = startQiNum; i <= newestQiNum; i++) { getQiHao = LatestItem.Term.ToString().Substring(0, 4) + i.ToString().PadLeft(3, '0'); termItem = OpenList.Where(R => R.Key == getQiHao).FirstOrDefault(); if (string.IsNullOrWhiteSpace(termItem.Key)) { continue; } matchItem = GetOpenModelFromBackUrl(termItem); if (matchItem != null && services.AddDTOpen8Code(currentLottery, matchItem)) { //Do Success Log log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, getQiHao)); LatestItem = matchItem; isGetData = true; } } } }
private List <OpenCode8DTModel> GetOpenListFromMainUrl(string mainUrl) { var result = new List <OpenCode8DTModel>(); try { var url = new Uri(mainUrl); var htmlResource = NetHelper.GetUrlResponse(mainUrl, Encoding.GetEncoding("gb2312")); if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var table = doc.DocumentNode.SelectSingleNode("//table"); if (table == null) { return(result); } var trs = table.ChildNodes.Where(node => node.Name == "tr").ToList(); OpenCode8DTModel model = null; HtmlNode nodeA = null; var optimizeUrl = string.Empty; for (var i = 2; i < trs.Count; i++) //第一二行为表头 { var trstyle = trs[i].Attributes["style"]; if (trstyle != null && trstyle.Value == "display:none") { continue; } var tds = trs[i].ChildNodes.Where(node => node.Name == "td").ToList(); if (tds.Count < 8) { continue; } model = new OpenCode8DTModel(); nodeA = tds[0].ChildNodes.Where(n => n.Name == "a").FirstOrDefault(); if (nodeA == null) { continue; } model.Term = Convert.ToInt64(nodeA.InnerText.Trim()); optimizeUrl = nodeA.Attributes["href"].Value; model.DetailUrl = new Uri(url, optimizeUrl).AbsoluteUri; model.OpenTime = Convert.ToDateTime(tds[9].InnerText); if (tds[1].ChildNodes.Count == 0) { continue; } var opencodeNode = tds[1].ChildNodes.Where(n => n.Name.ToLower() == "i").ToList(); if (opencodeNode.Count < 5) { continue; } model.OpenCode1 = Convert.ToInt32(opencodeNode[0].InnerText.Trim()); model.OpenCode2 = Convert.ToInt32(opencodeNode[1].InnerText.Trim()); model.OpenCode3 = Convert.ToInt32(opencodeNode[2].InnerText.Trim()); model.OpenCode4 = Convert.ToInt32(opencodeNode[3].InnerText.Trim()); model.OpenCode5 = Convert.ToInt32(opencodeNode[4].InnerText.Trim()); model.OpenCode6 = Convert.ToInt32(opencodeNode[5].InnerText.Trim()); model.OpenCode7 = Convert.ToInt32(opencodeNode[6].InnerText.Trim()); model.OpenCode8 = Convert.ToInt32(opencodeNode[7].InnerText.Trim()); var details = GetKaijiangDetails(tds); model.Spare = details; result.Add(model); } var checkDataHelper = new CheckDataHelper(); var dbdata = services.GetListS <OpenCode8DTModel>(currentLottery) .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()); checkDataHelper.CheckData(dbdata, result.ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()), Config.Area, currentLottery); result = result.OrderByDescending(S => S.Term).ToList(); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过主站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(result); }
/// <summary> /// 完善备用站点福建31选7开奖实体信息 /// </summary> /// <param name="model"></param> private bool OptimizeBackModel(ref OpenCode8DTModel model) { try { var htmlResource = NetHelper.GetUrlResponse(model.DetailUrl, Encoding.GetEncoding("gb2312")); if (string.IsNullOrWhiteSpace(htmlResource)) { return(false); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var table = doc.DocumentNode.SelectSingleNode("//table"); if (table == null) { return(false); } var trs = table.ChildNodes.Where(N => N.Name.ToLower() == "tr").ToList(); List <HtmlNode> tds = null; var entity = new KaijiangDetailsEntity(); entity.KaiJiangItems = new List <Kaijiangitem>(); for (var i = 1; i < trs.Count; i++) //第一行为表头 { tds = trs[i].ChildNodes.Where(N => N.Name.ToLower() == "td").ToList(); if (tds.Count < 5) { continue; } if (tds[1].InnerText == "一等奖") { var tmp = new Kaijiangitem { Name = "一等奖", Total = tds[2].InnerText.Replace("注", string.Empty), TotalMoney = tds[3].InnerText }; entity.KaiJiangItems.Add(tmp); // Level1Num = Convert.ToInt32(tds[2].InnerText.Replace("注", string.Empty)); // Level1Money = Convert.ToDecimal(tds[3].InnerText); } if (tds[1].InnerText == "二等奖") { var tmp = new Kaijiangitem { Name = "二等奖", Total = tds[2].InnerText.Replace("注", string.Empty), TotalMoney = tds[3].InnerText }; entity.KaiJiangItems.Add(tmp); } if (tds[1].InnerText == "三等奖") { var tmp = new Kaijiangitem { Name = "三等奖", Total = tds[2].InnerText.Replace("注", string.Empty), TotalMoney = tds[3].InnerText }; entity.KaiJiangItems.Add(tmp); } if (tds[1].InnerText == "四等奖") { var tmp = new Kaijiangitem { Name = "四等奖", Total = tds[2].InnerText.Replace("注", string.Empty), TotalMoney = tds[3].InnerText }; entity.KaiJiangItems.Add(tmp); } if (tds[1].InnerText == "五等奖") { var tmp = new Kaijiangitem { Name = "五等奖", Total = tds[2].InnerText.Replace("注", string.Empty), TotalMoney = tds[3].InnerText }; entity.KaiJiangItems.Add(tmp); } if (tds[1].InnerText == "六等奖") { var tmp = new Kaijiangitem { Name = "六等奖", Total = tds[2].InnerText.Replace("注", string.Empty), TotalMoney = tds[3].InnerText }; entity.KaiJiangItems.Add(tmp); } } var reg = new Regex(@"本期投注总额:([\d.,]*?)元"); var match = reg.Match(htmlResource); if (match.Success) { entity.Trje = match.Result("$1").Replace(",", string.Empty); } reg = new Regex(@"奖池资金累计金额:([\d.,]*?)元"); match = reg.Match(htmlResource); if (match.Success) { entity.Gdje = match.Result("$1").Replace(",", string.Empty); } model.Spare = model.TryToJson(); //model.Spare = string.Format("{0},{1}^一等奖|{2}|{3},二等奖|{4}|{5},三等奖|{6}|{7},四等奖|{8}|{9},五等奖|{10}|{11},六等奖|{12}|{13}", // Sales, Jackpot, Level1Num, Level1Money, Level2Num, Level2Money, Level3Num, Level3Money, Level4Num, // Level4Money, Level5Num, Level5Money, Level6Num, Level6Money); return(true); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过备用站点优化开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(false); }
/// <summary> /// 获取主站开奖列表数据 /// </summary> /// <returns></returns> private List <OpenCode8DTModel> GetOpenListFromMainUrl() { var result = new List <OpenCode8DTModel>(); try { var htmlResource = NetHelper.GetUrlResponse(Config.MainUrl + string.Format("&r={0}", new Random().Next(1000, 9999))); //只取第一页数据,最新5条记录 if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var divSections = doc.DocumentNode.SelectNodes("//div[@class='artCon KJDetail']").ToList(); if (divSections == null) { return(result); } OpenCode8DTModel model = null; var lastYear = (CommonHelper.SCCSysDateTime.Year - 1).ToString().Substring(2); HtmlNode divSummary, divDetail, table, tbody; List <HtmlNode> divContent, divInfos, spans, trs, tds, divDetails, divTexts; string term = string.Empty, detailName = string.Empty, detailNum = string.Empty, detailMoney = string.Empty; string[] openCode = null; Regex reg = null; Match m = null; foreach (var divSection in divSections) { var entity = new KaijiangDetailsEntity(); entity.KaiJiangItems = new List <Kaijiangitem>(); model = new OpenCode8DTModel(); divInfos = divSection.ChildNodes.Where(N => N.Name.ToLower() == "div").ToList(); if (divInfos.Count < 2) { continue; } divContent = divInfos[1].ChildNodes.Where(N => N.Name.ToLower() == "div").ToList(); if (divContent.Count < 2) { continue; } divSummary = divContent[0]; //概述 divDetail = divContent[1]; //详情 spans = divSummary.ChildNodes.First(N => N.Name.ToLower() == "strong").ChildNodes .Where(N => N.Name.ToLower() == "span").ToList(); term = spans[0].InnerText; if (term.StartsWith(lastYear)) { break; } model.Term = Convert.ToInt32(term); model.OpenTime = Convert.ToDateTime(spans[2].InnerText.Replace("年", "-").Replace("月", "-") .Replace("日", string.Empty)); openCode = (spans[3].InnerText + " " + spans[4].InnerText).Trim().Split(' '); model.OpenCode1 = Convert.ToInt32(openCode[0]); model.OpenCode2 = Convert.ToInt32(openCode[1]); model.OpenCode3 = Convert.ToInt32(openCode[2]); model.OpenCode4 = Convert.ToInt32(openCode[3]); model.OpenCode5 = Convert.ToInt32(openCode[4]); model.OpenCode6 = Convert.ToInt32(openCode[5]); model.OpenCode7 = Convert.ToInt32(openCode[6]); model.OpenCode8 = Convert.ToInt32(openCode[7]); table = divDetail.ChildNodes.FirstOrDefault(N => N.Name.ToLower() == "table"); if (table == null) { divDetails = divDetail.ChildNodes.Where(N => N.Name.ToLower() == "div").ToList(); if (divDetails.Count < 14) { continue; } for (var i = 4; i < 12; i++) { divTexts = divDetails[i].ChildNodes.Where(N => N.Name.ToLower() == "#text").ToList(); if (divTexts.Count < 4) { continue; } detailName = divTexts[0].InnerText.Replace(" ", string.Empty).Trim(); detailNum = divTexts[1].InnerText.Replace(" ", string.Empty).Replace("注", string.Empty) .Trim(); detailMoney = divTexts[2].InnerText.Replace(" ", string.Empty) .Replace(",", string.Empty).Replace("元", string.Empty).Trim(); if (detailName == "一等奖") { var tmp = new Kaijiangitem { Name = "一等奖", Total = detailNum, TotalMoney = detailMoney }; entity.KaiJiangItems.Add(tmp); } else if (detailName == "二等奖") { var tmp = new Kaijiangitem { Name = "二等奖", Total = detailNum, TotalMoney = detailMoney }; entity.KaiJiangItems.Add(tmp); // Level2Num = Convert.ToInt32(detailNum); // Level2Money = Convert.ToDecimal(detailMoney); } else if (detailName == "三等奖") { var tmp = new Kaijiangitem { Name = "三等奖", Total = detailNum, TotalMoney = detailMoney }; entity.KaiJiangItems.Add(tmp); } else if (detailName == "四等奖") { var tmp = new Kaijiangitem { Name = "四等奖", Total = detailNum, TotalMoney = detailMoney }; entity.KaiJiangItems.Add(tmp); } else if (detailName == "五等奖") { var tmp = new Kaijiangitem { Name = "五等奖", Total = detailNum, TotalMoney = detailMoney }; entity.KaiJiangItems.Add(tmp); } else if (detailName == "六等奖") { var tmp = new Kaijiangitem { Name = "六等奖", Total = detailNum, TotalMoney = detailMoney }; entity.KaiJiangItems.Add(tmp); } } } else { tbody = table.ChildNodes.FirstOrDefault(N => N.Name.ToLower() == "tbody"); if (tbody == null) { continue; } trs = tbody.ChildNodes.Where(N => N.Name.ToLower() == "tr").ToList(); for (var i = 4; i < trs.Count; i++) //第一二三四行是表头 { tds = trs[i].ChildNodes.Where(N => N.Name.ToLower() == "td").ToList(); if (tds.Count < 3) { continue; } if (tds[0].InnerText.Trim() == "一等奖") { var tmp = new Kaijiangitem { Name = "一等奖", Total = tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty) .Replace(",", string.Empty).Trim(), TotalMoney = tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty) .Trim() }; entity.KaiJiangItems.Add(tmp); //Level1Num = Convert.ToInt32(tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty).Replace(",", string.Empty).Trim()); //Level1Money = Convert.ToDecimal(tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty).Trim()); } else if (tds[0].InnerText.Trim() == "二等奖") { var tmp = new Kaijiangitem { Name = "二等奖", Total = tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty) .Replace(",", string.Empty).Trim(), TotalMoney = tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty) .Trim() }; entity.KaiJiangItems.Add(tmp); // Level2Num = Convert.ToInt32(tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty).Replace(",", string.Empty).Trim()); //Level2Money = Convert.ToDecimal(tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty).Trim()); } else if (tds[0].InnerText.Trim() == "三等奖") { var tmp = new Kaijiangitem { Name = "三等奖", Total = tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty) .Replace(",", string.Empty).Trim(), TotalMoney = tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty) .Trim() }; entity.KaiJiangItems.Add(tmp); // Level3Num = Convert.ToInt32(tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty).Replace(",", string.Empty).Trim()); // Level3Money = Convert.ToDecimal(tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty).Trim()); } else if (tds[0].InnerText.Trim() == "四等奖") { var tmp = new Kaijiangitem { Name = "四等奖", Total = tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty) .Replace(",", string.Empty).Trim(), TotalMoney = tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty) .Trim() }; entity.KaiJiangItems.Add(tmp); } else if (tds[0].InnerText.Trim() == "五等奖") { var tmp = new Kaijiangitem { Name = "五等奖", Total = tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty) .Replace(",", string.Empty).Trim(), TotalMoney = tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty) .Trim() }; entity.KaiJiangItems.Add(tmp); } else if (tds[0].InnerText.Trim() == "六等奖") { var tmp = new Kaijiangitem { Name = "六等奖", Total = tds[1].InnerText.Replace("注", string.Empty).Replace(" ", string.Empty) .Replace(",", string.Empty).Trim(), TotalMoney = tds[2].InnerText.Replace("元", string.Empty).Replace(" ", string.Empty) .Trim() }; entity.KaiJiangItems.Add(tmp); } } } //抓取奖池累计数据 reg = new Regex(@"([\d,.]*?)元奖金滚入下期奖池"); // Sales = Convert.ToDecimal(spans[1].InnerText); entity.Trje = spans[1].InnerText; m = reg.Match(divSection.InnerHtml); if (m.Success) { // Jackpot = Convert.ToDecimal(m.Result("$1")); entity.Gdje = m.Result("$1"); } model.Spare = entity.TryToJson(); //model.Spare = string.Format("{0},{1}^一等奖|{2}|{3},二等奖|{4}|{5},三等奖|{6}|{7},四等奖|{8}|{9},五等奖|{10}|{11},六等奖|{12}|{13}", // Sales, Jackpot, Level1Num, Level1Money, Level2Num, Level2Money, Level3Num, Level3Money, Level4Num, // Level4Money, Level5Num, Level5Money, Level6Num, Level6Money); result.Add(model); } var checkDataHelper = new CheckDataHelper(); var dbdata = services.GetListS <OpenCode8DTModel>(currentLottery) .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()); checkDataHelper.CheckData(dbdata, result.ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()), Config.Area, currentLottery); result = result.OrderByDescending(S => S.Term).ToList(); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过主站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(result); }
/// <summary> /// 通过期号编号从备用站点爬取开奖信息 /// </summary> /// <param name="termItem">备用站点的期号信息</param> /// <returns></returns> private OpenCode8DTModel GetOpenModelFromBackUrl(KeyValuePair <string, string> termItem) { var result = new OpenCode8DTModel(); try { if (string.IsNullOrWhiteSpace(termItem.Key) || string.IsNullOrWhiteSpace(termItem.Value)) { return(result); } result.Term = Convert.ToInt64(termItem.Key); var lotteryNumberUrl = "http://www.xjflcp.com/getLotteryNumber"; var numberJson = NetHelper.GetUrlResponse(lotteryNumberUrl, "POST", string.Format("lotteryId={0}", termItem.Value)); if (numberJson == null) { return(result); } int Level1Num = 0, Level2Num = 0, Level3Num = 0, Level4Num = 0, Level5Num = 0, Level6Num = 0, Level7Num = 0; decimal Level1Money = 0, Level2Money = 0, Level3Money = 0, Level4Money = 0, Level5Money = 0, Level6Money = 0, Level7Money = 0, Sales = 0, Jackpot = 0; var numberObj = numberJson.JsonToEntity <dynamic>(); for (var i = 0; i < numberObj.Count; i++) { if (numberObj[i].key == "announceTime") { result.OpenTime = Convert.ToDateTime(numberObj[i].value); } else if (numberObj[i].key == "totalSale") { Sales = Convert.ToDecimal(numberObj[i].value); } else if (numberObj[i].key == "totalProgressive") { Jackpot = Convert.ToDecimal(numberObj[i].value); } else if (numberObj[i].key == "0") { result.OpenCode1 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "1") { result.OpenCode2 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "2") { result.OpenCode3 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "3") { result.OpenCode4 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "4") { result.OpenCode5 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "5") { result.OpenCode6 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "6") { result.OpenCode7 = Convert.ToInt32(numberObj[i].value); } else if (numberObj[i].key == "7") { result.OpenCode8 = Convert.ToInt32(numberObj[i].value); } } var lotteryDetailUrl = "http://www.xjflcp.com/getLotteryDetailInfo"; var detailJson = NetHelper.GetUrlResponse(lotteryDetailUrl, "POST", string.Format("lotteryId={0}&gameId=4", termItem.Value)); if (!string.IsNullOrEmpty(numberJson)) { var detailObj = detailJson.JsonToEntity <dynamic>(); for (var i = 0; i < detailObj.Count; i++) { if (detailObj[i].prizeName == "一等奖") { Level1Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level1Money = Convert.ToDecimal(detailObj[i].prize); } else if (detailObj[i].prizeName == "二等奖") { Level2Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level2Money = Convert.ToDecimal(detailObj[i].prize); } else if (detailObj[i].prizeName == "三等奖") { Level3Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level3Money = Convert.ToDecimal(detailObj[i].prize); } else if (detailObj[i].prizeName == "四等奖") { Level4Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level4Money = Convert.ToDecimal(detailObj[i].prize); } else if (detailObj[i].prizeName == "五等奖") { Level5Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level5Money = Convert.ToDecimal(detailObj[i].prize); } else if (detailObj[i].prizeName == "六等奖") { Level6Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level6Money = Convert.ToDecimal(detailObj[i].prize); } else if (detailObj[i].prizeName == "七等奖") { Level7Num = Convert.ToInt32(detailObj[i].number.ToString().Replace(",", "")); Level7Money = Convert.ToDecimal(detailObj[i].prize); } } } result.Spare = string.Format( "{0},{1}^一等奖|{2}|{3},二等奖|{4}|{5},三等奖|{6}|{7},四等奖|{8}|{9},五等奖|{10}|{11},六等奖|{12}|{13},七等奖|{14}|{15}", Sales, Jackpot, Level1Num, Level1Money, Level2Num, Level2Money, Level3Num, Level3Money, Level4Num, Level4Money, Level5Num, Level5Money, Level6Num, Level6Money, Level7Num, Level7Money); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过备用站点抓取开奖详情数据时发生错误,错误信息【{1}】", Config.Area + Config.LotteryName, ex.Message)); } return(result); }
/// <summary> /// 通过主站点爬取开奖列表数据 /// </summary> /// <returns></returns> private List <OpenCode8DTModel> GetOpenListFromMainUrl() { var result = new List <OpenCode8DTModel>(); try { var requestUrl = string.Format("{0}?r={1}", Config.MainUrl, new Random().Next(1000, 9999)); var htmlResource = NetHelper.GetBaiDuLeCaiResponse(requestUrl); if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var table = doc.DocumentNode.SelectSingleNode("//tbody"); if (table == null) { return(result); } var trs = table.ChildNodes.Where(node => node.Name == "tr").ToList(); OpenCode8DTModel model = null; List <HtmlNode> tds, alist = null; for (var i = 0; i < trs.Count; i++) //第一行 { var trstyle = trs[i].Attributes["style"]; if (trstyle != null && trstyle.Value == "display:none") { continue; } tds = trs[i].ChildNodes.Where(node => node.Name == "td").ToList(); if (tds.Count < 4) { continue; } model = new OpenCode8DTModel(); model.OpenTime = Convert.ToDateTime(tds[0].InnerText); alist = tds[1].ChildNodes.Where(n => n.Name == "a").ToList(); if (alist.Count < 0) { continue; } model.Term = Convert.ToInt64(alist[0].InnerText.Trim()); if (tds[2].ChildNodes.Count == 0) { continue; } var opencodeNode = tds[2].ChildNodes[0].ChildNodes.Where(n => n.Name == "span").ToList(); if (opencodeNode.Count < 8) { continue; } model.OpenCode1 = Convert.ToInt32(opencodeNode[0].InnerText.Trim()); model.OpenCode2 = Convert.ToInt32(opencodeNode[1].InnerText.Trim()); model.OpenCode3 = Convert.ToInt32(opencodeNode[2].InnerText.Trim()); model.OpenCode4 = Convert.ToInt32(opencodeNode[3].InnerText.Trim()); model.OpenCode5 = Convert.ToInt32(opencodeNode[4].InnerText.Trim()); model.OpenCode6 = Convert.ToInt32(opencodeNode[5].InnerText.Trim()); model.OpenCode7 = Convert.ToInt32(opencodeNode[6].InnerText.Trim()); model.OpenCode8 = Convert.ToInt32(opencodeNode[7].InnerText.Trim()); result.Add(model); } result = result.OrderByDescending(S => S.Term).ToList(); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过主站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + Config.LotteryName, ex.Message)); } return(result); }
/// <summary> /// 副站数据爬取 地址:https://fx.cp2y.com/draw/history_10065_Y/ /// </summary> /// <returns></returns> private List <OpenCode8DTModel> GetOpenListFromBackUrl() { var result = new List <OpenCode8DTModel>(); try { var htmlResource = NetHelper.GetUrlResponse(Config.BackUrl, Encoding.Default); if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var table = doc.DocumentNode.SelectSingleNode("//table"); if (table == null) { return(result); } var trs = table.ChildNodes.Where(node => node.Name == "tr").ToList(); List <HtmlNode> tds = null; string term = string.Empty, openCodeString = string.Empty, optimizeUrl = string.Empty; OpenCode8DTModel model = null; for (var i = 0; i < trs.Count; i++) { tds = trs[i].ChildNodes.Where(S => S.Name.ToLower() == "td").ToList(); if (tds.Count < 4) { continue; } model = new OpenCode8DTModel(); term = tds[0].InnerText.Trim(); if (term.StartsWith((CommonHelper.SCCSysDateTime.Year - 1).ToString())) { break; } model.Term = Convert.ToInt64(term); openCodeString = tds[1].InnerText.Replace(" ", "").Trim(); model.OpenCode1 = Convert.ToInt32(openCodeString.Substring(0, 2)); model.OpenCode2 = Convert.ToInt32(openCodeString.Substring(2, 2)); model.OpenCode3 = Convert.ToInt32(openCodeString.Substring(4, 2)); model.OpenCode4 = Convert.ToInt32(openCodeString.Substring(6, 2)); model.OpenCode5 = Convert.ToInt32(openCodeString.Substring(8, 2)); model.OpenCode6 = Convert.ToInt32(openCodeString.Substring(10, 2)); model.OpenCode7 = Convert.ToInt32(openCodeString.Substring(12, 2)); model.OpenCode8 = Convert.ToInt32(openCodeString.Substring(14, 2)); model.OpenTime = Convert.ToDateTime(tds[9].InnerText.Trim()); //组装开奖详情 result.Add(model); } var checkDataHelper = new CheckDataHelper(); var dbdata = services.GetListS <OpenCode8DTModel>(currentLottery) .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()); checkDataHelper.CheckData(dbdata, result.ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()), Config.Area, currentLottery); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过备用站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(result); }
/// <summary> /// 获取备用站点开奖列表数据 /// </summary> /// <returns></returns> private List <OpenCode8DTModel> GetOpenListFromMainUrl() { var result = new List <OpenCode8DTModel>(); try { var htmlResource = NetHelper.GetUrlResponse(Config.MainUrl); if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var tables = doc.DocumentNode.SelectNodes("//table[@cellpadding]"); if (tables == null) { return(result); } var tbody = tables[0].ChildNodes.Where(w => w.Name == "tbody").ToList(); var trs = tbody[0].ChildNodes.Where(w => w.Name == "tr").ToList(); foreach (var item in trs) { var tds = item.ChildNodes.Select(w => w).ToList(); tds.RemoveAll(w => w.Name != "td"); var qihao = tds[0].InnerText.Trim(); var kaijianghaoma = tds[1].InnerText.Trim().Split('+'); var opentime = tds[12].InnerText.Trim(); var tmp = new OpenCode8DTModel { Term = long.Parse(qihao), OpenTime = DateTime.Parse(opentime) }; tmp.OpenCode1 = int.Parse(kaijianghaoma[0]); tmp.OpenCode2 = int.Parse(kaijianghaoma[1]); tmp.OpenCode3 = int.Parse(kaijianghaoma[2]); tmp.OpenCode4 = int.Parse(kaijianghaoma[3]); tmp.OpenCode5 = int.Parse(kaijianghaoma[4]); tmp.OpenCode6 = int.Parse(kaijianghaoma[5]); tmp.OpenCode7 = int.Parse(kaijianghaoma[6]); tmp.OpenCode8 = int.Parse(kaijianghaoma[7]); OptimizeMainModel(ref tmp, item); result.Add(tmp); } var checkDataHelper = new CheckDataHelper(); var dbdata = services.GetListS <OpenCode8DTModel>(currentLottery) .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()); checkDataHelper.CheckData(dbdata, result.ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()), Config.Area, currentLottery); result = result.OrderByDescending(S => S.Term).ToList(); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过主站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(result); }
/// <summary> /// 给开奖信息加上开奖详情 /// </summary> /// <param name="model"></param> /// <returns></returns> private bool OptimizeMainModel(ref OpenCode8DTModel modelr, HtmlNode tr) { try { var entity = new KaijiangDetailsEntity(); entity.KaiJiangItems = new List <Kaijiangitem>(); var tds = tr.ChildNodes.Select(w => w).ToList(); tds.RemoveAll(w => w.Name != "td"); if (tds.Count != 13) { return(false); } var tdjstr = tds[2].InnerText.Trim().Split('注', '元'); var tedengjiang = new Kaijiangitem { Name = "特等奖", Total = tdjstr[0].Replace(",", "").Trim(), TotalMoney = tdjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(tedengjiang); var ydjstr = tds[3].InnerText.Trim().Split('注', '元'); var yidengjiang = new Kaijiangitem { Name = "一等奖", Total = ydjstr[0].Replace(",", "").Trim(), TotalMoney = ydjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(yidengjiang); var edjstr = tds[4].InnerText.Trim().Split('注', '元'); var erdengjiang = new Kaijiangitem { Name = "二等奖", Total = edjstr[0].Replace(",", "").Trim(), TotalMoney = edjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(erdengjiang); var sdjstr = tds[5].InnerText.Trim().Split('注', '元'); var sandengjiang = new Kaijiangitem { Name = "三等奖", Total = sdjstr[0].Replace(",", "").Trim(), TotalMoney = sdjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(sandengjiang); var sidjstr = tds[6].InnerText.Trim().Split('注', '元'); var sidengjiang = new Kaijiangitem { Name = "四等奖", Total = sidjstr[0].Replace(",", "").Trim(), TotalMoney = sidjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(sidengjiang); var wdjstr = tds[7].InnerText.Trim().Split('注', '元'); var wudengjiang = new Kaijiangitem { Name = "五等奖", Total = wdjstr[0].Replace(",", "").Trim(), TotalMoney = wdjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(wudengjiang); var ldjstr = tds[8].InnerText.Trim().Split('注', '元'); var liudengjiang = new Kaijiangitem { Name = "六等奖", Total = ldjstr[0].Replace(",", "").Trim(), TotalMoney = ldjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(liudengjiang); var xyjstr = tds[9].InnerText.Trim().Split('注', '元'); var xingyunjiang = new Kaijiangitem { Name = "幸运奖", Total = xyjstr[0].Replace(",", "").Trim(), TotalMoney = xyjstr[1].Replace(",", "").Trim() }; entity.KaiJiangItems.Add(xingyunjiang); entity.Gdje = tds[11].InnerText.Replace(",", "").Trim(); entity.Trje = tds[10].InnerText.Replace(",", "").Trim(); modelr.Spare = entity.TryToJson(); return(true); } catch (Exception ee) { return(false); } }
/// <summary> /// 副站数据爬取 地址:https://fx.cp2y.com/draw/history_10065_Y/ /// </summary> /// <returns></returns> private List <OpenCode8DTModel> GetOpenListFromBackUrl() { var result = new List <OpenCode8DTModel>(); try { var htmlResource = NetHelper.GetUrlResponse(Config.BackUrl, Encoding.GetEncoding("UTF-8")); if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var table = doc.DocumentNode.SelectSingleNode("//tbody"); if (table == null) { return(result); } var trs = table.ChildNodes.Where(node => node.Name == "tr").ToList(); List <HtmlNode> tds = null; string term = string.Empty, openCodeString = string.Empty, optimizeUrl = string.Empty; OpenCode8DTModel model = null; for (var i = 0; i < trs.Count; i++) { tds = trs[i].ChildNodes.Where(S => S.Name.ToLower() == "td").ToList(); if (tds.Count < 3) { continue; } model = new OpenCode8DTModel(); term = tds[0].InnerText.Trim().Substring(0, 7); model.Term = Convert.ToInt64(term); var opencodeUl = tds[1].ChildNodes.Where(n => n.Name.ToLower() == "ul").ToList(); var opencodeNode = opencodeUl[0].ChildNodes.Where(n => n.Name.ToLower() == "li").ToList(); if (opencodeNode.Count < 5) { continue; } model.OpenCode1 = Convert.ToInt32(opencodeNode[0].InnerText.Trim()); model.OpenCode2 = Convert.ToInt32(opencodeNode[1].InnerText.Trim()); model.OpenCode3 = Convert.ToInt32(opencodeNode[2].InnerText.Trim()); model.OpenCode4 = Convert.ToInt32(opencodeNode[3].InnerText.Trim()); model.OpenCode5 = Convert.ToInt32(opencodeNode[4].InnerText.Trim()); model.OpenCode6 = Convert.ToInt32(opencodeNode[5].InnerText.Trim()); model.OpenCode7 = Convert.ToInt32(opencodeNode[6].InnerText.Trim()); model.OpenCode8 = Convert.ToInt32(opencodeNode[7].InnerText.Trim()); //组装开奖详情 result.Add(model); } var checkDataHelper = new CheckDataHelper(); var dbdata = services.GetListS <OpenCode8DTModel>(currentLottery) .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()); checkDataHelper.CheckData(dbdata, result.ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()), Config.Area, currentLottery); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过备用站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(result); }
/// <summary> /// 完善主站点开奖实体信息 /// </summary> /// <param name="model"></param> private bool OptimizeMainModel(ref OpenCode8DTModel model) { var url = string.Format("http://baidu.lecai.com/lottery/draw/view/520/{0}?r={1}", model.Term, new Random().Next(1000, 9999)); try { var htmlResource = NetHelper.GetBaiDuLeCaiResponse(url); var reg = new Regex(@"var phaseData = ([\s\S]*?);"); var m = reg.Match(htmlResource); if (m.Success) { var dataJson = m.Result("$1"); var obj = dataJson.JsonToEntity <dynamic>(); var data = obj[model.Term.ToString()]; if (data != null) { int Level1Num = 0, Level2Num = 0, Level3Num = 0, Level4Num = 0, Level5Num = 0, Level6Num = 0, Level7Num = 0; decimal Level1Money = 0, Level2Money = 0, Level3Money = 0, Level4Money = 0, Level5Money = 0, Level6Money = 0, Level7Money = 0, Sales = 0, Jackpot = 0; Jackpot = Convert.ToDecimal(data["formatPoolAmount"]); Sales = Convert.ToDecimal(data["formatSaleAmount"]); Level1Num = Convert.ToInt32(data["list"]["prize1"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level1Money = Convert.ToDecimal(data["list"]["prize1"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); Level2Num = Convert.ToInt32(data["list"]["prize2"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level2Money = Convert.ToDecimal(data["list"]["prize2"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); Level3Num = Convert.ToInt32(data["list"]["prize3"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level3Money = Convert.ToDecimal(data["list"]["prize3"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); Level4Num = Convert.ToInt32(data["list"]["prize4"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level4Money = Convert.ToDecimal(data["list"]["prize4"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); Level5Num = Convert.ToInt32(data["list"]["prize5"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level5Money = Convert.ToDecimal(data["list"]["prize5"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); Level6Num = Convert.ToInt32(data["list"]["prize6"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level6Money = Convert.ToDecimal(data["list"]["prize6"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); Level7Num = Convert.ToInt32(data["list"]["prize7"]["bet"].Value.Replace(",", string.Empty) .Replace("注", string.Empty)); Level7Money = Convert.ToDecimal(data["list"]["prize7"]["prize"].Value.Replace(",", string.Empty) .Replace("元", string.Empty)); model.Spare = string.Format( "{0},{1}^一等奖|{2}|{3},二等奖|{4}|{5},三等奖|{6}|{7},四等奖|{8}|{9},五等奖|{10}|{11},六等奖|{12}|{13},七等奖|{14}|{15}", Sales, Jackpot, Level1Num, Level1Money, Level2Num, Level2Money, Level3Num, Level3Money, Level4Num, Level4Money, Level5Num, Level5Money, Level6Num, Level6Money, Level7Num, Level7Money); } return(true); } } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过主站点完善开奖列表时发生错误,错误信息【{1}】", Config.Area + Config.LotteryName, ex.Message)); } return(false); }
/// <summary> /// 获取主站开奖列表数据 /// </summary> /// <returns></returns> private List <OpenCode8DTModel> GetOpenListFromBackUrl() { var result = new List <OpenCode8DTModel>(); try { var htmlResource = NetHelper.GetBaiDuLeCaiResponse(Config.BackUrl); if (htmlResource == null) { return(result); } var doc = new HtmlDocument(); doc.LoadHtml(htmlResource); var tables = doc.DocumentNode.SelectNodes("//table[@class]"); if (tables == null) { return(result); } var trs = tables[0].ChildNodes.Select(w => w).ToList(); trs.RemoveAll(w => w.Name != "tr"); trs.RemoveAll(w => w.GetAttributeValue("class", "") == "th kj-bd"); foreach (var item in trs) { var tds = item.ChildNodes.Select(w => w).ToList(); tds.RemoveAll(w => w.Name != "td"); if (tds.Count != 10) { continue; } var qihao = tds[0].InnerText.Substring(2); var kaijianghao = tds[1].InnerText.Trim(); //010203040506 格式 var opentime = tds[9].InnerText.Trim(); var tmp = new OpenCode8DTModel { Term = long.Parse(qihao), OpenTime = DateTime.Parse(opentime) }; tmp.OpenCode1 = int.Parse(kaijianghao.Substring(0, 2)); tmp.OpenCode2 = int.Parse(kaijianghao.Substring(2, 2)); tmp.OpenCode3 = int.Parse(kaijianghao.Substring(4, 2)); tmp.OpenCode4 = int.Parse(kaijianghao.Substring(6, 2)); tmp.OpenCode5 = int.Parse(kaijianghao.Substring(8, 2)); tmp.OpenCode6 = int.Parse(kaijianghao.Substring(10, 2)); tmp.OpenCode7 = int.Parse(kaijianghao.Substring(12, 2)); tmp.OpenCode8 = int.Parse(kaijianghao.Substring(14, 2)); OptimizeBackModel(ref tmp, item); result.Add(tmp); } var checkDataHelper = new CheckDataHelper(); var dbdata = services.GetListS <OpenCode8DTModel>(currentLottery) .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()); checkDataHelper.CheckData(dbdata, result.ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr()), Config.Area, currentLottery); result = result.OrderByDescending(S => S.Term).ToList(); } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】通过备用站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ex.Message)); } return(result); }