lyl 6 years ago
parent
commit
5bb377cc87

+ 62 - 36
FCS.Crawler/Content/Jobs/BasketJobs/Basketball/B_LeagueRankingJob.cs

@@ -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;
@@ -21,14 +22,20 @@ namespace FCS.Crawler.Basketball
     public class B_LeagueRankingJob : CommonJob, IJob
     {
         private List<B_LeagueRanking> LeagueRankingList = new List<B_LeagueRanking>();
+        private List<B_LeagueRanking> CBALeagueRankingList = new List<B_LeagueRanking>();
         private List<DataItemDetail> DateItem = new List<DataItemDetail>();
         private List<B_Team> TeamList = new List<B_Team>();
         B_LeagueRanking g;
+
+        private string cbaEventId = "";
+        private string nbaEventId = "";
         public B_LeagueRankingJob()
         {
             log = new LogHelper();
             services = IOC.Resolve<IDTOpenCode>();
             g = new B_LeagueRanking();
+            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)
@@ -37,16 +44,16 @@ namespace FCS.Crawler.Basketball
         }
 
 
-        #region 更新数据
+        #region NBA
         /// <summary>
-        /// 获取所有数据
+        /// 获取所有数据 NBA
         /// </summary>
         public void GetAll()
         {
-            GetSqlString(GetAllEventUrl, "");
+            GetSqlString( "");
         }
         /// <summary>
-        /// 更新数据
+        /// 更新数据NBA
         /// </summary>
         /// <param name="Year"></param>
         public void Click(string Year = "")
@@ -55,30 +62,22 @@ namespace FCS.Crawler.Basketball
             {
                 Year = DateTime.Now.Year.ToString().Substring(2, 2);
             }
-            var sql = string.Format(GetNewEventUrl, Year);
-            GetSqlString(sql, Year);
-        }
-        /// <summary>
-        /// CBA所有数据
-        /// </summary>
-        public void GetAll_CBA()
-        {
-            GetCBALeagueRanking();
+            GetSqlString( Year);
+            GetAll_CBA();
         }
-        #endregion
-
-        #region  NBA
+       
+     
         /// <summary>
         /// 解析数据
         /// </summary>
         /// <param name="sqlstring"></param>
-        private void GetSqlString(string sqlstring, string Year)
+        private void GetSqlString(string Year)
         {
             TeamList = services.Query<B_Team>().ToList();
-            var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").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;
@@ -113,7 +112,7 @@ namespace FCS.Crawler.Basketball
             {
                 if (Year != "")
                 {
-                    services.Delete<B_LeagueRanking>(" and Season like '%" + Year + "%'");
+                    services.Delete<B_LeagueRanking>("and EventId='" + nbaEventId + "'  and Season like '%" + Year + "%'");
                 }
 
                 services.SqlBulkCopyAdd<B_LeagueRanking>(LeagueRankingList);
@@ -192,23 +191,26 @@ namespace FCS.Crawler.Basketball
                 });
             }
         }
-        #region SQL语句
-        /// <summary>
-        /// 获取所有的赛事
-        /// </summary>
-        private static string GetAllEventUrl = @"select distinct EventId,Season,Remark  from B_Grouping where Remark is not null";
-        /// <summary>
-        /// 获取最新两年的数据赛事
-        /// </summary>
-        private static string GetNewEventUrl = @"select distinct EventId,Season,Remark  from B_Grouping where Remark is not null and Season like '%{0}%'";
 
-        #endregion
 
         #endregion
 
 
         #region CBA
 
+        /// <summary>
+        /// CBA所有数据
+        /// </summary>
+        public void GetAll_CBA()
+        {
+            GetCBALeagueRanking();
+            services.Delete<B_LeagueRanking>("and EventId='" + cbaEventId + "'");
+            services.SqlBulkCopyAdd<B_LeagueRanking>(CBALeagueRankingList);
+        }
+
+        /// <summary>
+        /// 解析CBA js数据
+        /// </summary>
         private void GetCBALeagueRanking()
         {
             int startyear = 5;
@@ -230,15 +232,39 @@ namespace FCS.Crawler.Basketball
                 if (htmlResource.IsEmpty())
                     return;
                 var arrs = htmlResource.Split(';');
-                var arrLeague = arrs[0].Split('=')[1];
+                //var arrLeague = arrs[0].Split('=')[1];
                 var arrTeam = arrs[1].Split('=')[1];
                 var westData = arrs[2].Split('=')[1];
-                var lastUpdateTime = arrs[3].Split('=')[1];
-                var scoreColor = arrs[4].Split('=')[1];
+                //var lastUpdateTime = arrs[3].Split('=')[1];
+                //var scoreColor = arrs[4].Split('=')[1];
+                var arrTeamList = JsonConvert.DeserializeObject<object[][]>(arrTeam).ToList();
+                var westDataList = JsonConvert.DeserializeObject<object[][]>(westData).ToList();
+                for (int i = 0; i < westDataList.Count(); i++)
+                {
+                    var teamName = arrTeamList.Where(o => o[0].ToString() == westDataList[i][0].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == westDataList[i][0].ToString()).FirstOrDefault()[1] : "";
+                    var teamId = services.Query<B_Team>("and Name ='" + teamName + "'", "").Count() > 0 ? services.Query<B_Team>("and Name ='" + teamName + "'", "").FirstOrDefault().Id : "";
+                    B_LeagueRanking ranking = new B_LeagueRanking();
+                    ranking.Id = Guid.NewGuid().ToString();
+                    ranking.Sort = i + 1;
+                    ranking.TeamId = teamId;
+                    ranking.EventId = cbaEventId;
+                    ranking.Season = item;
+                    ranking.Win = int.Parse(westDataList[i][1].ToString());
+                    ranking.Lose = int.Parse(westDataList[i][2].ToString());
+                    ranking.WinRate = westDataList[i][3].ToString();
+                    ranking.WinDivide = westDataList[i][5].ToString();
+                    ranking.ScoreAvg = westDataList[i][6].ToString();
+                    ranking.LossAvg = westDataList[i][7].ToString();
+                    //ranking.League = westDataList[i][1].ToString();
+                    //ranking.Division = westDataList[i][1].ToString();
+                    ranking.Home = westDataList[i][12].ToString() + "-" + westDataList[i][13].ToString();
+                    ranking.Visiting = westDataList[i][14].ToString() + "-" + westDataList[i][15].ToString();
+                    ranking.NearlyTen = westDataList[i][16].ToString() + "-" + westDataList[i][17].ToString(); ;
+                    ranking.Status = westDataList[i][18].ToString();
+                    ranking.Remark = url;
+                    CBALeagueRankingList.Add(ranking);
+                }
             }
-        
-           
-
         }
         #endregion
     }

+ 163 - 22
FCS.Crawler/Content/Jobs/BasketJobs/Basketball/B_MakeBallRankingJob.cs

@@ -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("&nbsp;", "");
+                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
     }
 }

+ 151 - 19
FCS.Crawler/Content/Jobs/BasketJobs/Basketball/B_SizeBallRankingJob.cs

@@ -13,6 +13,7 @@ using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using FCS.Models.DTO;
+using Newtonsoft.Json;
 
 namespace FCS.Crawler.Basketball
 {
@@ -21,13 +22,19 @@ namespace FCS.Crawler.Basketball
     /// </summary>
     public class B_SizeBallRankingJob : CommonJob, IJob
     {
-        private  List<B_SizeBallRanking> SizeBallRankingList = new List<B_SizeBallRanking>();
-        private  List<DataItemDetail> DateItem = new List<DataItemDetail>();
-        private  List<B_Team> TeamList = new List<B_Team>();
+        private List<B_SizeBallRanking> SizeBallRankingList = new List<B_SizeBallRanking>();
+        private List<B_SizeBallRanking> CBASizeBallRankingList = new List<B_SizeBallRanking>();
+        private List<DataItemDetail> DateItem = new List<DataItemDetail>();
+        private List<B_Team> TeamList = new List<B_Team>();
         B_SizeBallRanking g;
+        private string cbaEventId = "";
+        private string nbaEventId = "";
         public B_SizeBallRankingJob()
         {
             g = new B_SizeBallRanking();
+            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)
@@ -36,6 +43,7 @@ namespace FCS.Crawler.Basketball
         }
 
 
+        #region NBA
         #region 更新数据
         /// <summary>
         /// 获取所有数据
@@ -56,10 +64,9 @@ namespace FCS.Crawler.Basketball
                 Year = DateTime.Now.Year.ToString().Substring(2, 2); ;
             }
             GetSqlString(Year);
+            GetAll_CBA();
         }
         #endregion
-
-
         /// <summary>
         /// 解析数据
         /// </summary>
@@ -69,26 +76,26 @@ namespace FCS.Crawler.Basketball
             TeamList = services.Query<B_Team>().ToList();
             //SizeBallRankingList = services.Query<B_SizeBallRanking>().ToList();
             var dataItem = services.GetDataItem(DataItemDetailEnum.FootBallSizeBallType);
-            var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").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/bigSmallBall.do");
-                    GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "1").First().Id.ToString());
-                    url = p.Remark.ToString().Replace("saiAll.do", "2/bigSmallBall.do");
-                    GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "2").First().Id.ToString());
-                    url = p.Remark.ToString().Replace("saiAll.do", "3/bigSmallBall.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/bigSmallBall.do");
+                     GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "1").First().Id.ToString());
+                     url = p.Remark.ToString().Replace("saiAll.do", "2/bigSmallBall.do");
+                     GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "2").First().Id.ToString());
+                     url = p.Remark.ToString().Replace("saiAll.do", "3/bigSmallBall.do");
+                     GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "3").First().Id.ToString());
+                 });
                 lock (g)
                 {
                     num++;
@@ -107,7 +114,7 @@ namespace FCS.Crawler.Basketball
             {
                 if (Year != "")
                 {
-                    services.Delete<B_SizeBallRanking>(" and Season like '%" + Year + "%'");
+                    services.Delete<B_SizeBallRanking>("and EventId='" + nbaEventId + "' and Season like '%" + Year + "%'");
                 }
                 services.SqlBulkCopyAdd<B_SizeBallRanking>(SizeBallRankingList);
                 Trace.WriteLine("B_SizeBallRanking更新完毕");
@@ -168,5 +175,130 @@ namespace FCS.Crawler.Basketball
                 }
             });
         }
+
+        #endregion
+
+
+        #region CBA
+        public void GetAll_CBA()
+        {
+            GetCBASizeBallRanking();
+            services.Delete<B_SizeBallRanking>("and EventId='" + cbaEventId + "'");
+            services.SqlBulkCopyAdd<B_SizeBallRanking>(CBASizeBallRankingList);
+        }
+
+        /// <summary>
+        /// 解析CBA js数据
+        /// </summary>
+        private void GetCBASizeBallRanking()
+        {
+            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.FootBallSizeBallType);
+            //获取排行榜
+            foreach (var item in Years)
+            {
+                var url = "http://nba.nowscore.com/jsData/bigSmall/" + item + "/bs5.js";
+                var htmlResource = NetHelper.GetUrlResponse(url, Encoding.GetEncoding("utf-8")).Replace("&nbsp;", "");
+                if (htmlResource.IsEmpty())
+                    return;
+                var arrs = htmlResource.Split(';');
+                var arrTeam = arrs[1].Split('=')[1];
+                var TotalBs = arrs[2].Split('=')[1];
+                var HomeBs = arrs[3].Split('=')[1];
+                var GuestBs = arrs[4].Split('=')[1];
+                //球队数据
+                var arrTeamList = JsonConvert.DeserializeObject<object[][]>(arrTeam).ToList();
+                //总榜数据
+                var TotalBsList = JsonConvert.DeserializeObject<object[][]>(TotalBs).ToList();
+                //主场数据
+                var HomeBsList = JsonConvert.DeserializeObject<object[][]>(HomeBs).ToList();
+                //客场数据
+                var GuestBsList = JsonConvert.DeserializeObject<object[][]>(GuestBs).ToList();
+
+                #region 总榜
+                var sizeBallType = dataItem.Where(o => o.ItemValue == "1").First().Id.ToString();
+                for (int i = 0; i < TotalBsList.Count(); i++)
+                {
+                    var teamName = arrTeamList.Where(o => o[0].ToString() == TotalBsList[i][1].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == TotalBsList[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_SizeBallRanking sizing = new B_SizeBallRanking();
+                    sizing.Id = Guid.NewGuid().ToString();
+                    sizing.Sort = int.Parse(TotalBsList[i][0].ToString());
+                    sizing.SizeBallType = sizeBallType;
+                    sizing.TeamId =teamId;
+                    sizing.EventId = cbaEventId;
+                    sizing.Season = item;
+                    sizing.Sum = int.Parse(TotalBsList[i][2].ToString());
+                    sizing.LargeNum = int.Parse(TotalBsList[i][3].ToString());
+                    sizing.GoNum = int.Parse(TotalBsList[i][4].ToString());
+                    sizing.SmallNum = int.Parse(TotalBsList[i][5].ToString());
+                    sizing.LargePercentage = TotalBsList[i][6].ToString();
+                    sizing.GoPercentage = TotalBsList[i][7].ToString();
+                    sizing.SmallPercentage = TotalBsList[i][8].ToString();
+                    CBASizeBallRankingList.Add(sizing);
+                }
+                #endregion
+
+                #region 主场
+                sizeBallType = dataItem.Where(o => o.ItemValue == "2").First().Id.ToString();
+                for (int i = 0; i < HomeBsList.Count(); i++)
+                {
+                    var teamName = arrTeamList.Where(o => o[0].ToString() == HomeBsList[i][1].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == HomeBsList[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_SizeBallRanking sizing = new B_SizeBallRanking();
+                    sizing.Id = Guid.NewGuid().ToString();
+                    sizing.Sort = int.Parse(HomeBsList[i][0].ToString());
+                    sizing.SizeBallType = sizeBallType;
+                    sizing.TeamId = teamId;
+                    sizing.EventId = cbaEventId;
+                    sizing.Season = item;
+                    sizing.Sum = int.Parse(HomeBsList[i][2].ToString());
+                    sizing.LargeNum = int.Parse(HomeBsList[i][3].ToString());
+                    sizing.GoNum = int.Parse(HomeBsList[i][4].ToString());
+                    sizing.SmallNum = int.Parse(HomeBsList[i][5].ToString());
+                    sizing.LargePercentage = HomeBsList[i][6].ToString();
+                    sizing.GoPercentage = HomeBsList[i][7].ToString();
+                    sizing.SmallPercentage = HomeBsList[i][8].ToString();
+                    CBASizeBallRankingList.Add(sizing);
+                }
+                #endregion
+
+                #region 客场
+                sizeBallType = dataItem.Where(o => o.ItemValue == "3").First().Id.ToString();
+                for (int i = 0; i < GuestBsList.Count(); i++)
+                {
+                    var teamName = arrTeamList.Where(o => o[0].ToString() == GuestBsList[i][1].ToString()).Count() > 0 ? arrTeamList.Where(o => o[0].ToString() == GuestBsList[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_SizeBallRanking sizing = new B_SizeBallRanking();
+                    sizing.Id = Guid.NewGuid().ToString();
+                    sizing.Sort = int.Parse(GuestBsList[i][0].ToString());
+                    sizing.SizeBallType = sizeBallType;
+                    sizing.TeamId = teamId;
+                    sizing.EventId = cbaEventId;
+                    sizing.Season = item;
+                    sizing.Sum = int.Parse(GuestBsList[i][2].ToString());
+                    sizing.LargeNum = int.Parse(GuestBsList[i][3].ToString());
+                    sizing.GoNum = int.Parse(GuestBsList[i][4].ToString());
+                    sizing.SmallNum = int.Parse(GuestBsList[i][5].ToString());
+                    sizing.LargePercentage = GuestBsList[i][6].ToString();
+                    sizing.GoPercentage = GuestBsList[i][7].ToString();
+                    sizing.SmallPercentage = GuestBsList[i][8].ToString();
+                    CBASizeBallRankingList.Add(sizing);
+                }
+                #endregion
+            }
+
+        }
+        #endregion
     }
 }