GamesJob.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705
  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/1183/2018/", "半准决赛", "55a70f4a1dcbe811894c2c4d54d3f5a9");
  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. //{
  122. // max = gamesList.Count;
  123. // num = 0;
  124. // int sss = 0;
  125. // //比较比赛
  126. // gamesList.ForEach(async p =>
  127. // {
  128. // await Task.Run(() =>
  129. // {
  130. // 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();
  131. // //if(Gamelist.Where(a=>a.HomeTeamId== "ff8d81fa-3444-4e5d-955c-79049a722daa"&&a.VisitingTeamId== "5629c466-a3e4-4a1a-9826-0a5c86244f08"&&a.CreateDateTime>))
  132. // if (istrue.Count > 0)
  133. // {//已有比赛 判断是否需要更新数据
  134. // var onegame = istrue.FirstOrDefault();
  135. // 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")
  136. // {
  137. // lock (gamesList_new)
  138. // {
  139. // p.Id = onegame.Id;
  140. // gamesList_new.Add(p);
  141. // gamesList_new2.Add(p);
  142. // }
  143. // foreach (var item in istrue)
  144. // {
  145. // lock (listint)
  146. // {
  147. // listint.Add(item.PK);
  148. // }
  149. // }
  150. // }
  151. // else
  152. // {
  153. // //数据不做修改
  154. // }
  155. // }
  156. // else
  157. // {//没有次比赛 新增
  158. // lock (gamesList_new)
  159. // {
  160. // gamesList_new.Add(p);
  161. // }
  162. // }
  163. // });
  164. // lock (locker)
  165. // {
  166. // num++;
  167. // Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
  168. // }
  169. // });
  170. // lock (locker)
  171. // {
  172. // while (num < max)
  173. // {
  174. // Monitor.Wait(locker);//等待
  175. // }
  176. // }
  177. //}
  178. var group = gamesList.GroupBy(a => a.GroupingId).Select(g => g.Last()).ToList();
  179. foreach (var item in group)
  180. {
  181. var new_group_game=gamesList.Where(a => a.GroupingId == item.GroupingId).ToList();
  182. var group_game = Gamelist.Where(a => a.GroupingId == item.GroupingId).ToList();
  183. if (new_group_game.Count >= group_game.Count)
  184. {
  185. foreach (var item1 in new_group_game)
  186. {
  187. 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)
  188. {
  189. case 0:
  190. gamesList_new.Add(item1);
  191. break;
  192. case 1:
  193. 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();
  194. var new_game = item1;
  195. new_game.Id = gamedetail.Id;
  196. gamesList_new.Add(new_game);
  197. listint.Add(gamedetail.PK);
  198. break;
  199. default:
  200. 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();
  201. var new_game1 = item1;
  202. new_game1.Id = gamedetail1.OrderByDescending(a=>a.CreateDateTime).FirstOrDefault().Id;
  203. gamesList_new.Add(new_game1);
  204. foreach (var item2 in gamedetail1)
  205. {
  206. listint.Add(item2.PK);
  207. }
  208. break;
  209. }
  210. }
  211. }
  212. else {
  213. gamesList_new.AddRange(new_group_game);
  214. }
  215. foreach (var item1 in group_game)
  216. {
  217. listint.Add(item.PK);
  218. }
  219. }
  220. Thread.Sleep(5000);
  221. var gamesList_new1 = gamesList_new.Where(a => a.StartDateTime < DateTime.Now.AddDays(5)).ToList();
  222. 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表达式去重
  223. //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();
  224. Trace.WriteLine("插入数据 开始:" + salist1.Count);
  225. services.SqlBulkCopyAdd<F_Games>(salist1);
  226. Trace.WriteLine("插入数据 结束:" + salist1.Count);
  227. Trace.WriteLine("删除数据 开始:" + listint.Count);
  228. if (listint.Count > 0)
  229. {
  230. int pg = listint.Count % 10000 == 0 ? listint.Count / 10000 : listint.Count / 10000 + 1;
  231. for (int i = 0; i < pg; i++)
  232. {
  233. var listint1 = listint.Skip(i * 10000).Take(10000).ToList();
  234. services.Delete<F_Games>(" and PK in (" + string.Join(",", listint1) + ")");
  235. }
  236. }
  237. Trace.WriteLine("删除数据 结束:" + listint.Count);
  238. List<int> rlist = new List<int>();
  239. 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();
  240. var q1 = querygame.Where((x, i) => querygame.FindIndex(z => z.Id == x.Id) == i).ToList();//Lambda表达式去重
  241. foreach (var item in querygame)
  242. {
  243. if (q1.Where(a => a.PK == item.PK).ToList().Count > 0)
  244. {
  245. continue;
  246. }
  247. else
  248. {
  249. rlist.Add(item.PK);
  250. }
  251. }
  252. if (rlist.Count > 0)
  253. {
  254. int pg = rlist.Count % 10000 == 0 ? rlist.Count / 10000 : rlist.Count / 10000 + 1;
  255. for (int i = 0; i < pg; i++)
  256. {
  257. var listint1 = rlist.Skip(i * 10000).Take(10000).ToList();
  258. services.Delete<F_Games>(" and PK in (" + string.Join(",", listint1) + ")");
  259. }
  260. }
  261. return gamesList_new1;
  262. }
  263. public void DoMainUrl()
  264. {
  265. Group = services.Query<F_Grouping>().ToList();
  266. teamlist = services.Query<F_Team>().ToList();
  267. ThreadPool.SetMinThreads(1, 1);
  268. ThreadPool.SetMaxThreads(100, 100);
  269. GroupList = Group.Where(a => a.Remark.Contains("cup") && !a.Remark.Contains("/cup/41/")).ToList();
  270. //比赛杯
  271. GroupList.ForEach(p =>
  272. {
  273. Task.Run(() =>
  274. {
  275. Trace.WriteLine("获取比赛杯 开始:" + GroupList.IndexOf(p));
  276. GetCupData(p.Remark, p.Name.Trim(), p.Id);
  277. });
  278. });
  279. while (true)
  280. {
  281. if (CommonHelper.ThreadsFinsh())
  282. break;
  283. }
  284. Trace.WriteLine("获取比赛杯 完结");
  285. //球队联谊
  286. var q = Group.Where(a => a.Remark.Contains("cup") && a.Remark.Contains("/cup/41/")).ToList();
  287. List<string> ulist = new List<string>();
  288. foreach (var item in q)
  289. {
  290. ulist.Add(item.Remark);
  291. }
  292. ulist = ulist.Distinct().ToList();
  293. foreach (var item in ulist)
  294. {
  295. GetCupData_yy(item, q);
  296. }
  297. //国家比赛
  298. GroupList1 = Group.Where(a => a.Remark.Contains("league") && a.Name != "常规赛").ToList();
  299. GroupList1.ForEach(p =>
  300. {
  301. Task.Run(() =>
  302. {
  303. Trace.WriteLine("获取比赛 开始:" + GroupList1.IndexOf(p));
  304. GetLeagueData(p.Remark, p.Name.Trim(), p.Id);
  305. });
  306. });
  307. while (true)
  308. {
  309. if (CommonHelper.ThreadsFinsh())
  310. break;
  311. }
  312. //检查缺漏
  313. List<string> new_urllist = new List<string>();
  314. new_urllist = urllist;
  315. urllist = new List<string>();
  316. foreach (var item in new_urllist)
  317. {
  318. var query = item.Split('|');
  319. GetLeagueData(query[0], query[1], query[2]);
  320. }
  321. Trace.WriteLine("插入数据 开始:" + gamesList.Count);
  322. services.SqlBulkCopyAdd<F_Games>(gamesList);
  323. Trace.WriteLine("插入数据 结束:" + gamesList.Count);
  324. }
  325. /// <summary>
  326. /// 某某杯
  327. /// </summary>
  328. /// <param name="url"></param>
  329. public void GetCupData(string url, string currentRound, string Id)
  330. {
  331. try
  332. {
  333. Trace.WriteLine("某某杯 开始:" + url);
  334. string yurl = url;
  335. url = url.Replace(":80", "");
  336. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  337. HtmlDocument doc = new HtmlDocument();
  338. if (htmlResource == null)
  339. return;
  340. doc.LoadHtml(htmlResource);
  341. //比赛分组集合
  342. HtmlNodeCollection GamegroupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9']/li");
  343. foreach (var item in GamegroupHtml.Where(a => a.InnerText.Trim() == currentRound))
  344. {//获取父下所有子分组+比赛
  345. string shuju1 = "";
  346. if (GroupParent.Where(a => a.ParentId == Id).ToList().Count > 0)
  347. {//有子集比赛集合
  348. HtmlNodeCollection groupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  349. if (groupHtml == null)
  350. return;
  351. HtmlDocument doc_1 = new HtmlDocument();
  352. doc_1.LoadHtml(groupHtml[0].OuterHtml);
  353. HtmlNodeCollection groupHtmlnew = doc_1.DocumentNode.SelectNodes("//li");
  354. foreach (var item1 in groupHtmlnew)
  355. {
  356. var zj = GroupParent.Where(a => a.ParentId == Id && a.Name == item1.InnerText.Trim()).ToList();
  357. if(zj.Count==0)
  358. continue;
  359. //获取所有子集
  360. HtmlNodeCollection itemlist_1 = doc_1.DocumentNode.SelectNodes("//*[@id='div_" + item1.Id + "']/table");
  361. if (itemlist_1 == null)
  362. return;
  363. HtmlDocument doc2 = new HtmlDocument();
  364. doc2.LoadHtml(itemlist_1[0].OuterHtml);
  365. HtmlNodeCollection itemlist = doc2.DocumentNode.SelectNodes("//tr");
  366. foreach (HtmlNode node in itemlist)
  367. {
  368. var list = node.SelectNodes("td");
  369. if (list == null)
  370. continue;
  371. string shuju = shuju1;
  372. foreach (var item3 in list)
  373. {
  374. shuju += item3.InnerText.Trim() + "|";
  375. }
  376. //gamelist.Add(shuju);
  377. var listurl = url.Split('/');
  378. string season = listurl[6];
  379. HtmlDocument doc3 = new HtmlDocument();
  380. doc3.LoadHtml(list.Last().InnerHtml);
  381. HtmlNodeCollection itemlist2 = doc3.DocumentNode.SelectNodes("//a");
  382. Insert(shuju, zj[0].Id, season, itemlist2[0].Attributes["href"].Value);
  383. }
  384. }
  385. }
  386. else {
  387. //比赛集合
  388. HtmlNodeCollection GameHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  389. foreach (var item1 in GameHtml)
  390. {
  391. HtmlDocument doc1 = new HtmlDocument();
  392. doc1.LoadHtml(item1.OuterHtml);
  393. HtmlNodeCollection itemlist = doc1.DocumentNode.SelectNodes("//table").Last().SelectNodes("//tr");
  394. foreach (HtmlNode node in itemlist)
  395. {
  396. var list = node.SelectNodes("td");
  397. if (list == null)
  398. continue;
  399. string shuju = shuju1;
  400. foreach (var item3 in list)
  401. {
  402. shuju += item3.InnerText.Trim() + "|";
  403. }
  404. //gamelist.Add(shuju);
  405. var listurl = url.Split('/');
  406. string season = listurl[6];
  407. HtmlDocument doc2 = new HtmlDocument();
  408. doc2.LoadHtml(list.Last().InnerHtml);
  409. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  410. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  411. }
  412. }
  413. }
  414. }
  415. }
  416. catch (Exception e)
  417. {
  418. Trace.WriteLine("某某杯 发生异常:" + url);
  419. }
  420. }
  421. public void GetClick(string url, string currentRound, string Id)
  422. {
  423. if (url.Contains("cup"))
  424. {
  425. GetCupData(url, currentRound, Id);
  426. }
  427. else
  428. {
  429. GetLeagueData(url, currentRound, Id);
  430. }
  431. }
  432. /// <summary>
  433. /// 某某杯 友谊
  434. /// </summary>
  435. /// <param name="url"></param>
  436. public void GetCupData_yy(string url, List<F_Grouping> glist)
  437. {
  438. string currentRound, Id;
  439. try
  440. {
  441. Trace.WriteLine("某某杯 开始:" + url);
  442. url = url.Replace(":80", "");
  443. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  444. HtmlDocument doc = new HtmlDocument();
  445. if (htmlResource == null)
  446. return;
  447. doc.LoadHtml(htmlResource);
  448. //比赛分组集合
  449. HtmlNodeCollection GamegroupHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9']/li");
  450. foreach (var item in GamegroupHtml)
  451. {
  452. string shuju1 = "";
  453. //比赛集合
  454. HtmlNodeCollection GameHtml = doc.DocumentNode.SelectNodes("//*[@id='tabs9_" + item.Id + "']");
  455. foreach (var item1 in GameHtml)
  456. {
  457. HtmlDocument doc1 = new HtmlDocument();
  458. doc1.LoadHtml(item1.OuterHtml);
  459. HtmlNodeCollection itemlist = doc1.DocumentNode.SelectNodes("//table").Last().SelectNodes("//tr");
  460. foreach (HtmlNode node in itemlist)
  461. {
  462. var list = node.SelectNodes("td");
  463. if (list == null)
  464. continue;
  465. string shuju = shuju1;
  466. foreach (var item3 in list)
  467. {
  468. shuju += item3.InnerText.Trim() + "|";
  469. }
  470. //gamelist.Add(shuju);
  471. var listurl = url.Split('/');
  472. string season = listurl[6];
  473. HtmlDocument doc2 = new HtmlDocument();
  474. doc2.LoadHtml(list.Last().InnerHtml);
  475. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  476. var sss = glist.Where(a => a.Name.Trim() == item.InnerText.Trim() && a.Remark.Replace(":80", "") == url).FirstOrDefault();
  477. 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;
  478. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  479. }
  480. }
  481. }
  482. }
  483. catch (Exception e)
  484. {
  485. Trace.WriteLine("某某杯 发生异常:" + url);
  486. }
  487. }
  488. /// <summary>
  489. /// 国家赛事
  490. /// </summary>
  491. /// <param name="url"></param>
  492. public void GetLeagueData(string url, string currentRound, string Id)
  493. {
  494. string msg = "";
  495. try
  496. {
  497. Trace.WriteLine("国家赛事 开始:" + url);
  498. url = url.Replace(":80", "");
  499. int Round = -1;
  500. try
  501. {
  502. Round = Convert.ToInt32(currentRound);
  503. }
  504. catch (Exception e)
  505. {
  506. Round = -1;
  507. }
  508. if (Round != -1)
  509. {
  510. var listurl = url.Split('/');
  511. string source_league_id = listurl[5];
  512. string season = listurl[6];
  513. var html = CommonHelper.GetPostHtmlString(url, new HttpItem
  514. {
  515. Url = "http://saishi.zgzcw.com/summary/liansaiAjax.action",
  516. Method = "Post",
  517. WebProxy = new WebProxy(CommonHelper.GetIp()),
  518. FormData = new Dictionary<string, string>()
  519. {
  520. { "source_league_id" , source_league_id },
  521. { "currentRound",currentRound},
  522. { "season",season},
  523. { "seasonType",""},
  524. },
  525. ContentType = "application/x-www-form-urlencoded",
  526. });
  527. //常规赛
  528. msg = html.Html;
  529. HtmlDocument doc = new HtmlDocument();
  530. if (html.Html == null)
  531. return;
  532. doc.LoadHtml(html.Html);
  533. //比赛集合
  534. HtmlNodeCollection itemlist = doc.DocumentNode.SelectNodes("//table/tr");
  535. foreach (HtmlNode node in itemlist)
  536. {
  537. var list = node.SelectNodes("td");
  538. string shuju = "";
  539. foreach (var item3 in list)
  540. {
  541. shuju += item3.InnerText.Trim() + "|";
  542. }
  543. //gamelist.Add(shuju);
  544. HtmlDocument doc2 = new HtmlDocument();
  545. doc2.LoadHtml(list.Last().InnerHtml);
  546. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  547. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  548. }
  549. }
  550. else
  551. {
  552. var listurl = url.Split('/');
  553. string source_league_id = listurl[5];
  554. string season = listurl[6];
  555. var html = CommonHelper.GetPostHtmlString(url, new HttpItem
  556. {
  557. Url = "http://saishi.zgzcw.com/summary/liansaifjAction.action",
  558. Method = "Post",
  559. WebProxy = new WebProxy(CommonHelper.GetIp()),
  560. FormData = new Dictionary<string, string>()
  561. {
  562. { "source_league_id" , source_league_id},
  563. { "hostTeamId","0"},
  564. { "guestTeamId","0"},
  565. { "season",season},
  566. { "seasonType","1"},
  567. },
  568. ContentType = "application/x-www-form-urlencoded",
  569. });
  570. msg = html.Html;
  571. HtmlDocument doc = new HtmlDocument();
  572. if (html.Html == null)
  573. return;
  574. doc.LoadHtml(html.Html);
  575. //附加比赛集合
  576. HtmlNodeCollection itemlist = doc.DocumentNode.SelectNodes("//*[@id ='fjtab']/tr");
  577. if (itemlist == null)
  578. {
  579. Trace.WriteLine("附加赛没有数据" + url);
  580. return;
  581. }
  582. foreach (HtmlNode node1 in itemlist)
  583. {
  584. var list1 = node1.SelectNodes("td");
  585. string shuju = "";
  586. foreach (var item3 in list1)
  587. {
  588. shuju += item3.InnerText.Trim() + "|";
  589. }
  590. // gamelist.Add(shuju);
  591. HtmlDocument doc2 = new HtmlDocument();
  592. doc2.LoadHtml(list1.Last().InnerHtml);
  593. HtmlNodeCollection itemlist2 = doc2.DocumentNode.SelectNodes("//a");
  594. Insert(shuju, Id, season, itemlist2[0].Attributes["href"].Value);
  595. }
  596. }
  597. }
  598. catch (Exception e)
  599. {
  600. urllist.Add(url + "|" + currentRound + "|" + Id);
  601. Trace.WriteLine("某某杯 发生异常:" + url + "_:" + currentRound + ":_" + "__" + msg);
  602. }
  603. }
  604. /// <summary>
  605. /// 插入数据
  606. /// </summary>
  607. /// <param name="data"></param>
  608. /// <param name="Id"></param>
  609. /// <param name="Season"></param>
  610. public void Insert(string data, string Id, string Season, string url)
  611. {
  612. lock (gamesList)
  613. {
  614. var query = data.Split('|');
  615. F_Games game = new F_Games();
  616. game.Id = CommonHelper.GetGuid().ToString();
  617. game.CreateDateTime = DateTime.Now;
  618. game.EventId = Group.Where(a => a.Id == Id).FirstOrDefault().EventId;
  619. game.EventType = Group.Where(a => a.Id == Id).FirstOrDefault().EventType;
  620. game.Heat = 0;
  621. var team = teamlist.Where(a => a.Name == query[1]).FirstOrDefault();
  622. if (team == null)
  623. return;
  624. game.HomeTeamId = team == null ? "" : team.Id;
  625. game.HomeTeamScore_All = query[2].Split(':')[0].TryToInt32();
  626. game.HomeTeamScore_Half = query[4].Split(':')[0].TryToInt32();
  627. game.IsOvertime = false;
  628. game.Remark = url;
  629. game.Season = Season;
  630. game.StartDateTime = Convert.ToDateTime(query[0]);
  631. game.Status = query[4] == "-:-" ? g1 : query[2] == "-:-" ? g2 : g3;
  632. team = teamlist.Where(a => a.Name == query[3]).FirstOrDefault();
  633. if (team == null)
  634. return;
  635. game.VisitingTeamId = team.Id;
  636. game.VisitingTeamScore_All = query[2].Split(':')[1].TryToInt32();
  637. game.VisitingTeamScore_Half = query[4].Split(':')[1].TryToInt32();
  638. game.GroupingId = Id;
  639. game.IsObtain = false;
  640. gamesList.Add(game);
  641. }
  642. }
  643. private string g1 = "d0da55f0c86ae811ab3100ac6a4a134f", g2 = "907dbd11c96ae811ab3100ac6a4a134f", g3 = "a058ec2ec96ae811ab3100ac6a4a134f";
  644. }
  645. }