using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using FCS.Common; using FCS.Crawler.ZCLotteryMatchs; using FCS.Interface; using FCS.Models; using FCS.Models.Entity; namespace FCS.Crawler.Basketball { public class B_GamesJob : CommonJob { private Dictionary statusDict_NBA;//页面与数据库状态对应枚举NBA private List gamesStatus;//比赛状态 private List teamList;//球员 private List result = new List(); private string eventId; public B_GamesJob() { gamesStatus = services.GetDataItem(DataItemDetailEnum.FootBallGameStatus); teamList = services.Query().ToList(); var finshStatus = gamesStatus.Where(p => p.ItemValue == "4").ToList()[0].Id; statusDict_NBA = new Dictionary { {"胜", finshStatus }, {"负",finshStatus} }; } public void Click() { Click_NBA(); } /// /// 获取全部 /// public void GetALL_NBA() { //季前赛 http://lanqiu.zgzcw.com/nba/saichengbeforebyteam.action?source_league_id=1&season=17-18 //常规赛 http://lanqiu.zgzcw.com/nba/SaichengMonthTeamAjax.action?source_league_id=1&season=17-18&teamId=&guestTeamId=&month=03 //季后赛 http://lanqiu.zgzcw.com/nba/saichengafterByTeam.action?source_league_id=1&season=17-18&teamId=0&guestTeamId=0&group=1 eventId = new B_EventsJob().GetEventList().Where(p => p.Name == ConfigurationManager.AppSettings["NBAEventName"]).ToList()[0].Id; var groupList = services.Query(" AND EventId='{0}'".FormatMe(eventId)).ToList(); groupList.ToList().ForEach(p => { Analysis(p); }); while (true) { if (CommonHelper.ThreadsFinsh()) break; } services.SqlBulkCopyAdd(result); } /// /// 更新 /// public void Click_NBA() { var groupList = services.Query(" AND Season LIKE '%{0}%'".FormatMe(DateTime.Now.Year.ToString().Substring(2))).ToList(); eventId = new B_EventsJob().GetEventList().Where(p => p.Name == ConfigurationManager.AppSettings["NBAEventName"]).ToList()[0].Id; groupList.ForEach(p => { Analysis(p); }); Task.WaitAll(taskList.ToArray()); var deleteWhere = ""; groupList.ForEach(p => { deleteWhere += "'"+p.Id + "',"; }); deleteWhere = deleteWhere.ToString().Substring(0, deleteWhere.ToString().Length - 1); services.Delete(" AND GroupingId IN ({0})".FormatMe(deleteWhere)); services.SqlBulkCopyAdd(result); } /// /// 获取Html分析出数据 /// /// /// private async Task Analysis(B_Grouping p) { taskList.Add(Task.Run(() => { var url = ""; if (p.Extended1.IsEmpty() || p.Extended1 == "0") return; if (p.Extended1 == "-1") url = "http://lanqiu.zgzcw.com/nba/saichengbeforebyteam.action?source_league_id=1&teamId=0&guestTeamId=0&season=" + p.Season; else if (p.Extended1.Length == 1) url = "http://lanqiu.zgzcw.com/nba/saichengafterByTeam.action?source_league_id=1&season=" + p.Season + "&teamId=&guestTeamId=&group=" + p.Extended1; else url = "http://lanqiu.zgzcw.com/nba/SaichengMonthTeamAjax.action?source_league_id=1&season=" + p.Season + "&teamId=&guestTeamId=&month=" + p.Extended1; var doc = CommonHelper.GetHtml(url); var gamesList = doc.DocumentNode.SelectNodes(".//tr"); var number = 0; while (doc.DocumentNode.InnerHtml.Contains("html") || gamesList == null) { if (number > 10) break; if (!doc.DocumentNode.InnerHtml.Contains("html")) number++; doc = CommonHelper.GetHtml(url); } if (gamesList == null) return; foreach (var item in gamesList) { var td = item.SelectNodes("td"); var scoreAll = td[2].SelectNodes(".//strong")[0].InnerText; result.Add(new B_Games { Id = CommonHelper.GetGuid().ToString(), HomeTeamId = string.Join(",", (from a in teamList where a.Name == td[1].InnerText select a.Id).ToArray()), VisitingTeamId = string.Join(",", (from a in teamList where a.Name == td[3].InnerText select a.Id).ToArray()), HomeTeamScore_All = scoreAll.IsEmpty() || scoreAll.Trim().Contains("-") ? 0 : Convert.ToInt32(scoreAll.Trim().Split(':')[0]), VisitingTeamScore_All = scoreAll.IsEmpty() || scoreAll.Trim().Contains("-") ? 0 : Convert.ToInt32(scoreAll.Trim().Split(':')[1]), HomeTeamScore_Half = td[5].InnerText.IsEmpty() ? 0 : Convert.ToInt32(td[5].InnerText.Trim().Split(':')[0]), VisitingTeamScore_Half = td[5].InnerText.IsEmpty() ? 0 : Convert.ToInt32(td[5].InnerText.Trim().Split(':')[1]), Status = td[4].InnerText.Trim().IsEmpty() ? gamesStatus.Where(q => q.ItemValue == "1").ToList()[0].Id : statusDict_NBA[td[4].InnerText.Trim()], Remark = td[4].InnerText.Trim(), EventId = eventId, CreateDateTime = DateTime.Now, GroupingId = p.Id, Season = p.Season, StartDateTime = DateTime.Parse("20" + p.Season.Split('-')[1] + "-" + td[0].InnerText.Trim()) }); } })); } } }