GamesJob.cs 36 KB

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