public void ParseMatch(string round, HtmlNode table, MatchParam param) { var trs = table.SelectNodes("tbody/tr"); foreach (var tr in trs) { var dtNode = tr.SelectSingleNode("td[@class='datetime']"); if (dtNode == null) { continue; } var matchDate = dtNode.InnerText; var matchIdStr = tr.SelectSingleNode("td/a").Attributes["href"].Value; var homeNode = tr.SelectSingleNode("td/a/img[@class='home']"); var awayNode = tr.SelectSingleNode("td/a/img[@class='away']"); var homeIdStr = homeNode == null ? "" : homeNode.Attributes["src"].Value; var awayIdStr = awayNode == null ? "" : awayNode.Attributes["src"].Value; var p1 = tr.SelectSingleNode("td[@class='p1 ']"); var htResult = p1 == null ? "" : p1.InnerText; var ftResult = tr.SelectSingleNode("td[@class='nt ftx ']").InnerText; var matchId = RegexGetStr(matchIdStr, "matchid', ", ","); var currentMatch = new MatchEntity(); currentMatch.MatchId = matchId; currentMatch.HomeId = RegexGetStr(homeIdStr, "small/", ".png"); currentMatch.AwayId = RegexGetStr(awayIdStr, "small/", ".png"); currentMatch.MatchDate = matchDate; currentMatch.ExtendedData = "Round = " + round; currentMatch.SportId = param.SportId; currentMatch.SeasonId = param.SeasonId; var me = MatchEntityManager.AddOrGetCacheEntity <MatchEntity>(matchId); me.CompareSetMatchInfo(currentMatch); if (!string.IsNullOrEmpty(htResult) || !string.IsNullOrEmpty(ftResult)) { var result = new MatchResultEntity() { MatchId = matchId, Result = htResult + "_" + ftResult, SportId = param.SportId }; me.CompareSetMatchResult(result); } } }
public void Process(ITakerReptile.Dto.BaseData data) { BRData bd = data as BRData; SeasonParam param = bd.Param as SeasonParam; CheckSetHistoryParam(param); string txt; if (!HtmlDecode(bd.Html, out txt)) { return; } // 首先添加联赛层级的比赛任务 MatchParam mp = param.CopyCreateParam <MatchParam>(); LeagueManager.AddOrUpdateParam(mp); if (param.CurrentUrlKey == "tableIds") { ProcessTableIdsTxt(param, txt); return; } else if (param.CurrentUrlKey == "teamIds") { ProcessTeamIdsTxt(param, txt); return; } var xml = new XmlHelper(txt); // 获取赛季名称 var title = xml.GetAttributeValue("//page", "title"); var seasonName = title.Split('>').Last(); SeasonEntity currentSeasonEntity = new SeasonEntity(); currentSeasonEntity.SportId = param.SportId; currentSeasonEntity.SeasonId = param.SeasonId; currentSeasonEntity.SeasonName = seasonName; // 获取积分数据块 var cdataFlag = "//c"; var cdata = xml.GetValues(cdataFlag); if (cdata.Count == 0) { // 杯赛没有积分数据的,添加获取所有队伍Id的任务 param = param.CopyCreateParam <SeasonParam>(); param.SetCurrentUrlKey("teamIds"); LeagueManager.AddOrUpdateParam(param); return; } var teamRankData = ""; if (cdata.Count > 5) { teamRankData = cdata[4]; } if (string.IsNullOrEmpty(teamRankData)) { return; } var currentRound = RegexGetStr(cdata[0], "sb-current\"><div class=\"label\">", "<"); currentSeasonEntity.CurrentRound = currentRound; SeasonEntity se = SeasonEntityManager.AddOrGetCacheEntity <SeasonEntity>(param.SeasonId); se.CompareSetSeasonInfo(currentSeasonEntity); // 解析积分数据,并添加队伍任务,添加队伍积分数据,其他数据可由已经结束的比赛结果计算 List <string> teamIdList = new List <string>(); List <SeasonTeamRank> trList = new List <SeasonTeamRank>(); var root = GetHtmlRoot(teamRankData); var tables = root.SelectNodes("//table[@class='normaltable']/tbody"); if (tables.Count == 0) { return; } if (tables.Count > 1) { // 多个积分榜数据,有分组别的,添加获取所有组别Id的任务 param = param.CopyCreateParam <SeasonParam>(); param.SetCurrentUrlKey("tableIds"); LeagueManager.AddOrUpdateParam(param); // 同时添加获取全部队伍Id的任务 param = param.CopyCreateParam <SeasonParam>(); param.SetCurrentUrlKey("teamIds"); LeagueManager.AddOrUpdateParam(param); return; } foreach (var node in tables[0].ChildNodes) { var teamId = RegexGetStr(node.ChildNodes[2].InnerHtml, "teamid','", "',"); teamIdList.Add(teamId); var trDataArr = node.ChildNodes.Select(o => o.InnerText).ToArray(); SeasonTeamRank tr = new SeasonTeamRank() { SeasonId = param.SeasonId, TeamId = teamId, TeamPoints = trDataArr[11], Description = trDataArr[12] }; trList.Add(tr); } SeasonTeams st = SeasonTeamsManager.AddOrGetCacheEntity <SeasonTeams>(param.SeasonId); st.CompareSetTeamRank(trList); // 要分配的队伍任务 var teamTaskDic = se.CompareSetTeamIdList(teamIdList); TeamAssignTask(param, teamTaskDic); }
public void Process(ITakerReptile.Dto.BaseData data) { BRData bd = data as BRData; MatchParam param = bd.Param as MatchParam; CheckSetHistoryParam(param); string txt; if (!HtmlDecode(bd.Html, out txt)) { return; } var xml = new XmlHelper(txt); // 解析成各个数据块 var cdataFlag = "//c"; var cdata = xml.GetValues(cdataFlag); // 获取历史赛季Id,添加到联赛任务,只抓取一次 var historySeasonIdData = GetDataLikeKey(cdata, "sb-wrapper", "lang-1"); var seasonIdList = new List <string>(); if (historySeasonIdData != null) { var rootHistory = GetHtmlRoot(historySeasonIdData); var ul = rootHistory.SelectSingleNode("//div[@class='sb-scrollbox']/ul"); foreach (var li in ul.ChildNodes) { var id = RegexGetStr(li.OuterHtml, "'5_", ","); seasonIdList.Add(id); var sp = param.CopyCreateParam <SeasonParam>(); sp.IsHistoryParam = true; sp.SeasonId = id; LeagueManager.AddOrUpdateParam(sp); } } if (!param.IsHistoryParam && seasonIdList.Any()) { var le = LeagueEntityManager.AddOrGetCacheEntity <LeagueEntity>(param.SeasonId); le.CompareSetSeasonIds(seasonIdList); } // 解析比赛 var matchData = GetDataLikeKey(cdata, "normaltable fixtures"); if (string.IsNullOrEmpty(matchData)) { return; } var root = GetHtmlRoot(matchData); bool isTitle = true; string round = ""; foreach (var node in root.ChildNodes) { switch (node.Name) { case "#text": continue; case "h2": if (isTitle) { isTitle = false; } else { round = node.InnerText; } continue; case "table": ParseMatch(round, node, param); continue; } } }