コード例 #1
0
        internal List <LinkData> GetLives()
        {
            var rezult = new List <LinkData>();

            if (_req == null)
            {
                _req = new HttpRequest();
                _req.CharacterSet = Encoding.UTF8;
                _req.UserAgent    =
                    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46";
                //if (UsingProxy)
                //    _req.Proxy = ProxyClient.Parse(ProxySingleManager.GetProxy());
            }

            string respone = _req.Get($"{_url}/su/live/popular").ToString();
            var    pr      = new HtmlParser();
            var    doc     = pr.Parse(respone);
            var    lives   = doc.QuerySelectorAll("div.event-info");


            foreach (IElement element in lives)
            {
                var id       = element.Attributes["data-event-treeid"].Value;
                var linkdata = new LinkData();
                linkdata.Id = id;
                try
                {
                    linkdata.Teams = element.Children[2].TextContent.Replace(" @ ", " - ");
                    linkdata.Score = element.Children[element.ChildElementCount - 2].FirstElementChild.TextContent;
                    if (element.Children[element.ChildElementCount - 2].ChildElementCount == 2)
                    {
                        linkdata.TimeData = element.Children[element.ChildElementCount - 2].LastElementChild.TextContent;
                    }
                }
                catch (Exception e)
                {
                    continue;
                }

                rezult.Add(linkdata);
            }


            if (_bd == null)
            {
                _bd = new UnicDataDecorator(UnicData.Load("bd.data"));
                UnicDataDecorator.UpdateBase += UnicDataDecorator_UpdateBase;
            }



            var dt = new List <LinkData>();

            foreach (LinkData linkData in rezult)
            {
                var teams = linkData.Teams.Replace(" - ", "|").Split('|');
                if (teams.Length != 2)
                {
                    continue;
                }
                linkData.Team1Id = _bd.GetNumber(teams[0]);
                if (linkData.Team1Id == -1)
                {
                    continue;
                }
                linkData.Team2Id = _bd.GetNumber(teams[1]);
                if (linkData.Team2Id == -1)
                {
                    dt.Add(linkData);
                }
            }

            Logger.AddLog($"Всего lives: {rezult.Count}. Из них отобранно {dt.Count}", Logger.LogTarget.Marafon);

            return(dt);
        }
コード例 #2
0
        private void UpdateLink(FonbetResponse data)
        {
#if DEBUG
            //Делаем замер, за сколько наша линия перестраиваеться
            Stopwatch sw = new Stopwatch();
            sw.Start();
#endif
            bool changed = false;
            //Дописываем новый вид спорта
            foreach (var sport in data.Sports)
            {
                _line.Sports[sport.Id] = sport;
            }

            //добавляем новые события
            foreach (var dataEvent in data.Events)
            {
                if (dataEvent.Place == "live")
                {
                    if (!_line.Events.ContainsKey(dataEvent.Id))
                    {
                        dataEvent.Factors = new Dictionary <int, CustomFactor>();
                        if (dataEvent.Level == 1)
                        {
                            dataEvent.Team1Id = _bd.GetNumber(dataEvent.Team1);
                            dataEvent.Team2Id = _bd.GetNumber(dataEvent.Team2);
                        }
                        _line.Events.Add(dataEvent.Id, dataEvent);
                        changed = true;
                    }
                }
                else if (dataEvent.Place == "notActive")
                {
                    _line.Events.Remove(dataEvent.Id);
                    changed = true;
                }
                else
                {
                }
            }

            //Обновляем доп информацию о событиях
            foreach (EventMisc eventMisc in data.EventMiscs)
            {
                if (!_line.Events.ContainsKey(eventMisc.Id))
                {
                    Console.WriteLine($"Нет такого id {eventMisc.Id} для eventMisc");
                    continue;
                }
                _line.Events[eventMisc.Id].EventMisc = eventMisc;
                changed = true;
            }

            //Добавляем/обновляем новые ставкви
            foreach (CustomFactor factor in data.CustomFactors)
            {
                if (!_line.Events.ContainsKey(factor.E))
                {
                    Console.WriteLine($"Нет такого id {factor.E} для Factora");
                    continue;
                }
                var ev = _line.Events[factor.E];

                if (factor.V == 0 && ev.Factors.ContainsKey(factor.F))
                {
                    ev.Factors.Remove(factor.F);
                    changed = true;
                }
                else
                {
                    if (factor.V != 0)
                    {
                        ev.Factors[factor.F] = factor;
                        changed = true;
                    }
                }
            }

            //Блокируем/разблокируем события
            foreach (var block in data.EventBlocks)
            {
                if (!_line.Events.ContainsKey(block.EventId))
                {
                    Console.WriteLine($"Странно. нет такого события: {block.EventId}");
                    continue;
                }
                if (block.State == "unblocked")
                {
                    _line.Events[block.EventId].IsBlock = false;
                    foreach (var customFactor in _line.Events[block.EventId].Factors)
                    {
                        customFactor.Value.IsBlocked = false;
                    }
                    changed = true;
                }
                else if (block.State == "blocked")
                {
                    _line.Events[block.EventId].IsBlock = true;
#if DEBUG
                    Console.WriteLine($"Событие №{block.EventId} было заблокированно. {_line.Events[block.EventId].Team1}-{_line.Events[block.EventId].Team2}");
#endif
                    var bl = _line.Events[block.EventId].Factors;
                    foreach (var factor in bl)
                    {
                        factor.Value.IsBlocked = true;
                    }
                    changed = true;
                }
                else if (block.State == "partial")
                {
                    foreach (var blockFactor in block.Factors)
                    {
                        if (_line.Events[block.EventId].Factors.ContainsKey(blockFactor))
                        {
#if DEBUG
                            Console.WriteLine($"Ставка №{blockFactor} было заблокированна. {_line.Events[block.EventId].Team1}-{_line.Events[block.EventId].Team2}");
#endif
                            _line.Events[block.EventId].Factors[blockFactor].IsBlocked = true;
                        }
                        else
                        {
                            Console.WriteLine($" в {block.EventId} нет такого фактора {blockFactor}. Не могу заблокировать");
                        }
                    }
                    changed = true;
                }
                else
                {
                }
            }

            IsChanged = changed;
#if DEBUG
            sw.Stop();
            Console.WriteLine($"Линия была обновленна за {sw.Elapsed}");
            System.Threading.Thread.Sleep(1000);
#endif
        }