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))); }
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)); }
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); }
public BetshootResponse RawParse(string html) { Time = DateTime.Now.ToExtendedTime(TimeZoneKind.CurrentLocal).ToUTC(); return(this); }
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))); }
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); }
public HintwiseResponse RawParse(SeleniumDriverManager sdm) { Time = DateTime.Now.ToExtendedTime(TimeZoneKind.CurrentLocal).ToUTC(); return(this); }
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); }
public BetsResponse HistoricalBets(ExtendedTime fromDate) { return(GetPrivate(sdm => new BetsResponse() .ReceiveInfoWith <BetsResponse>(Response_InformationSent) .Parse(sdm.ToAosdm(), fromDate, _timeZone))); }
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); }