GamesJob.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using FCS.Common;
  10. using FCS.Interface;
  11. using FCS.Models;
  12. using HtmlAgilityPack;
  13. using Quartz;
  14. namespace FCS.Crawler.ZCLotteryGames
  15. {
  16. class GamesJob : CommonJob, IJob
  17. {
  18. public GamesJob()
  19. {
  20. logName = "GamesJob";
  21. log = new LogHelper();
  22. services = IOC.Resolve<IDTOpenCode>();
  23. g = new F_Grouping();
  24. }
  25. public void Execute(IJobExecutionContext context)
  26. {
  27. //Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  28. // Click();
  29. }
  30. public List<string> gamelist = new List<string>();
  31. public List<string> urllist = new List<string>();
  32. public List<string> urllist2 = new List<string>();
  33. public List<F_Grouping> Group = new List<F_Grouping>();
  34. public List<F_Grouping> Group1 = new List<F_Grouping>();
  35. public List<F_Grouping> GroupParent = new List<F_Grouping>();
  36. public List<F_Team> teamlist = new List<F_Team>();
  37. public List<F_Grouping> GroupList = null;
  38. public List<F_Grouping> GroupList1 = null;
  39. public List<F_Games> Gamelist = null;
  40. public static List<F_Games> gamesList = new List<F_Games>();
  41. public List<F_Games> gamesList_new = new List<F_Games>();
  42. public List<F_Games> gamesList_new1 = new List<F_Games>();
  43. public List<F_Games> gamesList_new2 = new List<F_Games>();
  44. public List<int> listint = new List<int>();//需要删除的比赛PK
  45. F_Grouping g;
  46. public List<F_Games> Click()
  47. {
  48. try
  49. {
  50. string Season = DateTime.Now.ToString("yyyy");
  51. Group = services.Query<F_Grouping>().ToList();
  52. Group1 = services.Query<F_Grouping>(" and Id in( select aa.Id from F_Grouping as aa left join F_Games as b on aa.Id=b.GroupingId where b.[Status]!='a058ec2ec96ae811ab3100ac6a4a134f' and aa.Season like '%{0}%' and b.Season like '%{0}%' group by aa.Id)".FormatMe(Season)).ToList();
  53. Group1.AddRange(services.Query<F_Grouping>(" and Id in ( select aa.Id from F_Grouping as aa left join F_Games as b on aa.Id=b.GroupingId where b.Id is null and aa.Season like '%{0}%' group by aa.Id)".FormatMe(Season)).ToList());
  54. Gamelist = services.Query<F_Games>(" AND Season LIKE '%{0}%'".FormatMe(Season)).ToList();
  55. teamlist = services.Query<F_Team>().ToList();
  56. GroupList = Group1.Where(a => !a.Remark.Contains("/cup/41/") && ((a.ParentId.Length == 0 && a.Remark.Contains("/cup/")) || a.Remark.Contains("/league/"))).ToList();
  57. GroupParent = services.Query<F_Grouping>("and ParentId!=''").ToList();
  58. int max = GroupList.Count;
  59. int num = 0;
  60. //比赛
  61. GroupList.ForEach(async p =>
  62. {
  63. await Task.Run(() =>
  64. {
  65. Trace.WriteLine("获取比赛 开始:" + GroupList.IndexOf(p));
  66. GetClick(p.Remark, p.Name.Trim(), p.Id);
  67. });
  68. lock (g)
  69. {
  70. num++;
  71. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  72. }
  73. });
  74. lock (g)
  75. {
  76. while (num < max)
  77. {
  78. Monitor.Wait(g);//等待
  79. }
  80. }
  81. Trace.WriteLine("获取比赛 完结");
  82. //球队联谊
  83. //var q = Group.Where(a => a.Remark.Contains("/cup/41/") && a.Season.Contains(Season)).ToList();
  84. //List<string> ulist = new List<string>();
  85. //foreach (var item in q)
  86. //{
  87. // ulist.Add(item.Remark);
  88. //}
  89. //ulist = ulist.Distinct().ToList();
  90. //foreach (var item in ulist)
  91. //{
  92. // GetCupData_yy(item, q);
  93. //}
  94. ////检查缺漏
  95. List<string> new_urllist = new List<string>();
  96. new_urllist = urllist;
  97. max = new_urllist.Count;
  98. num = 0;
  99. urllist = new List<string>();
  100. new_urllist.ForEach(async p =>
  101. {
  102. await Task.Run(() =>
  103. {
  104. Trace.WriteLine("获取比赛 缺漏 开始:" + new_urllist.IndexOf(p));
  105. var query = p.Split('|');
  106. GetLeagueData(query[0], query[1], query[2]);
  107. });
  108. lock (g)
  109. {
  110. num++;
  111. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  112. }
  113. });
  114. lock (g)
  115. {
  116. while (num != max)
  117. {
  118. Monitor.Wait(g);//等待
  119. }
  120. }
  121. try
  122. {
  123. gamesList = gamesList.Where(a => a != null).ToList();
  124. }
  125. catch (Exception e)
  126. {
  127. CommonHelper.LogBD(e.Message+"\b\r\t" + gamesList.TryToJson(), "gamedata");
  128. //throw;
  129. }
  130. gamesList = gamesList.Where((x, i) => gamesList.FindIndex(z => z.GroupingId == x.GroupingId && z.VisitingTeamId == x.VisitingTeamId && z.HomeTeamId == x.HomeTeamId && z.HomeTeamScore_All == x.HomeTeamScore_All && z.VisitingTeamScore_All == x.VisitingTeamScore_All && z.HomeTeamScore_Half == x.HomeTeamScore_Half && z.VisitingTeamScore_Half == x.VisitingTeamScore_Half && z.EventId == x.EventId && z.Season == x.Season) == i).ToList();//Lambda表达式去重
  131. var group = gamesList.GroupBy(a => a.GroupingId).Select(g => g.Last()).ToList();
  132. foreach (var item in group)
  133. {
  134. var new_group_game = gamesList.Where(a => a.GroupingId == item.GroupingId).ToList();
  135. var group_game = Gamelist.Where(a => a.GroupingId == item.GroupingId).ToList();
  136. foreach (var item1 in new_group_game)
  137. {
  138. switch (group_game.Where(a => a.GroupingId == item.GroupingId && a.HomeTeamId == item1.HomeTeamId && a.VisitingTeamId == item1.VisitingTeamId && a.StartDateTime == item1.StartDateTime && a.Status == item1.Status).ToList().Count)
  139. {
  140. case 0:
  141. gamesList_new.Add(item1);
  142. break;
  143. case 1:
  144. var gamedetail = group_game.Where(a => a.GroupingId == item.GroupingId && a.HomeTeamId == item1.HomeTeamId && a.VisitingTeamId == item1.VisitingTeamId && a.StartDateTime == item1.StartDateTime && a.Status == item1.Status).FirstOrDefault();
  145. var new_game = item1;
  146. new_game.Id = gamedetail.Id;
  147. gamesList_new.Add(new_game);
  148. listint.Add(gamedetail.PK);
  149. break;
  150. default:
  151. var gamedetail1 = group_game.Where(a => a.GroupingId == item.GroupingId && a.HomeTeamId == item1.HomeTeamId && a.VisitingTeamId == item1.VisitingTeamId && a.StartDateTime == item1.StartDateTime && a.Status == item1.Status).ToList();
  152. var new_game1 = item1;
  153. new_game1.Id = gamedetail1.OrderByDescending(a => a.CreateDateTime).FirstOrDefault().Id;
  154. gamesList_new.Add(new_game1);
  155. foreach (var item2 in gamedetail1)
  156. {
  157. listint.Add(item2.PK);
  158. }
  159. break;
  160. }
  161. }
  162. foreach (var item1 in group_game)
  163. {
  164. listint.Add(item1.PK);
  165. }
  166. }
  167. Thread.Sleep(5000);
  168. var gamesList_new1 = gamesList_new.Where(a => a.StartDateTime < DateTime.Now.AddDays(5)).ToList();
  169. var salist1 = gamesList_new.Where((x, i) => gamesList_new.FindIndex(z => z.GroupingId == x.GroupingId && z.VisitingTeamId == x.VisitingTeamId && z.HomeTeamId == x.HomeTeamId && z.HomeTeamScore_All == x.HomeTeamScore_All && z.VisitingTeamScore_All == x.VisitingTeamScore_All && z.HomeTeamScore_Half == x.HomeTeamScore_Half && z.VisitingTeamScore_Half == x.VisitingTeamScore_Half && z.EventId == x.EventId && z.Season == x.Season && z.Id == x.Id) == i).ToList();//Lambda表达式去重
  170. //gamesList2 = gamesList_new2.Where(a => a.StartDateTime < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"))&& a.StartDateTime > Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))).ToList();
  171. Trace.WriteLine("插入数据 开始:" + salist1.Count);
  172. services.SqlBulkCopyAdd<F_Games>(salist1);
  173. CommonHelper.LogBD("插入比赛数据 结束" + salist1.Count, "Update_RealTimeJob");
  174. Trace.WriteLine("插入数据 结束:" + salist1.Count);
  175. Trace.WriteLine("删除数据 开始:" + listint.Count);
  176. if (listint.Count > 0)
  177. {
  178. int pg = listint.Count % 10000 == 0 ? listint.Count / 10000 : listint.Count / 10000 + 1;
  179. for (int i = 0; i < pg; i++)
  180. {
  181. var listint1 = listint.Skip(i * 10000).Take(10000).ToList();
  182. services.Delete<F_Games>(" and PK in (" + string.Join(",", listint1) + ")");
  183. }
  184. }
  185. Trace.WriteLine("删除数据 结束:" + listint.Count);
  186. List<int> rlist = new List<int>();
  187. var querygame = services.Query<F_Games>(" and Id in (select Id from ( select Id,COUNT(Id) as num from F_Games group by Id) as s where s.num>1 ) ").ToList();
  188. var q1 = querygame.Where((x, i) => querygame.FindIndex(z => z.Id == x.Id) == i).ToList();//Lambda表达式去重
  189. foreach (var item in querygame)
  190. {
  191. if (q1.Where(a => a.PK == item.PK).ToList().Count > 0)
  192. {
  193. continue;
  194. }
  195. else
  196. {
  197. rlist.Add(item.PK);
  198. }
  199. }
  200. if (rlist.Count > 0)
  201. {
  202. int pg = rlist.Count % 10000 == 0 ? rlist.Count / 10000 : rlist.Count / 10000 + 1;
  203. for (int i = 0; i < pg; i++)
  204. {
  205. var listint1 = rlist.Skip(i * 10000).Take(10000).ToList();
  206. services.Delete<F_Games>(" and PK in (" + string.Join(",", listint1) + ")");
  207. }
  208. }
  209. return gamesList_new1;
  210. }
  211. catch (Exception e)
  212. {
  213. CommonHelper.LogBD(e.Message, logName);
  214. CommonHelper.LogBD(e.Source, logName);
  215. CommonHelper.LogBD(e.StackTrace, logName);
  216. return new List<F_Games>();
  217. }
  218. }
  219. public void DoMainUrl()
  220. {
  221. Group = services.Query<F_Grouping>().ToList();
  222. teamlist = services.Query<F_Team>().ToList();
  223. ThreadPool.SetMinThreads(1, 1);
  224. ThreadPool.SetMaxThreads(100, 100);
  225. GroupList = Group.Where(a => a.Remark.Contains("cup") && !a.Remark.Contains("/cup/41/")).ToList();
  226. //比赛杯
  227. GroupList.ForEach(p =>
  228. {
  229. Task.Run(() =>
  230. {
  231. Trace.WriteLine("获取比赛杯 开始:" + GroupList.IndexOf(p));
  232. GetCupData(p.Remark, p.Name.Trim(), p.Id);
  233. });
  234. });
  235. while (true)
  236. {
  237. if (CommonHelper.ThreadsFinsh())
  238. break;
  239. }
  240. Trace.WriteLine("获取比赛杯 完结");
  241. //球队联谊
  242. var q = Group.Where(a => a.Remark.Contains("cup") && a.Remark.Contains("/cup/41/")).ToList();
  243. List<string> ulist = new List<string>();
  244. foreach (var item in q)
  245. {
  246. ulist.Add(item.Remark);
  247. }
  248. ulist = ulist.Distinct().ToList();
  249. foreach (var item in ulist)
  250. {
  251. GetCupData_yy(item, q);
  252. }
  253. //国家比赛
  254. GroupList1 = Group.Where(a => a.Remark.Contains("league") && a.Name != "常规赛").ToList();
  255. GroupList1.ForEach(p =>
  256. {
  257. Task.Run(() =>
  258. {
  259. Trace.WriteLine("获取比赛 开始:" + GroupList1.IndexOf(p));
  260. GetLeagueData(p.Remark, p.Name.Trim(), p.Id);
  261. });
  262. });
  263. while (true)
  264. {
  265. if (CommonHelper.ThreadsFinsh())
  266. break;
  267. }
  268. //检查缺漏
  269. List<string> new_urllist = new List<string>();
  270. new_urllist = urllist;
  271. urllist = new List<string>();
  272. foreach (var item in new_urllist)
  273. {
  274. var query = item.Split('|');
  275. GetLeagueData(query[0], query[1], query[2]);
  276. }
  277. Trace.WriteLine("插入数据 开始:" + gamesList.Count);
  278. services.SqlBulkCopyAdd<F_Games>(gamesList);
  279. Trace.WriteLine("插入数据 结束:" + gamesList.Count);
  280. }
  281. /// <summary>
  282. /// 某某杯
  283. /// </summary>
  284. /// <param name="url"></param>
  285. public void GetCupData(string url, string currentRound, string Id)
  286. {
  287. try
  288. {
  289. List<F_Games> game_newList = new List<F_Games>();
  290. Trace.WriteLine("某某杯 开始:" + url);
  291. string yurl = url;
  292. url = url.Replace(":80", "");
  293. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  294. HtmlDocument doc = new HtmlDocument();
  295. if (htmlResource == null)
  296. return;
  297. doc.LoadHtml(htmlResource);
  298. //比赛分组集合
  299. HtmlNodeCollection GamegroupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9']/li");
  300. foreach (var item in GamegroupHtml.Where(a => a.InnerText.Trim() == currentRound))
  301. {//获取父下所有子分组+比赛
  302. string shuju1 = "";
  303. if (GroupParent.Where(a => a.ParentId == Id).ToList().Count > 0)
  304. {//有子集比赛集合
  305. HtmlNodeCollection groupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  306. if (groupHtml == null)
  307. return;
  308. HtmlDocument doc_1 = new HtmlDocument();
  309. doc_1.LoadHtml(groupHtml[0].OuterHtml);
  310. HtmlNodeCollection groupHtmlnew = doc_1.DocumentNode.SelectNodes("//li");
  311. foreach (var item1 in groupHtmlnew)
  312. {
  313. var zj = GroupParent.Where(a => a.ParentId == Id && a.Name == item1.InnerText.Trim()).ToList();
  314. if(zj.Count==0)
  315. continue;
  316. //获取所有子集
  317. HtmlNodeCollection itemlist_1 = doc_1.DocumentNode.SelectNodes("//*[@id='div_" + item1.Id + "']/table");
  318. if (itemlist_1 == null)
  319. return;
  320. HtmlDocument doc2 = new HtmlDocument();
  321. doc2.LoadHtml(itemlist_1[0].OuterHtml);
  322. HtmlNodeCollection itemlist = doc2.DocumentNode.SelectNodes("//tr");
  323. foreach (HtmlNode node in itemlist)
  324. {
  325. var list = node.SelectNodes("td");
  326. if (list == null)
  327. continue;
  328. string shuju = shuju1;
  329. foreach (var item3 in list)
  330. {
  331. shuju += item3.InnerText.Trim() + "|";
  332. }
  333. //gamelist.Add(shuju);
  334. var listurl = url.Split('/');
  335. string season = listurl[6];
  336. HtmlDocument doc3 = new HtmlDocument();
  337. doc3.LoadHtml(list.Last().InnerHtml);
  338. HtmlNodeCollection itemlist2 = doc3.DocumentNode.SelectNodes("//a");
  339. var q_new=Insert_new(shuju, zj[0].Id, season, itemlist2[0].Attributes["href"].Value);
  340. if(q_new!=null)
  341. game_newList.Add(q_new);
  342. }
  343. }
  344. }
  345. else {
  346. //比赛集合
  347. HtmlNodeCollection GameHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  348. foreach (var item1 in GameHtml)
  349. {
  350. HtmlDocument doc1 = new HtmlDocument();
  351. doc1.LoadHtml(item1.OuterHtml);
  352. HtmlNodeCollection itemlist = doc1.DocumentNode.SelectNodes("//table").Last().SelectNodes("//tr");
  353. foreach (HtmlNode node in itemlist)
  354. {
  355. var list = node.SelectNodes("td");
  356. if (list == null)
  357. continue;
  358. string shuju = shuju1;
  359. foreach (var item3 in list)
  360. {
  361. shuju += item3.InnerText.Trim() + "|";
  362. }
  363. //gamelist.Add(shuju);
  364. var listurl = url.Split('/');
  365. string season = listurl[6];
  366. HtmlDocument doc2 = new HtmlDocument();
  367. doc2.LoadHtml(list.Last().InnerHtml);
  368. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  369. var q_new = Insert_new(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  370. if (q_new != null)
  371. game_newList.Add(q_new);
  372. }
  373. }
  374. }
  375. }
  376. if(game_newList.Count>0)
  377. gamesList.AddRange(game_newList);
  378. }
  379. catch (Exception e)
  380. {
  381. // Trace.WriteLine("某某杯 发生异常:" + url);
  382. }
  383. }
  384. public void GetClick(string url, string currentRound, string Id)
  385. {
  386. if (url.Contains("cup"))
  387. {
  388. GetCupData(url, currentRound, Id);
  389. }
  390. else
  391. {
  392. GetLeagueData(url, currentRound, Id);
  393. }
  394. }
  395. /// <summary>
  396. /// 某某杯 友谊
  397. /// </summary>
  398. /// <param name="url"></param>
  399. public void GetCupData_yy(string url, List<F_Grouping> glist)
  400. {
  401. string currentRound, Id;
  402. try
  403. {
  404. Trace.WriteLine("某某杯 开始:" + url);
  405. url = url.Replace(":80", "");
  406. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  407. HtmlDocument doc = new HtmlDocument();
  408. if (htmlResource == null)
  409. return;
  410. doc.LoadHtml(htmlResource);
  411. //比赛分组集合
  412. HtmlNodeCollection GamegroupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9']/li");
  413. foreach (var item in GamegroupHtml)
  414. {
  415. string shuju1 = "";
  416. //比赛集合
  417. HtmlNodeCollection GameHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  418. foreach (var item1 in GameHtml)
  419. {
  420. HtmlDocument doc1 = new HtmlDocument();
  421. doc1.LoadHtml(item1.OuterHtml);
  422. HtmlNodeCollection itemlist = doc1.DocumentNode.SelectNodes("//table").Last().SelectNodes("//tr");
  423. foreach (HtmlNode node in itemlist)
  424. {
  425. var list = node.SelectNodes("td");
  426. if (list == null)
  427. continue;
  428. string shuju = shuju1;
  429. foreach (var item3 in list)
  430. {
  431. shuju += item3.InnerText.Trim() + "|";
  432. }
  433. //gamelist.Add(shuju);
  434. var listurl = url.Split('/');
  435. string season = listurl[6];
  436. HtmlDocument doc2 = new HtmlDocument();
  437. doc2.LoadHtml(list.Last().InnerHtml);
  438. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  439. var sss = glist.Where(a => a.Name.Trim() == item.InnerText.Trim() && a.Remark.Replace(":80", "") == url).FirstOrDefault();
  440. Id = glist.Where(a => a.Name.Trim() == item.InnerText.Trim() && a.Remark.Replace(":80", "") == url).FirstOrDefault() == null ? "" : glist.Where(a => a.Name.Trim() == item.InnerText.Trim() && a.Remark.Replace(":80", "") == url).FirstOrDefault().Id;
  441. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  442. }
  443. }
  444. }
  445. }
  446. catch (Exception e)
  447. {
  448. Trace.WriteLine("某某杯 发生异常:" + url);
  449. }
  450. }
  451. /// <summary>
  452. /// 国家赛事
  453. /// </summary>
  454. /// <param name="url"></param>
  455. public void GetLeagueData(string url, string currentRound, string Id)
  456. {
  457. string msg = "";
  458. try
  459. {
  460. Trace.WriteLine("国家赛事 开始:" + url);
  461. List<F_Games> game_newList = new List<F_Games>();
  462. url = url.Replace(":80", "");
  463. int Round = -1;
  464. try
  465. {
  466. Round = Convert.ToInt32(currentRound);
  467. }
  468. catch (Exception e)
  469. {
  470. Round = -1;
  471. }
  472. if (Round != -1)
  473. {
  474. var listurl = url.Split('/');
  475. string source_league_id = listurl[5];
  476. string season = listurl[6];
  477. var html = CommonHelper.GetPostHtmlString(url, new HttpItem
  478. {
  479. Url = "http://saishi.zgzcw.com/summary/liansaiAjax.action",
  480. Method = "Post",
  481. WebProxy = new WebProxy(CommonHelper.GetIp()),
  482. FormData = new Dictionary<string, string>()
  483. {
  484. { "source_league_id" , source_league_id },
  485. { "currentRound",currentRound},
  486. { "season",season},
  487. { "seasonType",""},
  488. },
  489. ContentType = "application/x-www-form-urlencoded",
  490. });
  491. //常规赛
  492. msg = html.Html;
  493. HtmlDocument doc = new HtmlDocument();
  494. if (html.Html == null)
  495. return;
  496. doc.LoadHtml(html.Html);
  497. //比赛集合
  498. HtmlNodeCollection itemlist = doc.DocumentNode.SelectNodes("//table/tr");
  499. foreach (HtmlNode node in itemlist)
  500. {
  501. var list = node.SelectNodes("td");
  502. string shuju = "";
  503. foreach (var item3 in list)
  504. {
  505. shuju += item3.InnerText.Trim() + "|";
  506. }
  507. //gamelist.Add(shuju);
  508. HtmlDocument doc2 = new HtmlDocument();
  509. doc2.LoadHtml(list.Last().InnerHtml);
  510. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  511. var q_new = Insert_new(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  512. if (q_new != null)
  513. game_newList.Add(q_new);
  514. }
  515. }
  516. else
  517. {
  518. var listurl = url.Split('/');
  519. string source_league_id = listurl[5];
  520. string season = listurl[6];
  521. var html = CommonHelper.GetPostHtmlString(url, new HttpItem
  522. {
  523. Url = "http://saishi.zgzcw.com/summary/liansaifjAction.action",
  524. Method = "Post",
  525. WebProxy = new WebProxy(CommonHelper.GetIp()),
  526. FormData = new Dictionary<string, string>()
  527. {
  528. { "source_league_id" , source_league_id},
  529. { "hostTeamId","0"},
  530. { "guestTeamId","0"},
  531. { "season",season},
  532. { "seasonType","1"},
  533. },
  534. ContentType = "application/x-www-form-urlencoded",
  535. });
  536. msg = html.Html;
  537. HtmlDocument doc = new HtmlDocument();
  538. if (html.Html == null)
  539. return;
  540. doc.LoadHtml(html.Html);
  541. //附加比赛集合
  542. HtmlNodeCollection itemlist = doc.DocumentNode.SelectNodes("//*[@id ='fjtab']/tr");
  543. if (itemlist == null)
  544. {
  545. Trace.WriteLine("附加赛没有数据" + url);
  546. return;
  547. }
  548. foreach (HtmlNode node1 in itemlist)
  549. {
  550. var list1 = node1.SelectNodes("td");
  551. string shuju = "";
  552. foreach (var item3 in list1)
  553. {
  554. shuju += item3.InnerText.Trim() + "|";
  555. }
  556. // gamelist.Add(shuju);
  557. HtmlDocument doc2 = new HtmlDocument();
  558. doc2.LoadHtml(list1.Last().InnerHtml);
  559. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  560. var q_new = Insert_new(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  561. if (q_new != null)
  562. game_newList.Add(q_new);
  563. }
  564. }
  565. if (game_newList.Count > 0)
  566. gamesList.AddRange(game_newList);
  567. }
  568. catch (Exception e)
  569. {
  570. urllist.Add(url + "|" + currentRound + "|" + Id);
  571. // Trace.WriteLine("某某杯 发生异常:" + url + "_:" + currentRound + ":_" + "__" + msg);
  572. }
  573. }
  574. /// <summary>
  575. /// 插入数据
  576. /// </summary>
  577. /// <param name="data"></param>
  578. /// <param name="Id"></param>
  579. /// <param name="Season"></param>
  580. public void Insert(string data, string Id, string Season, string url)
  581. {
  582. lock (gamesList)
  583. {
  584. var query = data.Split('|');
  585. F_Games game = new F_Games();
  586. game.Id = CommonHelper.GetGuid().ToString();
  587. game.CreateDateTime = DateTime.Now;
  588. game.EventId = Group.Where(a => a.Id == Id).FirstOrDefault().EventId;
  589. game.EventType = Group.Where(a => a.Id == Id).FirstOrDefault().EventType;
  590. game.Heat = 0;
  591. var team = teamlist.Where(a => a.Name == query[1]).FirstOrDefault();
  592. if (team == null)
  593. return;
  594. game.HomeTeamId = team == null ? "" : team.Id;
  595. game.HomeTeamScore_All = query[2].Split(':')[0].TryToInt32();
  596. game.HomeTeamScore_Half = query[4].Split(':')[0].TryToInt32();
  597. game.IsOvertime = false;
  598. game.Remark = url;
  599. game.Season = Season;
  600. game.StartDateTime = Convert.ToDateTime(query[0]);
  601. game.Status = query[4] == "-:-" ? g1 : query[2] == "-:-" ? g2 : g3;
  602. team = teamlist.Where(a => a.Name == query[3]).FirstOrDefault();
  603. if (team == null)
  604. return;
  605. game.VisitingTeamId = team.Id;
  606. game.VisitingTeamScore_All = query[2].Split(':')[1].TryToInt32();
  607. game.VisitingTeamScore_Half = query[4].Split(':')[1].TryToInt32();
  608. game.GroupingId = Id;
  609. game.IsObtain = false;
  610. gamesList.Add(game);
  611. }
  612. }
  613. /// <summary>
  614. /// 插入数据
  615. /// </summary>
  616. /// <param name="data"></param>
  617. /// <param name="Id"></param>
  618. /// <param name="Season"></param>
  619. public F_Games Insert_new(string data, string Id, string Season, string url)
  620. {
  621. lock (gamesList)
  622. {
  623. var query = data.Split('|');
  624. F_Games game = new F_Games();
  625. game.Id = CommonHelper.GetGuid().ToString();
  626. game.CreateDateTime = DateTime.Now;
  627. game.EventId = Group.Where(a => a.Id == Id).FirstOrDefault().EventId;
  628. game.EventType = Group.Where(a => a.Id == Id).FirstOrDefault().EventType;
  629. game.Heat = 0;
  630. var team = teamlist.Where(a => a.Name == query[1]).FirstOrDefault();
  631. if (team == null)
  632. return new F_Games();
  633. game.HomeTeamId = team == null ? "" : team.Id;
  634. game.HomeTeamScore_All = query[2].Split(':')[0].TryToInt32();
  635. game.HomeTeamScore_Half = query[4].Split(':')[0].TryToInt32();
  636. game.IsOvertime = false;
  637. game.Remark = url;
  638. game.Season = Season;
  639. game.StartDateTime = Convert.ToDateTime(query[0]);
  640. game.Status = query[4] == "-:-" ? g1 : query[2] == "-:-" ? g2 : g3;
  641. team = teamlist.Where(a => a.Name == query[3]).FirstOrDefault();
  642. if (team == null)
  643. return new F_Games();
  644. game.VisitingTeamId = team.Id;
  645. game.VisitingTeamScore_All = query[2].Split(':')[1].TryToInt32();
  646. game.VisitingTeamScore_Half = query[4].Split(':')[1].TryToInt32();
  647. game.GroupingId = Id;
  648. game.IsObtain = false;
  649. // gamesList.Add(game);
  650. return game;
  651. }
  652. }
  653. private string g1 = "d0da55f0c86ae811ab3100ac6a4a134f", g2 = "907dbd11c96ae811ab3100ac6a4a134f", g3 = "a058ec2ec96ae811ab3100ac6a4a134f";
  654. }
  655. }