예제 #1
0
        private void NextAssignTask(OrganizerEntity entity, Dictionary <string, List <string> > taskDic)
        {
            foreach (var kv in taskDic)
            {
                if (kv.Key == "add")
                {
                    foreach (var sid in kv.Value)
                    {
                        SeasonParam sp = new SeasonParam()
                        {
                            SeasonId    = sid,
                            SportId     = entity.SportId,
                            ContinentId = entity.ContinentId,
                            OrganizerId = entity.OrganizerId
                        };

                        #region 测试只加入指定的联赛任务
                        //一般联赛有积分的情况
                        //if (sid == "42556")

                        //杯赛无积分的情况
                        //if (sid == "42240")

                        //世锦赛分组积分的情况
                        //if (sid == "10876")

                        //世界杯分组积分的情况
                        //if (sid == "48238")

                        //其他指定测试
                        //if (sid == "51035")
                        #endregion

                        LeagueManager.AddOrUpdateParam(sp);
                    }
                }
                else if (kv.Key == "del")
                {
                    foreach (var sid in kv.Value)
                    {
                        SeasonParam sp = new SeasonParam()
                        {
                            SeasonId    = sid,
                            SportId     = entity.SportId,
                            ContinentId = entity.ContinentId,
                            OrganizerId = entity.OrganizerId
                        };
                        LeagueManager.RemoveParam(sp);
                    }
                }
            }
        }
예제 #2
0
        public void Process(BaseData data)
        {
            BRData bd = data as BRData;
            string txt;

            if (!HtmlDecode(bd.Html, out txt))
            {
                return;
            }

            var xml       = new XmlHelper(txt);
            var cdataFlag = "//c";
            var cdata     = xml.GetValue(cdataFlag);

            if (string.IsNullOrEmpty(cdata))
            {
                return;
            }

            var root = GetHtmlRoot(cdata);

            var jd2 = root.SelectSingleNode("//li[@class='topelem sport-1']/ul[@class=' jdlvl_2']");

            List <HtmlNode> needNodes = new List <HtmlNode>();

            foreach (var c2 in jd2.ChildNodes)
            {
                needNodes.Clear();
                var cs = c2.ChildNodes[0];
                var cc = cs.Attributes["href"];

                //  大洲的信息
                string continentId;
                string continentName;
                if (cc == null)
                {
                    continentId   = "7";
                    continentName = cs.InnerText;
                }
                else
                {
                    continentId   = RegexGetStr(cs.Attributes["href"].Value, "22_", "',");
                    continentName = cs.InnerText;
                }

                var jd3 = c2.SelectSingleNode("ul[contains(@class,'jdlvl_3')]");
                if (jd3 == null)
                {
                    continue;
                }

                #region 国际,俱乐部
                //  处理国际和俱乐部组织的联赛
                Dictionary <string, List <string> > dic = new Dictionary <string, List <string> >()
                {
                    { "4", new List <string>() }, { "393", new List <string>() }
                };
                for (int i = 0; i < jd3.ChildNodes.Count; i++)
                {
                    if (i % 3 == 2)
                    {
                        //  第二列国际
                        var n2 = jd3.ChildNodes[i - 1];
                        //  第三列俱乐部
                        var n3 = jd3.ChildNodes[i];

                        OrganizerEntity oe;
                        if (i == 2) //  标题行的处理
                        {
                            var key = "393";
                            oe               = OrganizerEntityManager.AddOrGetCacheEntity <OrganizerEntity>(key);
                            oe.OrganizerId   = key;
                            oe.OrganizerName = n3.ChildNodes[0].InnerText;
                            oe.ContinentId   = continentId;
                            oe.ContinentName = continentName;

                            key              = "4";
                            oe               = OrganizerEntityManager.AddOrGetCacheEntity <OrganizerEntity>(key);
                            oe.OrganizerId   = key;
                            oe.OrganizerName = n2.ChildNodes[0].InnerText;
                            oe.ContinentId   = continentId;
                            oe.ContinentName = continentName;
                            continue;
                        }

                        //  各行数据的处理
                        //  解析第二列所有联赛Id
                        var a2 = n2.ChildNodes[0].Attributes["href"];
                        if (a2 != null)
                        {
                            var seasonId = RegexGetStr(a2.Value, "seasonid','", "',");
                            if (string.IsNullOrEmpty(seasonId))
                            {
                                continue;
                            }
                            LeagueEntity le = LeagueEntityManager.AddOrGetCacheEntity <LeagueEntity>(seasonId);
                            le.LeagueName = n2.InnerText;
                            le.AddSeasonId(seasonId, true);
                            if (!string.IsNullOrEmpty(seasonId))
                            {
                                dic["4"].Add(seasonId);
                            }
                        }

                        //  解析第三列所有联赛Id
                        var a3 = n3.ChildNodes[0].Attributes["href"];
                        if (a3 != null)
                        {
                            var seasonId = RegexGetStr(a3.Value, "seasonid','", "',");
                            if (string.IsNullOrEmpty(seasonId))
                            {
                                continue;
                            }
                            LeagueEntity le = LeagueEntityManager.AddOrGetCacheEntity <LeagueEntity>(seasonId);
                            le.LeagueName = n3.InnerText;
                            le.AddSeasonId(seasonId, true);
                            if (!string.IsNullOrEmpty(seasonId))
                            {
                                dic["393"].Add(seasonId);
                            }
                        }
                    }
                }

                foreach (var kv in dic)
                {
                    var oe    = OrganizerEntityManager.AddOrGetCacheEntity <OrganizerEntity>(kv.Key);
                    var cpDic = oe.CompareSetSeasonIds(kv.Value);
                    NextAssignTask(oe, cpDic);
                }
                #endregion

                #region 所有其他国家的数据
                var ff3 = jd3.SelectNodes("li[@class='floater ']"); //  根节点中显示的组织数据,需要进一步循环获取组织数据
                if (ff3 != null)
                {
                    foreach (var l3 in ff3)
                    {
                        var jd4 = l3.SelectSingleNode("ul[@class=' jdlvl_4']");
                        if (jd4 == null)
                        {
                            //  其他组织的联赛上一步已经处理
                            continue;
                        }
                        needNodes.AddRange(jd4.ChildNodes);
                    }
                }
                // 需要进一步处理的Organizers数据
                for (int i = 0; i < needNodes.Count; i++)
                {
                    var             node          = needNodes[i];
                    var             a             = node.ChildNodes[0];
                    var             organizerId   = RegexGetStr(a.Attributes["href"].Value, "3_", ",");
                    var             organizerName = a.InnerText;
                    OrganizerEntity ent           = OrganizerEntityManager.AddOrGetCacheEntity <OrganizerEntity>(organizerId);
                    ent.ContinentId   = continentId;
                    ent.ContinentName = continentName;

                    if (node.ChildNodes.Count < 3)
                    {
                        //  青年
                        continue;
                    }

                    ent.OrganizerId   = organizerId;
                    ent.OrganizerName = organizerName;

                    var lis          = node.ChildNodes[2].ChildNodes;
                    var seasonIdlist = new List <string>();
                    var moreLis      = new List <HtmlNode>(); //  更多业余的联赛
                    foreach (var li in lis)
                    {
                        var s        = li.ChildNodes[0].Attributes["href"].Value;
                        var seasonId = RegexGetStr(s, "seasonid','", "',");
                        if (string.IsNullOrEmpty(seasonId))
                        {
                            moreLis.Add(li);
                            needNodes.AddRange(moreLis);
                            continue;
                        }
                        LeagueEntity le = LeagueEntityManager.AddOrGetCacheEntity <LeagueEntity>(seasonId);
                        le.LeagueName = li.InnerText;
                        le.AddSeasonId(seasonId, true);
                        seasonIdlist.Add(seasonId);
                    }
                    var cpDic = ent.CompareSetSeasonIds(seasonIdlist);
                    NextAssignTask(ent, cpDic);
                }
                #endregion
            }
        }