public List <Bet> Parse() { Bets.Clear(); _req.CharacterSet = Encoding.UTF8; _req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"; //_req.Proxy=ProxyClient.Parse(ProxyType.Http,"127.0.0.1:8888"); Stopwatch sw = new Stopwatch(); sw.Start(); if (_fonbetClient == null) { _fonbetClient = new FonbetClient(_url); _fonbetClient.Start(); } var line = _fonbetClient.GetLine(); List <Bet> rez = new List <Bet>(); var lastTime = (DateTime.Now - line.LastUpdate).TotalMilliseconds; if (lastTime > MainConfigurate.Configurate.FonbetMaxTime) { Logger.AddLog($"Последний раз обновляли линию {lastTime} мс назад. Это долго", Logger.LogTarget.Fonbet, Logger.LogLevel.Warn); } else { foreach (KeyValuePair <int, Event> @event in line.Events) { var ev = @event.Value; if (ev.IsBlock) { continue; } if (ev.Level != 1) { continue; } string team1 = ev.Team1; string team2 = ev.Team2; string sportName = line.Sports[ev.SportId].Name; /* * * 974,1809,1812,1815 \ Итб1 * 976,1810,1813,1816 / Итм1 * * 978,1854,1873,1880 \ Итб2 * 980,1871,1874,1881 / Итм2 * * */ Bet bet = new Bet { URL = "live/?locale=ru#" + ev.Id, Bookmaker = BookmakerType.Fonbet, Team1 = team1, Team2 = team2 }; if (ev.Team1Id == -1) { continue; } if (ev.Team2Id == -1) { continue; } bet.Team1Id = ev.Team1Id; bet.Team2Id = ev.Team2Id; IBTBet ibt1 = new IBTBet(); IBTBet ibt2 = new IBTBet(); ibt1.TeamName = bet.Team1; ibt2.TeamName = bet.Team2; bet.SportType = SportTypeHelper.Parse(sportName); bet.Groupe = sportName.Split('.')[0].Trim(); bet.Name = team1 + " - " + team2; bet.Site = "F"; bet = SetEvents(bet, ev); if (bet == null) { continue; } if (ev.Factors.ContainsKey(974)) { if (!ev.Factors[974].IsBlocked) { ibt1.Tmax = ev.Factors[974].V; ibt1.Tmaxo = ev.Factors[974].E + "f974,974," + ev.Id; } } if (ev.Factors.ContainsKey(976)) { if (!ev.Factors[976].IsBlocked) { ibt1.Tmin = ev.Factors[976].V; ibt1.Tmino = ev.Factors[976].E + "f976,976," + ev.Id; ibt1.Coeff = SetValue(ev.Factors[976].Pt); } } if (ev.Factors.ContainsKey(978)) { if (!ev.Factors[978].IsBlocked) { ibt2.Tmax = ev.Factors[978].V; ibt2.Tmaxo = ev.Factors[978].E + "f978,978," + ev.Id; ibt2.Coeff = SetValue(ev.Factors[978].Pt); } } if (ev.Factors.ContainsKey(980)) { if (!ev.Factors[980].IsBlocked) { ibt2.Tmin = ev.Factors[980].V; ibt2.Tmino = ev.Factors[980].E + "f980,980," + ev.Id; } } if (ibt1.Isvalid()) { bet.IBTList.Add(ibt1); } if (ibt2.Isvalid()) { bet.IBTList.Add(ibt2); } //Достаем список доп. таймов к матчу List <Event> times = line.GetAdditionTime(ev.Id); foreach (Event time in times) { Bet betmini = bet.ShortCopy(); betmini = SetEvents(betmini, time, false); if (betmini == null) { continue; } if (betmini.Games.Count != 0) { bet.Games.AddRange(betmini.Games); betmini.Games.Clear(); } Regex reg = new Regex("(.-)"); Match match = reg.Match(time.Name); string partData = match.Value.Split('-').First(); if (time.Name.Contains("пол")) { partData = "1" + partData; } SportTimePart part = SportTimePartHelper.Parse(partData); if (part == SportTimePart.Nan) { continue; } bet.Parts.Add(part, betmini); } rez.Add(bet); } } sw.Stop(); if (sw.ElapsedMilliseconds < 1000) { Thread.Sleep(1000 - (int)sw.ElapsedMilliseconds); } Logger.AddLog($"Fonbet parse: {sw.Elapsed} мс. ставок: {rez.Count}; всего ставок: {line.Events.Count}", Logger.LogTarget.Fonbet); return(rez); }
private static void ParseBet(Bet bet, IElement tableHeader, IElement tableMainDesc) { for (int i = 2; i < tableHeader.ChildElementCount; i++) { if (tableMainDesc.TextContent.Contains("Прием ставок приостановлен")) { break; } var headerString = tableHeader.ChildNodes[i].TextContent; if (headerString == "Фора") { if (tableMainDesc.Children[i].ChildElementCount == 1) { bet._F1_Cof = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); bet._F1 = TryFloatParse(tableMainDesc.Children[i + 1].Children.FirstOrDefault()?.TextContent); bet._F1o = tableMainDesc.Children[i + 1].Children.FirstOrDefault()?.Id; if (bet._F1o == null) { bet._F1 = 0; } } else if (tableMainDesc.Children[i].ChildElementCount == 2) { bet._F1_Cof = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); bet._F1 = TryFloatParse(tableMainDesc.Children[i + 1].Children.FirstOrDefault()?.TextContent); bet._F1o = tableMainDesc.Children[i + 1].Children[0].Children[0].Children.FirstOrDefault()?.Id; if (bet._F1o == null) { bet._F1 = 0; } bet._F2_Cof = TryFloatParse(tableMainDesc.Children[i].Children[1].TextContent); bet._F2 = TryFloatParse(tableMainDesc.Children[i + 1].Children[1].TextContent); bet._F2o = tableMainDesc.Children[i + 1].Children[1].Children[0].Children.FirstOrDefault()?.Id; if (bet._F2o == null) { bet._F2 = 0; } } i++; } else if (headerString == "Т") { bet._Total_Cof = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); bet._Tmax = TryFloatParse(tableMainDesc.Children[i + 1].Children.FirstOrDefault()?.TextContent); if (bet._Tmax != 0) { bet._Tmaxo = tableMainDesc.Children[i + 1].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._Tmaxo == null) { bet._Tmax = 0; } bet._Tmin = TryFloatParse(tableMainDesc.Children[i + 2].Children.FirstOrDefault()?.TextContent); if (bet._Tmin != 0) { bet._Tmino = tableMainDesc.Children[i + 2].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._Tmino == null) { bet._Tmin = 0; } i = i + 2; } else if (headerString == "П1") { bet._1 = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); if (bet._1 != 0) { bet._1o = tableMainDesc.Children[i].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._1o == null) { bet._1 = 0; } } else if (headerString == "X") { bet._X = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); if (bet._X != 0) { bet._Xo = tableMainDesc.Children[i].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._Xo == null) { bet._X = 0; } } else if (headerString == "П2") { bet._2 = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); if (bet._2 != 0) { bet._2o = tableMainDesc.Children[i].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._2o == null) { bet._2 = 0; } } else if (headerString == "1X") { bet._1X = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); if (bet._1X != 0) { bet._1Xo = tableMainDesc.Children[i].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._1Xo == null) { bet._1X = 0; } } else if (headerString == "12") { bet._12 = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); if (bet._12 != 0) { bet._12o = tableMainDesc.Children[i].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._12o == null) { bet._12 = 0; } } else if (headerString == "X2") { bet._X2 = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); if (bet._X2 != 0) { bet._X2o = tableMainDesc.Children[i].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (bet._X2o == null) { bet._X2 = 0; } } else if (headerString == "iТ") { IBTBet ibet = new IBTBet(); ibet.TeamName = bet.Team1; ibet.Coeff = TryFloatParse(tableMainDesc.Children[i].Children.FirstOrDefault()?.TextContent); ibet.Tmax = TryFloatParse(tableMainDesc.Children[i + 1].Children.FirstOrDefault()?.TextContent); if (ibet.Tmax != 0) { ibet.Tmaxo = tableMainDesc.Children[i + 1].Children[0].Children[0].Children.FirstOrDefault()?.Id; } ibet.Tmin = TryFloatParse(tableMainDesc.Children[i + 2].Children.FirstOrDefault()?.TextContent); if (ibet.Tmin != 0) { ibet.Tmino = tableMainDesc.Children[i + 2].Children[0].Children[0].Children.FirstOrDefault()?.Id; } if (ibet.Isvalid()) { bet.IBTList.Add(ibet); } if (tableMainDesc.Children[i].Children.Length >= 2) { IBTBet ibet2 = new IBTBet(); ibet2.TeamName = bet.Team2; ibet2.Coeff = TryFloatParse(tableMainDesc.Children[i].Children[1]?.TextContent); ibet2.Tmax = TryFloatParse(tableMainDesc.Children[i + 1].Children[1].TextContent); if (ibet2.Tmax != 0) { ibet2.Tmaxo = tableMainDesc.Children[i + 1].Children[1].Children[0].Children[0].Id; } ibet2.Tmin = TryFloatParse(tableMainDesc.Children[i + 2].Children[1]?.TextContent); if (ibet2.Tmin != 0) { ibet2.Tmino = tableMainDesc.Children[i + 2].Children[1].Children[0].Children[0].Id; } if (ibet2.Isvalid()) { bet.IBTList.Add(ibet2); } } } } }