GamesJob.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  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. log = new LogHelper();
  21. services = IOC.Resolve<IDTOpenCode>();
  22. g = new F_Grouping();
  23. }
  24. public void Execute(IJobExecutionContext context)
  25. {
  26. //Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  27. // Click();
  28. }
  29. public static List<string> gamelist = new List<string>();
  30. public static List<string> urllist = new List<string>();
  31. public static List<string> urllist2 = new List<string>();
  32. public static List<F_Grouping> Group = new List<F_Grouping>();
  33. public static List<F_Grouping> Group1 = new List<F_Grouping>();
  34. public static List<F_Grouping> GroupParent = new List<F_Grouping>();
  35. public static List<F_Team> teamlist = new List<F_Team>();
  36. public static List<F_Grouping> GroupList = null;
  37. public static List<F_Grouping> GroupList1 = null;
  38. public static List<F_Games> Gamelist = null;
  39. public static List<F_Games> gamesList = new List<F_Games>();
  40. public static List<F_Games> gamesList_new = new List<F_Games>();
  41. public static List<F_Games> gamesList_new1 = new List<F_Games>();
  42. public static List<F_Games> gamesList_new2 = new List<F_Games>();
  43. public static List<int> listint = new List<int>();//需要删除的比赛PK
  44. F_Grouping g;
  45. public List<F_Games> Click()
  46. {
  47. string Season = DateTime.Now.ToString("yyyy");
  48. Group = services.Query<F_Grouping>().ToList();
  49. 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();
  50. 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());
  51. Gamelist = services.Query<F_Games>(" AND Season LIKE '%{0}%'".FormatMe(Season)).ToList();
  52. teamlist = services.Query<F_Team>().ToList();
  53. GroupList = Group1.Where(a => !a.Remark.Contains("/cup/41/")&&((a.ParentId.Length == 0 && a.Remark.Contains("/cup/")) || a.Remark.Contains("/league/"))).ToList();
  54. GroupParent = services.Query<F_Grouping>("and ParentId!=''").ToList();
  55. //GetClick("http://saishi.zgzcw.com:80/soccer/cup/59/2018-2019/", "第一圈", "ed091448f5c2e8118a7b2c4d54d3f5a9");
  56. int max = GroupList.Count;
  57. int num = 0;
  58. //比赛
  59. GroupList.ForEach(async p =>
  60. {
  61. await Task.Run(() =>
  62. {
  63. Trace.WriteLine("获取比赛 开始:" + GroupList.IndexOf(p));
  64. GetClick(p.Remark, p.Name.Trim(), p.Id);
  65. });
  66. lock (g)
  67. {
  68. num++;
  69. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  70. }
  71. });
  72. lock (g)
  73. {
  74. while (num < max)
  75. {
  76. Monitor.Wait(g);//等待
  77. }
  78. }
  79. Trace.WriteLine("获取比赛 完结");
  80. //球队联谊
  81. var q = Group.Where(a => a.Remark.Contains("/cup/41/") && a.Season.Contains(Season)).ToList();
  82. List<string> ulist = new List<string>();
  83. foreach (var item in q)
  84. {
  85. ulist.Add(item.Remark);
  86. }
  87. ulist = ulist.Distinct().ToList();
  88. foreach (var item in ulist)
  89. {
  90. GetCupData_yy(item, q);
  91. }
  92. ////检查缺漏
  93. List<string> new_urllist = new List<string>();
  94. new_urllist = urllist;
  95. max = new_urllist.Count;
  96. num = 0;
  97. urllist = new List<string>();
  98. new_urllist.ForEach(async p =>
  99. {
  100. await Task.Run(() =>
  101. {
  102. Trace.WriteLine("获取比赛 缺漏 开始:" + new_urllist.IndexOf(p));
  103. var query = p.Split('|');
  104. GetLeagueData(query[0], query[1], query[2]);
  105. });
  106. lock (g)
  107. {
  108. num++;
  109. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  110. }
  111. });
  112. lock (g)
  113. {
  114. while (num != max)
  115. {
  116. Monitor.Wait(g);//等待
  117. }
  118. }
  119. // Gamelist= Gamelist.Where((x, i) => Gamelist.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表达式去重
  120. 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表达式去重
  121. max = gamesList.Count;
  122. num = 0;
  123. int sss = 0;
  124. //比较比赛
  125. gamesList.ForEach(async p =>
  126. {
  127. await Task.Run(() =>
  128. {
  129. var istrue = Gamelist.Where(a => a.Season == p.Season && a.GroupingId == p.GroupingId && a.HomeTeamId == p.HomeTeamId && a.VisitingTeamId == p.VisitingTeamId && a.EventId == p.EventId&&a.StartDateTime==p.StartDateTime).ToList();
  130. //if(Gamelist.Where(a=>a.HomeTeamId== "ff8d81fa-3444-4e5d-955c-79049a722daa"&&a.VisitingTeamId== "5629c466-a3e4-4a1a-9826-0a5c86244f08"&&a.CreateDateTime>))
  131. if (istrue.Count > 0)
  132. {//已有比赛 判断是否需要更新数据
  133. var onegame = istrue.FirstOrDefault();
  134. if (onegame.HomeTeamScore_All != p.HomeTeamScore_All || onegame.HomeTeamScore_Half != p.HomeTeamScore_Half || onegame.VisitingTeamScore_All != p.VisitingTeamScore_All|| onegame.VisitingTeamScore_Half != p.VisitingTeamScore_Half || onegame.Status != "a058ec2ec96ae811ab3100ac6a4a134f")
  135. {
  136. lock (gamesList_new)
  137. {
  138. p.Id = onegame.Id;
  139. gamesList_new.Add(p);
  140. gamesList_new2.Add(p);
  141. }
  142. foreach (var item in istrue)
  143. {
  144. lock (listint)
  145. {
  146. listint.Add(item.PK);
  147. }
  148. }
  149. }
  150. else
  151. {
  152. //数据不做修改
  153. }
  154. }
  155. else
  156. {//没有次比赛 新增
  157. lock (gamesList_new)
  158. {
  159. gamesList_new.Add(p);
  160. }
  161. }
  162. });
  163. lock (locker)
  164. {
  165. num++;
  166. Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
  167. }
  168. });
  169. lock (locker)
  170. {
  171. while (num < max)
  172. {
  173. Monitor.Wait(locker);//等待
  174. }
  175. }
  176. Thread.Sleep(5000);
  177. var gamesList_new1 = gamesList_new.Where(a => a.StartDateTime < DateTime.Now.AddDays(5)).ToList();
  178. 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表达式去重
  179. //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();
  180. Trace.WriteLine("插入数据 开始:" + salist1.Count);
  181. services.SqlBulkCopyAdd<F_Games>(salist1);
  182. Trace.WriteLine("插入数据 结束:" + salist1.Count);
  183. Trace.WriteLine("删除数据 开始:" + listint.Count);
  184. if (listint.Count > 0)
  185. {
  186. int pg = listint.Count % 10000 == 0 ? listint.Count / 10000 : listint.Count / 10000 + 1;
  187. for (int i = 0; i < pg; i++)
  188. {
  189. var listint1 = listint.Skip(i * 10000).Take(10000).ToList();
  190. services.Delete<F_Games>(" and PK in (" + string.Join(",", listint1) + ")");
  191. }
  192. }
  193. Trace.WriteLine("删除数据 结束:" + listint.Count);
  194. List<int> rlist = new List<int>();
  195. 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();
  196. var q1 = querygame.Where((x, i) => querygame.FindIndex(z => z.Id == x.Id) == i).ToList();//Lambda表达式去重
  197. foreach (var item in querygame)
  198. {
  199. if (q1.Where(a => a.PK == item.PK).ToList().Count > 0)
  200. {
  201. continue;
  202. }
  203. else
  204. {
  205. rlist.Add(item.PK);
  206. }
  207. }
  208. if (rlist.Count > 0)
  209. {
  210. int pg = rlist.Count % 10000 == 0 ? rlist.Count / 10000 : rlist.Count / 10000 + 1;
  211. for (int i = 0; i < pg; i++)
  212. {
  213. var listint1 = rlist.Skip(i * 10000).Take(10000).ToList();
  214. services.Delete<F_Games>(" and PK in (" + string.Join(",", listint1) + ")");
  215. }
  216. }
  217. return gamesList_new1;
  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. Trace.WriteLine("某某杯 开始:" + url);
  290. string yurl = url;
  291. url = url.Replace(":80", "");
  292. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  293. HtmlDocument doc = new HtmlDocument();
  294. if (htmlResource == null)
  295. return;
  296. doc.LoadHtml(htmlResource);
  297. //比赛分组集合
  298. HtmlNodeCollection GamegroupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9']/li");
  299. foreach (var item in GamegroupHtml.Where(a => a.InnerText.Trim() == currentRound))
  300. {//获取父下所有子分组+比赛
  301. string shuju1 = "";
  302. if (GroupParent.Where(a => a.ParentId == Id).ToList().Count > 0)
  303. {//有子集比赛集合
  304. HtmlNodeCollection groupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  305. if (groupHtml == null)
  306. return;
  307. HtmlDocument doc_1 = new HtmlDocument();
  308. doc_1.LoadHtml(groupHtml[0].OuterHtml);
  309. HtmlNodeCollection groupHtmlnew = doc_1.DocumentNode.SelectNodes("//li");
  310. foreach (var item1 in groupHtmlnew)
  311. {
  312. var zj = GroupParent.Where(a => a.ParentId == Id && a.Name == item1.InnerText.Trim()).ToList();
  313. if(zj.Count==0)
  314. continue;
  315. //获取所有子集
  316. HtmlNodeCollection itemlist_1 = doc_1.DocumentNode.SelectNodes("//*[@id='div_" + item1.Id + "']/table");
  317. if (itemlist_1 == null)
  318. return;
  319. HtmlDocument doc2 = new HtmlDocument();
  320. doc2.LoadHtml(itemlist_1[0].OuterHtml);
  321. HtmlNodeCollection itemlist = doc2.DocumentNode.SelectNodes("//tr");
  322. foreach (HtmlNode node in itemlist)
  323. {
  324. var list = node.SelectNodes("td");
  325. if (list == null)
  326. continue;
  327. string shuju = shuju1;
  328. foreach (var item3 in list)
  329. {
  330. shuju += item3.InnerText.Trim() + "|";
  331. }
  332. //gamelist.Add(shuju);
  333. var listurl = url.Split('/');
  334. string season = listurl[6];
  335. HtmlDocument doc3 = new HtmlDocument();
  336. doc3.LoadHtml(list.Last().InnerHtml);
  337. HtmlNodeCollection itemlist2 = doc3.DocumentNode.SelectNodes("//a");
  338. Insert(shuju, zj[0].Id, season, itemlist2[0].Attributes["href"].Value);
  339. }
  340. }
  341. }
  342. else {
  343. //比赛集合
  344. HtmlNodeCollection GameHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  345. foreach (var item1 in GameHtml)
  346. {
  347. HtmlDocument doc1 = new HtmlDocument();
  348. doc1.LoadHtml(item1.OuterHtml);
  349. HtmlNodeCollection itemlist = doc1.DocumentNode.SelectNodes("//table").Last().SelectNodes("//tr");
  350. foreach (HtmlNode node in itemlist)
  351. {
  352. var list = node.SelectNodes("td");
  353. if (list == null)
  354. continue;
  355. string shuju = shuju1;
  356. foreach (var item3 in list)
  357. {
  358. shuju += item3.InnerText.Trim() + "|";
  359. }
  360. //gamelist.Add(shuju);
  361. var listurl = url.Split('/');
  362. string season = listurl[6];
  363. HtmlDocument doc2 = new HtmlDocument();
  364. doc2.LoadHtml(list.Last().InnerHtml);
  365. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  366. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  367. }
  368. }
  369. }
  370. }
  371. }
  372. catch (Exception e)
  373. {
  374. Trace.WriteLine("某某杯 发生异常:" + url);
  375. }
  376. }
  377. public void GetClick(string url, string currentRound, string Id)
  378. {
  379. if (url.Contains("cup"))
  380. {
  381. GetCupData(url, currentRound, Id);
  382. }
  383. else
  384. {
  385. GetLeagueData(url, currentRound, Id);
  386. }
  387. }
  388. /// <summary>
  389. /// 某某杯 友谊
  390. /// </summary>
  391. /// <param name="url"></param>
  392. public void GetCupData_yy(string url, List<F_Grouping> glist)
  393. {
  394. string currentRound, Id;
  395. try
  396. {
  397. Trace.WriteLine("某某杯 开始:" + url);
  398. url = url.Replace(":80", "");
  399. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  400. HtmlDocument doc = new HtmlDocument();
  401. if (htmlResource == null)
  402. return;
  403. doc.LoadHtml(htmlResource);
  404. //比赛分组集合
  405. HtmlNodeCollection GamegroupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9']/li");
  406. foreach (var item in GamegroupHtml)
  407. {
  408. string shuju1 = "";
  409. //比赛集合
  410. HtmlNodeCollection GameHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  411. foreach (var item1 in GameHtml)
  412. {
  413. HtmlDocument doc1 = new HtmlDocument();
  414. doc1.LoadHtml(item1.OuterHtml);
  415. HtmlNodeCollection itemlist = doc1.DocumentNode.SelectNodes("//table").Last().SelectNodes("//tr");
  416. foreach (HtmlNode node in itemlist)
  417. {
  418. var list = node.SelectNodes("td");
  419. if (list == null)
  420. continue;
  421. string shuju = shuju1;
  422. foreach (var item3 in list)
  423. {
  424. shuju += item3.InnerText.Trim() + "|";
  425. }
  426. //gamelist.Add(shuju);
  427. var listurl = url.Split('/');
  428. string season = listurl[6];
  429. HtmlDocument doc2 = new HtmlDocument();
  430. doc2.LoadHtml(list.Last().InnerHtml);
  431. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  432. var sss = glist.Where(a => a.Name.Trim() == item.InnerText.Trim() && a.Remark.Replace(":80", "") == url).FirstOrDefault();
  433. 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;
  434. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  435. }
  436. }
  437. }
  438. }
  439. catch (Exception e)
  440. {
  441. Trace.WriteLine("某某杯 发生异常:" + url);
  442. }
  443. }
  444. /// <summary>
  445. /// 国家赛事
  446. /// </summary>
  447. /// <param name="url"></param>
  448. public void GetLeagueData(string url, string currentRound, string Id)
  449. {
  450. string msg = "";
  451. try
  452. {
  453. Trace.WriteLine("国家赛事 开始:" + url);
  454. url = url.Replace(":80", "");
  455. int Round = -1;
  456. try
  457. {
  458. Round = Convert.ToInt32(currentRound);
  459. }
  460. catch (Exception e)
  461. {
  462. Round = -1;
  463. }
  464. if (Round != -1)
  465. {
  466. var listurl = url.Split('/');
  467. string source_league_id = listurl[5];
  468. string season = listurl[6];
  469. var html = CommonHelper.GetPostHtmlString(url, new HttpItem
  470. {
  471. Url = "http://saishi.zgzcw.com/summary/liansaiAjax.action",
  472. Method = "Post",
  473. WebProxy = new WebProxy(CommonHelper.GetIp()),
  474. FormData = new Dictionary<string, string>()
  475. {
  476. { "source_league_id" , source_league_id },
  477. { "currentRound",currentRound},
  478. { "season",season},
  479. { "seasonType",""},
  480. },
  481. ContentType = "application/x-www-form-urlencoded",
  482. });
  483. //常规赛
  484. msg = html.Html;
  485. HtmlDocument doc = new HtmlDocument();
  486. if (html.Html == null)
  487. return;
  488. doc.LoadHtml(html.Html);
  489. //比赛集合
  490. HtmlNodeCollection itemlist = doc.DocumentNode.SelectNodes("//table/tr");
  491. foreach (HtmlNode node in itemlist)
  492. {
  493. var list = node.SelectNodes("td");
  494. string shuju = "";
  495. foreach (var item3 in list)
  496. {
  497. shuju += item3.InnerText.Trim() + "|";
  498. }
  499. //gamelist.Add(shuju);
  500. HtmlDocument doc2 = new HtmlDocument();
  501. doc2.LoadHtml(list.Last().InnerHtml);
  502. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  503. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  504. }
  505. }
  506. else
  507. {
  508. var listurl = url.Split('/');
  509. string source_league_id = listurl[5];
  510. string season = listurl[6];
  511. var html = CommonHelper.GetPostHtmlString(url, new HttpItem
  512. {
  513. Url = "http://saishi.zgzcw.com/summary/liansaifjAction.action",
  514. Method = "Post",
  515. WebProxy = new WebProxy(CommonHelper.GetIp()),
  516. FormData = new Dictionary<string, string>()
  517. {
  518. { "source_league_id" , source_league_id},
  519. { "hostTeamId","0"},
  520. { "guestTeamId","0"},
  521. { "season",season},
  522. { "seasonType","1"},
  523. },
  524. ContentType = "application/x-www-form-urlencoded",
  525. });
  526. msg = html.Html;
  527. HtmlDocument doc = new HtmlDocument();
  528. if (html.Html == null)
  529. return;
  530. doc.LoadHtml(html.Html);
  531. //附加比赛集合
  532. HtmlNodeCollection itemlist = doc.DocumentNode.SelectNodes("//*[@id ='fjtab']/tr");
  533. if (itemlist == null)
  534. {
  535. Trace.WriteLine("附加赛没有数据" + url);
  536. return;
  537. }
  538. foreach (HtmlNode node1 in itemlist)
  539. {
  540. var list1 = node1.SelectNodes("td");
  541. string shuju = "";
  542. foreach (var item3 in list1)
  543. {
  544. shuju += item3.InnerText.Trim() + "|";
  545. }
  546. // gamelist.Add(shuju);
  547. HtmlDocument doc2 = new HtmlDocument();
  548. doc2.LoadHtml(list1.Last().InnerHtml);
  549. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  550. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  551. }
  552. }
  553. }
  554. catch (Exception e)
  555. {
  556. urllist.Add(url + "|" + currentRound + "|" + Id);
  557. Trace.WriteLine("某某杯 发生异常:" + url + "_:" + currentRound + ":_" + "__" + msg);
  558. }
  559. }
  560. /// <summary>
  561. /// 插入数据
  562. /// </summary>
  563. /// <param name="data"></param>
  564. /// <param name="Id"></param>
  565. /// <param name="Season"></param>
  566. public void Insert(string data, string Id, string Season, string url)
  567. {
  568. var query = data.Split('|');
  569. F_Games game = new F_Games();
  570. game.Id = CommonHelper.GetGuid().ToString();
  571. game.CreateDateTime = DateTime.Now;
  572. game.EventId = Group.Where(a => a.Id == Id).FirstOrDefault().EventId;
  573. game.EventType = Group.Where(a => a.Id == Id).FirstOrDefault().EventType;
  574. game.Heat = 0;
  575. var team = teamlist.Where(a => a.Name == query[1]).FirstOrDefault();
  576. if (team == null)
  577. return;
  578. game.HomeTeamId = team == null ? "" : team.Id;
  579. game.HomeTeamScore_All = query[2].Split(':')[0].TryToInt32();
  580. game.HomeTeamScore_Half = query[4].Split(':')[0].TryToInt32();
  581. game.IsOvertime = false;
  582. game.Remark = url;
  583. game.Season = Season;
  584. game.StartDateTime = Convert.ToDateTime(query[0]);
  585. game.Status = query[4] == "-:-" ? g1 : query[2] == "-:-" ? g2 : g3;
  586. team = teamlist.Where(a => a.Name == query[3]).FirstOrDefault();
  587. if (team == null)
  588. return;
  589. game.VisitingTeamId = team.Id;
  590. game.VisitingTeamScore_All = query[2].Split(':')[1].TryToInt32();
  591. game.VisitingTeamScore_Half = query[4].Split(':')[1].TryToInt32();
  592. game.GroupingId = Id;
  593. game.IsObtain = false;
  594. lock (gamesList)
  595. {
  596. gamesList.Add(game);
  597. }
  598. }
  599. private string g1 = "d0da55f0c86ae811ab3100ac6a4a134f", g2 = "907dbd11c96ae811ab3100ac6a4a134f", g3 = "a058ec2ec96ae811ab3100ac6a4a134f";
  600. }
  601. }