|
@@ -4,6 +4,7 @@ using FCS.Models;
|
|
|
using FCS.Models.DTO;
|
|
|
using FCS.Models.Entity;
|
|
|
using HtmlAgilityPack;
|
|
|
+using Newtonsoft.Json;
|
|
|
using Quartz;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
@@ -20,13 +21,18 @@ namespace FCS.Crawler.Basketball
|
|
|
/// </summary>
|
|
|
public class B_MakeBallRankingJob : CommonJob, IJob
|
|
|
{
|
|
|
- private List<B_MakeBallRanking> MakeBallRankingList = new List<B_MakeBallRanking>();
|
|
|
- private List<DataItemDetail> DateItem = new List<DataItemDetail>();
|
|
|
- private List<B_Team> TeamList = new List<B_Team>();
|
|
|
+ private List<B_MakeBallRanking> MakeBallRankingList = new List<B_MakeBallRanking>();
|
|
|
+ private List<B_MakeBallRanking> CBAMakeBallRankingList = new List<B_MakeBallRanking>();
|
|
|
+ private List<DataItemDetail> DateItem = new List<DataItemDetail>();
|
|
|
+ private List<B_Team> TeamList = new List<B_Team>();
|
|
|
B_MakeBallRanking g;
|
|
|
+ private string cbaEventId = "";
|
|
|
+ private string nbaEventId = "";
|
|
|
public B_MakeBallRankingJob()
|
|
|
{
|
|
|
g = new B_MakeBallRanking();
|
|
|
+ cbaEventId = services.Query<B_Events>("and Name ='CBA赛事'", "").FirstOrDefault().Id;
|
|
|
+ nbaEventId = services.Query<B_Events>("and Name ='NBA赛事'", "").FirstOrDefault().Id;
|
|
|
}
|
|
|
|
|
|
public void Execute(IJobExecutionContext context)
|
|
@@ -34,7 +40,7 @@ namespace FCS.Crawler.Basketball
|
|
|
Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ #region NBA
|
|
|
#region 更新数据
|
|
|
/// <summary>
|
|
|
/// 获取所有数据
|
|
@@ -55,39 +61,38 @@ namespace FCS.Crawler.Basketball
|
|
|
Year = DateTime.Now.Year.ToString().Substring(2, 2); ;
|
|
|
}
|
|
|
GetSqlString(Year);
|
|
|
+ GetAll_CBA();
|
|
|
}
|
|
|
#endregion
|
|
|
-
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 解析数据
|
|
|
/// </summary>
|
|
|
/// <param name="sqlstring"></param>
|
|
|
private void GetSqlString(string Year)
|
|
|
{
|
|
|
- TeamList = services.Query<B_Team>().ToList();
|
|
|
var dataItem = services.GetDataItem(DataItemDetailEnum.FootBallMakeBallType);
|
|
|
- var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
|
|
|
+ TeamList = services.Query<B_Team>().ToList();
|
|
|
+ var ds = services.Query<B_Grouping>(" and EventId='" + nbaEventId + "' and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
|
|
|
if (Year != "")
|
|
|
{
|
|
|
- ds = services.Query<B_Grouping>("and Remark is not null and Season like '%" + Year + "%'", "", "distinct EventId,Season,Remark").ToList();
|
|
|
+ ds = services.Query<B_Grouping>(" and EventId='" + nbaEventId + "' and Remark is not null and Season like '%" + Year + "%'", "", "distinct EventId,Season,Remark").ToList();
|
|
|
}
|
|
|
|
|
|
int max = ds.Count;
|
|
|
int num = 0;
|
|
|
ds.ForEach(async p =>
|
|
|
{
|
|
|
- await Task.Run(() =>
|
|
|
- {
|
|
|
- var eventId = p.EventId;
|
|
|
- var season = p.Season;
|
|
|
- var url = p.Remark.ToString().Replace("saiAll.do", "1/letPlateBall.do");
|
|
|
- GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "1").First().Id.ToString());
|
|
|
- url = p.Remark.ToString().Replace("saiAll.do", "2/letPlateBall.do");
|
|
|
- GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "2").First().Id.ToString());
|
|
|
- url = p.Remark.ToString().Replace("saiAll.do", "3/letPlateBall.do");
|
|
|
- GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "3").First().Id.ToString());
|
|
|
- });
|
|
|
+ await Task.Run(() =>
|
|
|
+ {
|
|
|
+ var eventId = p.EventId;
|
|
|
+ var season = p.Season;
|
|
|
+ var url = p.Remark.ToString().Replace("saiAll.do", "1/letPlateBall.do");
|
|
|
+ GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "1").First().Id.ToString());
|
|
|
+ url = p.Remark.ToString().Replace("saiAll.do", "2/letPlateBall.do");
|
|
|
+ GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "2").First().Id.ToString());
|
|
|
+ url = p.Remark.ToString().Replace("saiAll.do", "3/letPlateBall.do");
|
|
|
+ GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "3").First().Id.ToString());
|
|
|
+ });
|
|
|
lock (g)
|
|
|
{
|
|
|
num++;
|
|
@@ -102,12 +107,12 @@ namespace FCS.Crawler.Basketball
|
|
|
}
|
|
|
}
|
|
|
Trace.WriteLine("获取B_MakeBallRanking 完结");
|
|
|
-
|
|
|
+
|
|
|
try
|
|
|
{
|
|
|
if (Year != "")
|
|
|
{
|
|
|
- services.Delete<B_MakeBallRanking>(" and Season like '%" + Year + "%'");
|
|
|
+ services.Delete<B_MakeBallRanking>("and EventId='" + nbaEventId + "' and Season like '%" + Year + "%'");
|
|
|
}
|
|
|
services.SqlBulkCopyAdd<B_MakeBallRanking>(MakeBallRankingList);
|
|
|
}
|
|
@@ -171,6 +176,142 @@ namespace FCS.Crawler.Basketball
|
|
|
|
|
|
}
|
|
|
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region CBA
|
|
|
+ /// <summary>
|
|
|
+ /// CBA所有数据
|
|
|
+ /// </summary>
|
|
|
+ public void GetAll_CBA()
|
|
|
+ {
|
|
|
+ GetCBAMakeBallRanking();
|
|
|
+ services.Delete<B_MakeBallRanking>("and EventId='" + cbaEventId + "'");
|
|
|
+ services.SqlBulkCopyAdd<B_MakeBallRanking>(CBAMakeBallRankingList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 解析CBA js数据
|
|
|
+ /// </summary>
|
|
|
+ private void GetCBAMakeBallRanking()
|
|
|
+ {
|
|
|
+ int startyear = 5;
|
|
|
+ int endtyear = DateTime.Now.AddYears(1).Year % 100;
|
|
|
+ List<string> Years = new List<string>();
|
|
|
+ //组装时间段
|
|
|
+ while (startyear < endtyear)
|
|
|
+ {
|
|
|
+ int temp = startyear + 1;
|
|
|
+ string Year = (startyear < 10 ? "0" + startyear.ToString() : startyear.ToString()) + "-" + (temp < 10 ? "0" + temp.ToString() : temp.ToString());
|
|
|
+ Years.Add(Year);
|
|
|
+ startyear++;
|
|
|
+ }
|
|
|
+
|
|
|
+ var dataItem = services.GetDataItem(DataItemDetailEnum.FootBallMakeBallType);
|
|
|
+ //获取排行榜
|
|
|
+ foreach (var item in Years)
|
|
|
+ {
|
|
|
+ var url = "http://nba.nowscore.com/jsData/letGoal/" + item + "/l5.js";
|
|
|
+ var htmlResource = NetHelper.GetUrlResponse(url, Encoding.GetEncoding("utf-8")).Replace(" ", "");
|
|
|
+ if (htmlResource.IsEmpty())
|
|
|
+ return;
|
|
|
+ var arrs = htmlResource.Split(';');
|
|
|
+ var arrTeam = arrs[1].Split('=')[1];
|
|
|
+ var TotalPanLu = arrs[2].Split('=')[1];
|
|
|
+ var HomePanLu = arrs[3].Split('=')[1];
|
|
|
+ var GuestPanLu = arrs[4].Split('=')[1];
|
|
|
+ //球队数据
|
|
|
+ var arrTeamList = JsonConvert.DeserializeObject<object[][]>(arrTeam).ToList();
|
|
|
+ //总榜数据
|
|
|
+ var TotalPanLuList = JsonConvert.DeserializeObject<object[][]>(TotalPanLu).ToList();
|
|
|
+ //主场数据
|
|
|
+ var HomePanLuList = JsonConvert.DeserializeObject<object[][]>(HomePanLu).ToList();
|
|
|
+ //客场数据
|
|
|
+ var GuestPanLuList = JsonConvert.DeserializeObject<object[][]>(GuestPanLu).ToList();
|
|
|
+ #region 总榜
|
|
|
+ var makeType = dataItem.Where(o => o.ItemValue == "1").First().Id.ToString();
|
|
|
+ for (int i = 0; i < TotalPanLuList.Count(); i++)
|
|
|
+ {
|
|
|
+ var teamName = arrTeamList.Where(o => o[0].ToString() == TotalPanLuList[i][1].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == TotalPanLuList[i][1].ToString()).FirstOrDefault()[1] : "";
|
|
|
+ var teamId = services.Query<B_Team>("and Name ='" + teamName + "'", "").Count() > 0 ? services.Query<B_Team>("and Name ='" + teamName + "'", "").FirstOrDefault().Id : "";
|
|
|
+ B_MakeBallRanking making = new B_MakeBallRanking();
|
|
|
+ making.Id = Guid.NewGuid().ToString();
|
|
|
+ making.Sort = int.Parse( TotalPanLuList[i][0].ToString());
|
|
|
+ making.MakeBallType = makeType;
|
|
|
+ making.TeamId = teamId;
|
|
|
+ making.EventId = cbaEventId;
|
|
|
+ making.Season = item;
|
|
|
+ making.Sum = int.Parse(TotalPanLuList[i][2].ToString());
|
|
|
+ making.UpDisc = int.Parse(TotalPanLuList[i][3].ToString());
|
|
|
+ making.DownDisc = int.Parse(TotalPanLuList[i][4].ToString());
|
|
|
+ making.WinDiscNum = int.Parse(TotalPanLuList[i][5].ToString());
|
|
|
+ making.GoDiscNum = int.Parse(TotalPanLuList[i][6].ToString());
|
|
|
+ making.TransportDiscNum = int.Parse(TotalPanLuList[i][7].ToString());
|
|
|
+ making.NetDiscNum = int.Parse(TotalPanLuList[i][8].ToString());
|
|
|
+ making.WinPercentage = TotalPanLuList[i][9].ToString();
|
|
|
+ making.GoPercentage = TotalPanLuList[i][10].ToString();
|
|
|
+ making.NegativePercentage = TotalPanLuList[i][11].ToString();
|
|
|
+ making.Remark = url;
|
|
|
+ CBAMakeBallRankingList.Add(making);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
|
|
|
+ #region 主场
|
|
|
+ makeType = dataItem.Where(o => o.ItemValue == "2").First().Id.ToString();
|
|
|
+ for (int i = 0; i < HomePanLuList.Count(); i++)
|
|
|
+ {
|
|
|
+ var teamName = arrTeamList.Where(o => o[0].ToString() == HomePanLuList[i][1].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == HomePanLuList[i][1].ToString()).FirstOrDefault()[1] : "";
|
|
|
+ var teamId = services.Query<B_Team>("and Name ='" + teamName + "'", "").Count() > 0 ? services.Query<B_Team>("and Name ='" + teamName + "'", "").FirstOrDefault().Id : "";
|
|
|
+ B_MakeBallRanking making = new B_MakeBallRanking();
|
|
|
+ making.Id = Guid.NewGuid().ToString();
|
|
|
+ making.Sort = int.Parse(HomePanLuList[i][0].ToString());
|
|
|
+ making.MakeBallType = makeType;
|
|
|
+ making.TeamId = teamId;
|
|
|
+ making.EventId = cbaEventId;
|
|
|
+ making.Season = item;
|
|
|
+ making.Sum = int.Parse(HomePanLuList[i][2].ToString());
|
|
|
+ making.UpDisc = int.Parse(HomePanLuList[i][3].ToString());
|
|
|
+ making.DownDisc = int.Parse(HomePanLuList[i][4].ToString());
|
|
|
+ making.WinDiscNum = int.Parse(HomePanLuList[i][5].ToString());
|
|
|
+ making.GoDiscNum = int.Parse(HomePanLuList[i][6].ToString());
|
|
|
+ making.TransportDiscNum = int.Parse(HomePanLuList[i][7].ToString());
|
|
|
+ making.NetDiscNum = int.Parse(HomePanLuList[i][8].ToString());
|
|
|
+ making.WinPercentage = HomePanLuList[i][9].ToString();
|
|
|
+ making.GoPercentage = HomePanLuList[i][10].ToString();
|
|
|
+ making.NegativePercentage = HomePanLuList[i][11].ToString();
|
|
|
+ making.Remark = url;
|
|
|
+ CBAMakeBallRankingList.Add(making);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 客场
|
|
|
+ makeType = dataItem.Where(o => o.ItemValue == "3").First().Id.ToString();
|
|
|
+ for (int i = 0; i < GuestPanLuList.Count(); i++)
|
|
|
+ {
|
|
|
+ var teamName = arrTeamList.Where(o => o[0].ToString() == GuestPanLuList[i][1].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == GuestPanLuList[i][1].ToString()).FirstOrDefault()[1] : "";
|
|
|
+ var teamId = services.Query<B_Team>("and Name ='" + teamName + "'", "").Count() > 0 ? services.Query<B_Team>("and Name ='" + teamName + "'", "").FirstOrDefault().Id : "";
|
|
|
+ B_MakeBallRanking making = new B_MakeBallRanking();
|
|
|
+ making.Id = Guid.NewGuid().ToString();
|
|
|
+ making.Sort = int.Parse(GuestPanLuList[i][0].ToString());
|
|
|
+ making.MakeBallType = makeType;
|
|
|
+ making.TeamId = teamId;
|
|
|
+ making.EventId = cbaEventId;
|
|
|
+ making.Season = item;
|
|
|
+ making.Sum = int.Parse(GuestPanLuList[i][2].ToString());
|
|
|
+ making.UpDisc = int.Parse(GuestPanLuList[i][3].ToString());
|
|
|
+ making.DownDisc = int.Parse(GuestPanLuList[i][4].ToString());
|
|
|
+ making.WinDiscNum = int.Parse(GuestPanLuList[i][5].ToString());
|
|
|
+ making.GoDiscNum = int.Parse(GuestPanLuList[i][6].ToString());
|
|
|
+ making.TransportDiscNum = int.Parse(GuestPanLuList[i][7].ToString());
|
|
|
+ making.NetDiscNum = int.Parse(GuestPanLuList[i][8].ToString());
|
|
|
+ making.WinPercentage = GuestPanLuList[i][9].ToString();
|
|
|
+ making.GoPercentage = GuestPanLuList[i][10].ToString();
|
|
|
+ making.NegativePercentage = GuestPanLuList[i][11].ToString();
|
|
|
+ making.Remark = url;
|
|
|
+ CBAMakeBallRankingList.Add(making);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|