示例#1
0
        public BetsResponse Tips(TipsterResponse tipster, ExtendedTime fromDate)
        {
            var relativeAddress = tipster.Address.Remove(_address);

            return(GetPrivate(relativeAddress, sdm => new BetsResponse()
                              .ReceiveInfoWith <BetsResponse>(Response_InformationSent)
                              .Parse(sdm.ToHsdm(), tipster, fromDate, _timeZone)));
        }
示例#2
0
        public FixturesResponse Fixtures(ExtendedTime timeFrameStart, ExtendedTime timeFrameEnd)
        {
            var parameters = new Dictionary <string, string>();

            parameters.Add("timeFrameStart", $"{timeFrameStart.ToUTC().Rfc1123:yyyy-MM-dd}");
            parameters.Add("timeFrameEnd", $"{timeFrameEnd.ToUTC().Rfc1123:yyyy-MM-dd}");

            return(GetPrivate("fixtures", parameters.ToParameters(), new FixturesResponse().Parse));
        }
示例#3
0
        private static ExtendedTime ParseDate(string strDate, ExtendedTime previousDate, TimeZoneKind serverTimezone, ref int year)
        {
            var date = DateTime.ParseExact($"{strDate.RemoveHTMLSymbols().Trim()} 2000",
                                           "d. MMM HH:mm yyyy", new CultureInfo("en-GB"));
            var extDate = new DateTime(date.Month > previousDate.Rfc1123.Month
                    ? --year
                    : year, date.Month, date.Day, date.Hour, date.Minute, date.Second)
                          .ToExtendedTime(serverTimezone)
                          .ToUTC();

            return(extDate);
        }
        public CompetitionResponse Parse(JObject jCompetition)
        {
            Id              = jCompetition["id"].ToInt();
            Name            = jCompetition["caption"].ToString();
            ShortName       = jCompetition["league"].ToString();
            Year            = jCompetition["year"].ToInt();
            CurrentMatchday = jCompetition["currentMatchday"].ToInt();
            TotalMatchdays  = jCompetition["numberOfMatchdays"].ToInt();
            TeamsNumber     = jCompetition["numberOfTeams"].ToInt();
            GamesNumber     = jCompetition["numberOfGames"].ToInt();
            LastUpdated     = jCompetition["lastUpdated"].ToExtendedTimeN("yyyy-MM-dd'T'HH:mm:ss'Z'");

            return(this);
        }
        public FootballDataResponse RawParse(string json)
        {
            try
            {
                var jtRawGenericResponse = json.ToJToken(); // tylko dla sprawdzenia czy parser zwróci błąd
                if (jtRawGenericResponse is JObject joRawGenericResponse)
                {
                    Error = joRawGenericResponse.VorN("error")?.ToString();
                }

                Time = DateTime.UtcNow.ToExtendedTime();
            }
            catch (JsonReaderException) { Error = "Football-Data APi zwróciło dane w niepoprawnym formacie (innym niż json)"; }
            catch (JsonSerializationException) { }
            return(this);
        }
示例#6
0
 public BetshootResponse RawParse(string html)
 {
     Time = DateTime.Now.ToExtendedTime(TimeZoneKind.CurrentLocal).ToUTC();
     return(this);
 }
示例#7
0
 public BetsResponse Tips(TipsterResponse tipster, ExtendedTime fromDate = null)
 {
     return(Get(tipster.Name, (html, arm) => new BetsResponse()
                .ReceiveInfoWith <BetsResponse>(Response_InformationSent)
                .Parse(html, arm, tipster, fromDate, _timeZone)));
 }
示例#8
0
        public BetsResponse Parse(string html, AgilityRestManager arm, TipsterResponse tipster, ExtendedTime fromDateClientLocal, TimeZoneKind serverTimezone)
        {
            HandleErrors(html);

            var fromDate = fromDateClientLocal?.ToTimezone(serverTimezone); // konwertuj na strefę czasową serwera, nie znamy czasu serwera, prawdopodobnie UTC
            var newBets  = new List <BetResponse>();

            var spanBettingPicks = html.HtmlRoot()
                                   .Descendants()
                                   .Where(n => n.HasClass("bettingpick"))
                                   .ToArray();

            var i = 0;

            var brpLs = LocalizationManager.GetLoaderBetshootResponseParseLocalizedStrings();

            foreach (var spanBp in spanBettingPicks)
            {
                OnInformationSending($"{brpLs[0][0]} ({++i} {brpLs[0][1]} {spanBettingPicks.Length})..."); // ($"Wczytywanie zakładów ({++i} z {spanBettingPicks.Length})...");
                var strDate = spanBp.Descendants()
                              .Single(x => x.HasClass("bettingpickdate"))
                              .InnerText;
                var dateArr            = strDate.Split('-').Swap(0, 2);
                var date               = new ExtendedTime(new DateTime(dateArr[2].ToInt(), dateArr[1].ToInt(), dateArr[0].ToInt()));
                var spanBetResultClass = spanBp.Descendants("span")
                                         .Single(span => span.HasClass("mgreen", "mred", "morange", "munits2"))
                                         .GetOnlyClass(); // fix opisany w konwerterze
                var stake  = spanBp.Descendants("span").Single(span => span.HasClass("pick-stake")).InnerText.Trim().ToInt();
                var profit = spanBp.Descendants("span").Single(span => span.HasClass("munits")).InnerText.Trim().ToDoubleN();

                var pickStr           = spanBp.Descendants("span").Single(span => span.HasClass("predict")).InnerText.RemoveHTMLSymbols();
                var spanPickTeams     = spanBp.Descendants("span").Single(span => span.HasClass("pick-teams"));
                var aPickTeams        = spanPickTeams.Descendants("a").SingleOrDefault();
                var matchStr          = (aPickTeams ?? spanPickTeams).InnerText.RemoveHTMLSymbols();
                var rawMatchResultStr = spanBp.Descendants("span").Single(x => x.HasClass("mresult")).InnerText;
                var odds = spanBp.Descendants("span").Single(x => x.HasClass("pick-odd")).InnerText.ToDouble();

                var    hrefAPickTeams = aPickTeams?.GetAttributeValue("href", "");
                string disciplineStr  = null;
                string leagueName     = null;
                if (hrefAPickTeams != null)
                {
                    var disciplineLeagueStr = arm.GetHtml(hrefAPickTeams).HtmlRoot().Descendants("p")
                                              .Single(p => p.InnerText.Trim().EndsWithAny(tipster.Name)).InnerText.RemoveHTMLSymbols().Split(" - ");
                    disciplineStr = disciplineLeagueStr[0];
                    leagueName    = disciplineLeagueStr[1];
                }

                var newBet = new BetResponse
                {
                    Date        = date,
                    HomeName    = matchStr.BeforeFirst(" - "),
                    AwayName    = matchStr.AfterFirst(" - "),
                    Pick        = PickConverter.ParseToPickResponse(pickStr, matchStr),
                    MatchResult = MatchConverter.ToMatchResultResponse(rawMatchResultStr),
                    BetResult   = BetConverter.ParseBetshootResultStringToBetResult(spanBetResultClass, stake, odds, profit),
                    Odds        = odds,
                    Discipline  = DisciplineConverter.ToDisciplineTypeOrNull(disciplineStr),
                    LeagueName  = leagueName
                };

                if (fromDate != null && date < fromDate)
                {
                    break;
                }

                newBets.Add(newBet);
            }

            OnInformationSending(brpLs[1][0]);

            Tipster = tipster;
            Bets    = newBets;
            return(this);
        }
示例#9
0
 public HintwiseResponse RawParse(SeleniumDriverManager sdm)
 {
     Time = DateTime.Now.ToExtendedTime(TimeZoneKind.CurrentLocal).ToUTC();
     return(this);
 }
示例#10
0
        public BetsResponse Parse(AsianoddsSeleniumDriverManager sdm, ExtendedTime fromDate, TimeZoneKind timeZone)
        {
            HandleErrors(sdm);

            OnInformationSending("Wczytywanie informacji o zakładach...");

            sdm.HideElement(By.Id("footer"));
            var ddlDisciplineType        = sdm.FindElementByXPath("//*[@id='selAdvSearchSportType']");
            var optionSelectedDiscipline = ddlDisciplineType.FindElements(By.TagName("option")).Single(o => o.Selected);
            var discipline = optionSelectedDiscipline.Text.ToEnum <DisciplineType>();

            var liMenuHistory = sdm.FindElementByXPath("//*[@id='liMenuHistory']");

            liMenuHistory.Click();

            var txtDateFrom = sdm.FindElementByXPath("//*[@id='txtPlacementDateFrom']");

            txtDateFrom.Click();

            var divCalendar = sdm.FindElementByXPath("//*[@id='ui-datepicker-div']");

            IWebElement aDpPrevBtn() => divCalendar.FindElements(By.TagName("a")).Single(a => a.HasClass("ui-datepicker-prev"));

            while (!aDpPrevBtn().HasClass("ui-state-disabled"))
            {
                aDpPrevBtn().Click();
            }

            var tdDays     = divCalendar.FindElements(By.XPath(".//td[@data-handler='selectDay']"));
            var tdFirstDay = tdDays.MinBy(td => td.FindElement(By.TagName("a")).Text.ToInt());

            tdFirstDay.Click();

            var btnSearchHistory = sdm.FindElementByXPath("//*[@id='btnSearchHistorySearchPanel']");

            btnSearchHistory.TryClickUntilNotCovered();

            const string df      = "M/d/yyyy";
            var          newBets = new List <BetResponse>();

            IWebElement divHistoricalBets() => sdm.FindElementById("HistoryPageBetsContanier");
            IEnumerable <IWebElement> spanDates() => divHistoricalBets().FindElements(By.ClassName("spanDateDay"))
            .Where(span => span.Text?.Length > 0);

            sdm.Wait.Until(d => spanDates().Any());
            var dates       = spanDates().Select(span => span.Text.ToDateTimeExact(df)).Where(d => d.ToExtendedTime() >= fromDate).ToArray();
            var unusedDates = dates.ToList();

            while (unusedDates.Any())
            {
                OnInformationSending($"Ładowanie zakładów, dzień {dates.Length - unusedDates.Count + 1} z {dates.Length}...");

                var currDate = unusedDates.Min();

                var spanCurrDate        = spanDates().Single(span => span.Text.ToDateTimeExact(df) == currDate);
                var trCurrStatementItem = spanCurrDate.FindElement(By.XPath(".//ancestor::tr[@class='trStatementItem']"));
                trCurrStatementItem.Click();

                var divDayHistoricalBets = sdm.FindElementById("HistoryPageBetsContanier");
                var trBets = divDayHistoricalBets.FindElements(By.ClassName("trSummaryItem")).Where(tr => tr.Displayed).ToArray();

                foreach (var trBet in trBets)
                {
                    var bet        = new BetResponse();
                    var spanTeams  = trBet.FindElement(By.ClassName("span_homeName_awayName"));
                    var homeAway   = spanTeams.Text.AfterFirst("]").Trim().Split(" -VS- ");
                    var home       = homeAway[0].BeforeFirst(" - ");
                    var away       = homeAway[1].BeforeFirst(" - ");
                    var spanDate   = trBet.FindElement(By.ClassName("spanDate"));
                    var strTime    = spanDate.Text.Trim();
                    var spanLeague = trBet.FindElement(By.ClassName("span_leagueName"));
                    var strLeague  = spanLeague.Text.Trim().AfterFirst("*").Split(" ")
                                     .Select(w => w.Length > 0 ? w.Take(1).ToUpper() + w.Skip(1).ToLower() : w).JoinAsString(" ");
                    var spanPick       = trBet.FindElement(By.ClassName("span_homeaway_hdporgoal"));
                    var strPick        = spanPick.Text.Trim();
                    var spanOdds       = trBet.FindElement(By.ClassName("span_odds"));
                    var strOdds        = spanOdds.Text.Trim();
                    var spanStatus     = trBet.FindElement(By.ClassName("spanStatus"));
                    var strStatus      = spanStatus.Text.Trim();
                    var spanStake      = trBet.FindElement(By.ClassName("spanStake"));
                    var strStake       = spanStake.Text.Trim();
                    var spanScores     = trBet.FindElement(By.ClassName("spanScores"));
                    var strMatchResult = spanScores.Text.AfterFirst("FT").Trim();

                    bet.Date          = strTime.ToExtendedTime("MM/dd/yyyy h:mm tt", timeZone);
                    bet.Discipline    = discipline;
                    bet.LeagueName    = strLeague;
                    bet.MatchHomeName = home;
                    bet.MatchAwayName = away;
                    bet.PickChoice    = ParsePickChoice(strPick, home, away);
                    bet.PickValue     = strPick.ContainsAll("[", "]") ? strPick.Between("[", "]").ToDoubleN()?.Abs() : null;
                    bet.Odds          = strOdds.ToDouble();
                    bet.BetResult     = ParseBetResult(strStatus);
                    bet.Stake         = strStake.ToDouble();
                    bet.HomeScore     = strMatchResult.BeforeFirst(":").Trim().ToIntN();
                    bet.AwayScore     = strMatchResult.AfterFirst(":").Trim().ToIntN();

                    newBets.Add(bet);
                }

                var btnBackToStatements = sdm.FindElementByClassName("BackToStatements");
                btnBackToStatements.Click();

                unusedDates.Remove(currDate);
            }

            OnInformationSending("Zakłady zostały pobrane z AsianOdds...");

            Bets = newBets;
            return(this);
        }
示例#11
0
 public BetsResponse HistoricalBets(ExtendedTime fromDate)
 {
     return(GetPrivate(sdm => new BetsResponse()
                       .ReceiveInfoWith <BetsResponse>(Response_InformationSent)
                       .Parse(sdm.ToAosdm(), fromDate, _timeZone)));
 }
示例#12
0
        public BetsResponse Parse(HintwiseSeleniumDriverManager sdm, TipsterResponse tipster, ExtendedTime fromDateClientLocal, TimeZoneKind serverTimezone)
        {
            HandleErrors(sdm);

            OnInformationSending("Zbieranie dodatkowych informacji...");

            const string matchSep        = " vs ";
            var          originalAddress = sdm.Url;
            var          fromDate        = fromDateClientLocal?.ToTimezone(serverTimezone); // konwertuj na strefę czasową serwera
            var          newBets         = new List <BetResponse>();

            IWebElement getDivCurrentPredictions() => sdm.FindElementByXPath(".//div[@id='predictions-grid']");

            var divCurrentPredictions   = getDivCurrentPredictions();
            var currPredLastPageQueries = sdm.PagerLastPageQueries(divCurrentPredictions);
            var currPredPagesCount      = sdm.PagerLastPage(currPredLastPageQueries);

            IWebElement getDivHistoricalPredictions() => sdm.FindElementByXPath(".//div[@id='history-predictions']");

            var divHistoricalPredictions = getDivHistoricalPredictions();
            var histPredLastPageQueries  = sdm.PagerLastPageQueries(divHistoricalPredictions);
            var histPredPagesCount       = sdm.PagerLastPage(histPredLastPageQueries);

            var previousDate = ExtendedTime.UtcNow.ToTimezone(serverTimezone); // w strefie czassowej serwera
            var year         = previousDate.Rfc1123.Year;

            OnInformationSending("Wczytywanie informacji o zakładach...");

            // Obecne Zakłady

            for (var currPage = 1; currPage <= currPredPagesCount; currPage++)
            {
                OnInformationSending($"Wczytywanie nowych zakładów (strona {currPage} z {currPredPagesCount})...");

                if (divCurrentPredictions.FindElement(By.TagName("span")).Text.ToLower().Contains("no results found"))
                {
                    break;
                }

                sdm.PagerNavigateToCurrentPage(currPage, currPredLastPageQueries, originalAddress);
                divCurrentPredictions = getDivCurrentPredictions();
                var trCurrPredRows = divCurrentPredictions.FindElements(By.XPath(".//table[@class='items']/tbody/tr"));

                foreach (var trCurrPredRow in trCurrPredRows)
                {
                    var tdCurrPredRowCells = trCurrPredRow.FindElements(By.TagName("td"));

                    sdm.DisableWaitingForElements();
                    var isFree = tdCurrPredRowCells[3].FindElements(By.XPath("input[@type='button']")).Count == 0;
                    sdm.EnableWaitingForElements();

                    var extDate    = ParseDate(tdCurrPredRowCells[0].Text, previousDate, serverTimezone, ref year);
                    var discipline = DisciplineConverter.ToDisciplineType(tdCurrPredRowCells[1].Text.Trim());
                    var matchStr   = tdCurrPredRowCells[2].FindElement(By.TagName("a")).Text.RemoveHTMLSymbols().Trim();
                    var pickStr    = isFree ? tdCurrPredRowCells[3].Text.BeforeFirst("(").RemoveHTMLSymbols().Trim() : "Ukryty";

                    var newBet = new BetResponse
                    {
                        Date        = extDate, // czas pobierany ma być zawsze w UTC
                        HomeName    = matchStr.BeforeFirst(matchSep),
                        AwayName    = matchStr.AfterFirst(matchSep),
                        Pick        = PickConverter.ParseToPickResponse(pickStr, matchStr),
                        MatchResult = MatchResult.Inconclusive(),
                        BetResult   = BetResult.Pending,
                        Odds        = 0,
                        Discipline  = discipline
                    };
                    newBets.Add(newBet);
                }
            }

            // Historyczne wyniki

            for (var currPage = 1; currPage <= histPredPagesCount; currPage++) //
            {
                OnInformationSending($"Wczytywanie historycznych zakładów (strona {currPage} z {histPredPagesCount})...");

                if (divHistoricalPredictions.FindElement(By.TagName("span")).Text.ToLower().Contains("no results found"))
                {
                    break;
                }

                sdm.PagerNavigateToCurrentPage(currPage, histPredLastPageQueries, originalAddress);
                divHistoricalPredictions = getDivHistoricalPredictions();
                var trHistPredRows = divHistoricalPredictions.FindElements(By.XPath(".//table[@class='items']/tbody/tr"));

                foreach (var trHistPredRow in trHistPredRows)
                {
                    var tdHistPredRowCells = trHistPredRow.FindElements(By.TagName("td"));

                    var extDate           = ParseDate(tdHistPredRowCells[0].Text, previousDate, serverTimezone, ref year);
                    var discipline        = DisciplineConverter.ToDisciplineType(tdHistPredRowCells[1].Text.Trim());
                    var matchStr          = tdHistPredRowCells[2].FindElement(By.TagName("a")).Text.RemoveHTMLSymbols().Trim();
                    var pickStr           = tdHistPredRowCells[3].Text.BeforeFirst("(").RemoveHTMLSymbols().Trim();
                    var rawMatchResultStr = tdHistPredRowCells[4].Text.RemoveHTMLSymbols().Trim();
                    var betResult         = tdHistPredRowCells[5].Text.BeforeFirst("(").RemoveHTMLSymbols().Trim().ToLower() == "win"
                        ? BetResult.Won : BetResult.Lost;
                    var odds = tdHistPredRowCells[3].Text.Between("(", ")").RemoveHTMLSymbols().Trim().ToDouble();

                    var newBet = new BetResponse
                    {
                        Date        = extDate,
                        HomeName    = matchStr.BeforeFirst(matchSep),
                        AwayName    = matchStr.AfterFirst(matchSep),
                        Pick        = PickConverter.ParseToPickResponse(pickStr, matchStr),
                        MatchResult = MatchConverter.ToMatchResultResponse(rawMatchResultStr),
                        BetResult   = betResult,
                        Odds        = odds,
                        Discipline  = discipline
                    };

                    previousDate = extDate;
                    newBets.Add(newBet);

                    if (fromDate != null && extDate < fromDate)
                    {
                        break;
                    }
                }

                if (fromDate != null && newBets.Last().Date < fromDate)
                {
                    newBets.Remove(newBets.Last());
                    break;
                }
            }

            OnInformationSending("Wczytano zakłady");

            Tipster = tipster;
            Bets    = newBets;
            return(this);
        }