123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- using System;
- using FCS.Common;
- using FCS.Interface;
- using FCS.Models;
- using FCS.Models.Entity;
- using HtmlAgilityPack;
- using Quartz;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using FCS.Crawler.ZCLotteryMatchs;
- using System.Configuration;
- using FCS.Models.DTO;
- namespace FCS.Crawler.Basketball
- {
- /// <summary>
- /// 篮球球员统计
- /// </summary>
- public class B_PlayersStatisticsJob : CommonJob
- {
- private Dictionary<string, string> groupDict_NBA;//分组配置
- private Dictionary<string, string> typeDict_NBA; //类型配置
- private string groupType_NBA = "_groupType";//用以得分替换字段
- private string season_NBA = "_season";//用以得分替换字段
- private string eventId;//获取赛事编码
- private List<B_Grouping> groupList;//分组
- private List<B_Team> teamList;//球队
- private List<B_Players> playerList;//球员
- private List<B_PlayersStatistics> result = new List<B_PlayersStatistics>();
- public B_PlayersStatisticsJob()
- {
- #region 篮球的页面与服务器的数据关联
- var zUrl_NBA = "http://lanqiu.zgzcw.com";//主域名
- var hUrl_NBA = "?source_league_id=1&season={0}&type={1}".FormatMe(season_NBA, groupType_NBA);//公共域名参数配置
- groupDict_NBA = new Dictionary<string, string>
- {
- {"季前赛","1" }, {"常规赛","2" }, {"季后赛","3" },
- };
- typeDict_NBA = new Dictionary<string, string>
- {
- { "得分",zUrl_NBA+"/1/17-18/{0}/playerStatistics.do".FormatMe(groupType_NBA)},
- { "投篮",zUrl_NBA+"/nba/playerShoot.action"+hUrl_NBA},
- { "三分",zUrl_NBA+"/nba/playerThreeShoot.action"+hUrl_NBA},
- { "罚球",zUrl_NBA+"/nba/playerPenaltyShoot.action"+hUrl_NBA},
- { "篮板",zUrl_NBA+"/nba/playerBackboard.action"+hUrl_NBA},
- { "助攻",zUrl_NBA+"/nba/playerHelp.action"+hUrl_NBA},
- { "盖帽",zUrl_NBA+"/nba/playerCover.action"+hUrl_NBA},
- { "抢断",zUrl_NBA+"/nba/playerRob.action"+hUrl_NBA},
- { "失误",zUrl_NBA+"/nba/playerMiss.action"+hUrl_NBA},
- { "犯规",zUrl_NBA+"/nba/playerFoul.action"+hUrl_NBA},
- { "两双",zUrl_NBA+"/nba/playerDouble.action"+hUrl_NBA},
- { "三双",zUrl_NBA+"/nba/playerThree.action"+hUrl_NBA}
- };
- #endregion
- }
- public void Click()
- {
- Click_NBA();
- }
- /// <summary>
- /// 获取所有数据
- /// </summary>
- public void GetAll_NBA()
- {
- GetSqlData_NBA();
- //获取NBA的分组
- groupList = services.Query<B_Grouping>(" AND ParentId IS NULL AND EventId='{0}'".FormatMe(eventId), "", "distinct Id,Season,Name").ToList();
- groupList.ForEach(p =>
- {
- Analysis_NBA(p);
- });
- while (true)
- {
- if (CommonHelper.ThreadsFinsh())
- break;
- }
- services.SqlBulkCopyAdd(result);
- }
- /// <summary>
- /// 更新数据
- /// </summary>
- /// <param name="Year"></param>
- public void Click_NBA(string Year = "")
- {
- GetSqlData_NBA();
- //获取NBA的分组
- groupList = services.Query<B_Grouping>(
- " AND ParentId IS NULL AND EventId='{0}' AND Season LIKE '%{1}%' ".FormatMe(eventId, DateTime.Now.Year.ToString().Substring(2)), "", "distinct Id,Season,Name").ToList();
- groupList.ForEach(p =>
- {
- Analysis_NBA(p);
- });
- Thread.Sleep(3000);
- Task.WaitAll(taskList.ToArray());
- var deleteWhere = "";
- groupList.ForEach(p =>
- {
- deleteWhere += "'" + p.Id + "',";
- });
- deleteWhere = deleteWhere.ToString().Substring(0, deleteWhere.ToString().Length - 1);
- services.Delete<B_PlayersStatistics>(" AND GroupingId IN ({0})".FormatMe(deleteWhere));
- services.SqlBulkCopyAdd(result);
- }
- /// <summary>
- /// 得到数据库相关的数据——NBA
- /// </summary>
- private void GetSqlData_NBA()
- {
- //获取NBA的赛事编码
- eventId = new B_EventsJob().GetEventList().Where(p => p.Name == ConfigurationManager.AppSettings["NBAEventName"]).ToList()[0].Id;
- //获取NBA的球队
- teamList = services.Query<B_Team>(" AND EventId='{0}'".FormatMe(eventId), "", "Id,Name").ToList();
- //获取NBA的球员
- playerList = services.Query<B_Players>(" AND b.EventId='{0}'".FormatMe(eventId), " JOIN B_Team b ON a.TeamId =b.Id", "a.Id,a.ChineseName").ToList();
- }
- private async Task Analysis_NBA(B_Grouping p)
- {
- foreach (var item in typeDict_NBA)
- {
- taskList.Add(Task.Run(() =>
- {
- try
- {
- var url = item.Value.Replace(groupType_NBA, groupDict_NBA[p.Name]).Replace(season_NBA, p.Season);
- var doc = CommonHelper.GetHtmlHtmlDocument(new HtmlParameterDTO { Url = url, Title = "排名" });
- var trList = doc.DocumentNode.SelectNodes(".//tr");
- foreach (var tr in trList)
- {
- var td = tr.SelectNodes(".//td");
- if (td == null || td.Count <= 0)
- continue;
- string playerName = td[1].SelectNodes("./a")[0].InnerText.Trim();
- var teamName = td[2].SelectNodes("./a")[0].InnerText.Trim();
- result.Add(new B_PlayersStatistics
- {
- Id = CommonHelper.GetGuid().ToString(),
- CreateDateTime = DateTime.Now,
- EventId = eventId,
- GroupingId = p.Id,
- PlayerId = (from a in playerList
- where a.ChineseName == playerName
- select a.Id).Take(1).ToJoin(),
- PlayerName = td[1].SelectNodes("./a")[0].InnerText.Trim(),
- TeamId = (from a in teamList
- where a.Name == teamName
- select a.Id).Take(1).ToJoin(),
- TeamName = teamName,
- Season = p.Season,
- Sort = td[0].SelectNodes("./em")[0].InnerText.Trim().TryToInt32(),
- Sum = td[3].InnerText.Trim().TryToInt32(),
- Remark = td[1].SelectNodes("./a")[0].Attributes["href"].Value + "|" + td[2].SelectNodes("./a")[0].Attributes["href"].Value,
- TotalShooting = td[4].InnerText,
- HitNumber = td[5].InnerText,
- TotalScore = item.Key == "得分" ? td[6].InnerText : string.Empty,
- AvgScore = td.Count >= 8 ? td[7].InnerText : string.Empty,
- HitRate = td.Count >= 8 ? td[6].InnerText : string.Empty,
- StatisticTypeName = item.Key
- });
- }
- }
- finally
- {
- lock (locker)
- {
- finishcount++;
- Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
- }
- }
- }));
- }
- }
- }
- }
|