GamesJob.cs 34 KB

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