GamesJob.cs 32 KB

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