Exemple #1
0
        public async Task <string> AddBetMatchAsync(int matchId, string userId, int homeTeamGoals, int guestTeamGoals)
        {
            var bet = new BetMatch()
            {
                FirstTeamGoals  = homeTeamGoals,
                SecondTeamGoals = guestTeamGoals,
                MatchId         = matchId,
                UserId          = userId
            };

            await this.DbContext.BetsForMatch.AddAsync(bet);

            await this.DbContext.SaveChangesAsync();

            return(null);
        }
Exemple #2
0
        public async Task IsBeggined_ForFutureMatch_ShoudReturnFalse()
        {
            var bet = new BetMatch()
            {
                Match = new Match()
                {
                    Date = DateTime.Now.AddDays(1)
                }
            };

            this.dbContext.BetsForMatch.Add(bet);
            this.dbContext.SaveChanges();

            var service = new BetService(this.dbContext, null);

            var result = await service.IsBeggined(false, bet.Id);

            Assert.IsFalse(result);
        }
 private int CalculatePoints(BetMatch bet, Match match)
 {
     if (match.FirstTeamGoals == null || match.SecondTeamGoals == null)
     {
         return(0);
     }
     else if (match.FirstTeamGoals == bet.FirstTeamGoals && match.SecondTeamGoals == bet.SecondTeamGoals)
     {
         return(Constants.POINTS_MATCH_BIG_SCORE);
     }
     else if ((match.FirstTeamGoals == match.SecondTeamGoals && bet.FirstTeamGoals == bet.SecondTeamGoals) ||
              (match.FirstTeamGoals > match.SecondTeamGoals && bet.FirstTeamGoals > bet.SecondTeamGoals) ||
              (match.FirstTeamGoals < match.SecondTeamGoals && bet.FirstTeamGoals < bet.SecondTeamGoals))
     {
         return(Constants.POINTS_MATCH_SMALL_SCORE);
     }
     else
     {
         return(0);
     }
 }
Exemple #4
0
        public static void newAnalyse()
        {
            var NormalisedSelections = new List <NormalisedSelection>();
            var TwoWayCompares       = new List <TwoWayCompare>();
            var ProfitableReturns    = new List <TwoOddsReturn>();


            if (System.IO.File.Exists(BetConstants.folder + "NormalisedSelection.xml"))
            {
                NormalisedSelections = FileUtility.LoadFromXML <NormalisedSelection>(BetConstants.folder + "NormalisedSelection.xml");
            }
            if (System.IO.File.Exists(BetConstants.folder + "TwoWayComparism.xml"))
            {
                TwoWayCompares = FileUtility.LoadFromXML <TwoWayCompare>(BetConstants.folder + "TwoWayComparism.xml");
            }

            var bet9jaMatches    = FileUtility.LoadFromXML <BetMatch>(BetConstants.bet9jaFilePath);
            var sportyBetMatches = FileUtility.LoadFromXML <BetMatch>(BetConstants.sportyBetFilePath);
            var betPawaMatches   = FileUtility.LoadFromXML <BetMatch>(BetConstants.betPawaFilePath);
            var merryBetMatches  = FileUtility.LoadFromXML <BetMatch>(BetConstants.merryBetFilePath);

            //loops through all bet9ja matches
            for (int i = 0; i < bet9jaMatches.Count; i++)
            {
                var b9match = bet9jaMatches[i];


                #region Get all Matches that match the league and time of current match
                var sbLeagueNTimeTrimmed = sportyBetMatches.Where(m => (b9match.League.ToLower().Contains(m.League.ToLower()) || m.League.ToLower().Contains(b9match.League.ToLower())) && m.DateTimeOfMatch.ToUniversalTime().Equals(b9match.DateTimeOfMatch.ToUniversalTime())).ToList();
                var bpLeagueNTimeTrimmed = betPawaMatches.Where(m => (b9match.League.ToLower().Contains(m.League.ToLower()) || m.League.ToLower().Contains(b9match.League.ToLower())) && m.DateTimeOfMatch.ToUniversalTime().Equals(b9match.DateTimeOfMatch.ToUniversalTime())).ToList();
                var mbLeagueNTimeTrimmed = merryBetMatches.Where(m => (b9match.League.ToLower().Contains(m.League.ToLower()) || m.League.ToLower().Contains(b9match.League.ToLower())) && m.DateTimeOfMatch.ToUniversalTime().Equals(b9match.DateTimeOfMatch.ToUniversalTime())).ToList();
                #endregion

                var bpMatch = new BetMatch();
                var mbMatch = new BetMatch();
                var sbMatch = new BetMatch();

                if (bpLeagueNTimeTrimmed.Count() < 1)
                {
                    bpMatch = null;
                }
                else
                {
                    bpMatch = Jobs.SameMatch(b9match, bpLeagueNTimeTrimmed);
                }

                if (mbLeagueNTimeTrimmed.Count() < 1)
                {
                    mbMatch = null;
                }
                else
                {
                    mbMatch = Jobs.SameMatch(b9match, mbLeagueNTimeTrimmed);
                }

                if (sbLeagueNTimeTrimmed.Count() < 1)
                {
                    sbMatch = null;
                }
                else
                {
                    sbMatch = Jobs.SameMatch(b9match, sbLeagueNTimeTrimmed);
                }

                Console.WriteLine("\n\nBet9ja Match : " + b9match.TeamNames +
                                  " ---sportybets found : " + (sbMatch != null ? sbMatch.TeamNames : "null") +
                                  " ---Betpawas found : " + (bpMatch != null ? bpMatch.TeamNames : "null") +
                                  " ---Merrybets found : " + (mbMatch != null ? mbMatch.TeamNames : "null")
                                  );


                //calculates the percentage return on the set of matches
                ProfitableReturns.AddRange(TwoWayCompare(b9match, bpMatch, mbMatch, sbMatch));
            }

            int profitable = 0;
            foreach (var item in ProfitableReturns)
            {
                if (item.PercentageReturns > 100)
                {
                    profitable++;
                    Console.WriteLine(item.Team + "__" + item.Site1 + "__" + item.Game1 + "__" + item.Odd1 + "__" + item.Site2 + "__" + item.Game2 + "__" + item.Odd2 + "__ (" + item.PercentageReturns + ")");
                }
            }

            Console.WriteLine("Profitable = " + profitable);
        }
Exemple #5
0
        public static List <TwoOddsReturn> TwoWayCompare(BetMatch b9Match, BetMatch bpMatch, BetMatch mbMatch, BetMatch sbMatch)
        {
            var NormalisedSelections = new List <NormalisedSelection>();
            var TwoWayCompares       = new List <TwoWayCompare>();
            var ProfitableReturns    = new List <TwoOddsReturn>();


            if (System.IO.File.Exists(BetConstants.folder + "NormalisedSelection.xml"))
            {
                NormalisedSelections = FileUtility.LoadFromXML <NormalisedSelection>(BetConstants.folder + "NormalisedSelection.xml");
            }
            if (System.IO.File.Exists(BetConstants.folder + "TwoWayComparism.xml"))
            {
                TwoWayCompares = FileUtility.LoadFromXML <TwoWayCompare>(BetConstants.folder + "TwoWayComparism.xml");
            }

            foreach (var item in TwoWayCompares)
            {
                var match = new Match();
                match.Teams = b9Match.TeamNames;

                match.Odd1Name = item.Selection1;
                match.Odd2Name = item.Selection2;

                match.MatchOdds1 = new List <MatchOdds>();
                match.MatchOdds2 = new List <MatchOdds>();

                var ItemNS1 = NormalisedSelections.First(m => m.Normal == item.Selection1);

                if (!string.IsNullOrWhiteSpace(ItemNS1.Bet9ja))
                {
                    if (b9Match != null)
                    {
                        var bet9jaMatchOdd = b9Match.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS1.Bet9ja.Replace(" ", ""));
                        if (bet9jaMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(bet9jaMatchOdd.Value, out odd))
                            {
                                match.MatchOdds1.Add(new MatchOdds()
                                {
                                    Odd = odd, Site = "bet9ja"
                                });
                            }
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(ItemNS1.BetPawa))
                {
                    if (bpMatch != null)
                    {
                        var betPawaMatchOdd = bpMatch.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS1.BetPawa.Replace(" ", ""));
                        if (betPawaMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(betPawaMatchOdd.Value, out odd))
                            {
                                match.MatchOdds1.Add(new MatchOdds()
                                {
                                    Odd = odd, Site = "betpawa"
                                });
                            }
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(ItemNS1.MerryBet))
                {
                    if (mbMatch != null)
                    {
                        var merrybetMatchOdd = mbMatch.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS1.MerryBet.Replace(" ", ""));
                        if (merrybetMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(merrybetMatchOdd.Value, out odd))
                            {
                                match.MatchOdds1.Add(new MatchOdds()
                                {
                                    Odd = odd, Site = "merrybet"
                                });
                            }
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(ItemNS1.SportyBet))
                {
                    if (sbMatch != null)
                    {
                        var sportybetMatchOdd = sbMatch.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS1.SportyBet.Replace(" ", ""));
                        if (sportybetMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(sportybetMatchOdd.Value, out odd))
                            {
                                match.MatchOdds1.Add(new Classes.CalcClasses.MatchOdds()
                                {
                                    Odd = odd, Site = "sportybet"
                                });
                            }
                        }
                    }
                }



                var ItemNS2 = NormalisedSelections.First(m => m.Normal == item.Selection2);

                if (!string.IsNullOrWhiteSpace(ItemNS2.Bet9ja))
                {
                    if (b9Match != null)
                    {
                        var bet9jaMatchOdd = b9Match.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS2.Bet9ja.Replace(" ", ""));
                        if (bet9jaMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(bet9jaMatchOdd.Value, out odd))
                            {
                                match.MatchOdds2.Add(new Classes.CalcClasses.MatchOdds()
                                {
                                    Odd = odd, Site = "bet9ja"
                                });
                            }
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(ItemNS2.BetPawa))
                {
                    if (bpMatch != null)
                    {
                        var betPawaMatchOdd = bpMatch.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS2.BetPawa.Replace(" ", ""));
                        if (betPawaMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(betPawaMatchOdd.Value, out odd))
                            {
                                match.MatchOdds2.Add(new MatchOdds()
                                {
                                    Odd = odd, Site = "betpawa"
                                });
                            }
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(ItemNS2.MerryBet))
                {
                    if (mbMatch != null)
                    {
                        var merrybetMatchOdd = mbMatch.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS2.MerryBet.Replace(" ", ""));
                        if (merrybetMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(merrybetMatchOdd.Value, out odd))
                            {
                                match.MatchOdds2.Add(new MatchOdds()
                                {
                                    Odd = odd, Site = "merrybet"
                                });
                            }
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(ItemNS2.SportyBet))
                {
                    if (sbMatch != null)
                    {
                        var sportybetMatchOdd = sbMatch.Odds.FirstOrDefault(m => m.SelectionFull.Replace(" ", "") == ItemNS2.SportyBet.Replace(" ", ""));
                        if (sportybetMatchOdd != null)
                        {
                            double odd = 0f;
                            if (double.TryParse(sportybetMatchOdd.Value, out odd))
                            {
                                match.MatchOdds2.Add(new Classes.CalcClasses.MatchOdds()
                                {
                                    Odd = odd, Site = "sportybet"
                                });
                            }
                        }
                    }
                }

                foreach (var odd1 in match.MatchOdds1)
                {
                    if (odd1.Odd == 0)
                    {
                        continue;
                    }

                    for (int j = 0; j < match.MatchOdds2.Count; j++)
                    {
                        var odd2 = match.MatchOdds2[j];

                        if (odd2.Odd == 0)
                        {
                            continue;
                        }

                        var rtn = Jobs.calculateForTwoOdds(odd1.Odd, odd2.Odd);

                        rtn.Site1 = odd1.Site;
                        rtn.Site2 = odd2.Site;

                        rtn.Game1 = match.Odd1Name;
                        rtn.Game2 = match.Odd2Name;

                        rtn.Team = match.Teams;

                        ProfitableReturns.Add(rtn);
                    }
                }
            }

            return(ProfitableReturns);
        }
        public async Task <List <BetMatch> > ScrapeSportyBetDailyAsync(HttpClient client)
        {
            var currdate = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

            try
            {
                //get todays data
                string FirstresponseBody = await
                                           client.GetStringAsync("https://www.sportybet.com/api/ng/factsCenter/pcUpcomingEvents?sportId=sr%3Asport%3A1&marketId=1%2C18%2C10%2C29%2C11%2C26%2C36%2C14&pageSize=100&pageNum=1&timeline=24&_t=" + currdate);

                //serialize data
                var t = JsonConvert.DeserializeObject <SearchData>(FirstresponseBody);

                var eventsId = t.data.tournaments.SelectMany(x => x.events).Select(m => m.eventId);


                currdate = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
                var tasks = new List <Task <string> >();

                tasks = eventsId.Select(ids => client.GetStringAsync("https://www.sportybet.com/api/ng/factsCenter/event?eventId=" + ids + "&productId=3&_t=" + currdate)).ToList();

                await Task.WhenAll(tasks);

                var responses = tasks.Select(task => JsonConvert.DeserializeObject <ReceievedData.SportyBetData>(task.Result));

                var returnData = new List <BetMatch>();
                //loop through each match
                foreach (var item in responses.ToList())
                {
                    var matchStart = DateTimeOffset.FromUnixTimeMilliseconds(item.data.estimateStartTime).DateTime.AddHours(1);

                    foreach (var market in item.data.markets)
                    {
                        var Odds = market.outcomes.Select(l => new BetOdds
                        {
                            Selection = l.desc,
                            MainType  = market.desc,
                            Type      = l.desc,
                            Value     = l.odds
                        }).ToList();

                        returnData.Add(new BetMatch
                        {
                            League          = item.data.sport.category.tournament.name,
                            DateTimeOfMatch = matchStart,
                            TeamNames       = item.data.homeTeamName + " - " + item.data.awayTeamName,
                            Odds            = Odds,
                            Country         = item.data.sport.category.name,
                        });
                    }
                }
                var leagues = new List <string>();

                foreach (var item in returnData)
                {
                    if (!leagues.Any(m => m == item.League))
                    {
                        leagues.Add(item.League);
                    }
                }

                var matchGrouped = new List <BetMatch>();

                foreach (var item in leagues)
                {
                    var sbg        = returnData.Where(m => m.League == item);
                    var matchgroup = sbg.GroupBy(m => m.TeamNames);

                    foreach (var i in matchgroup)
                    {
                        var sb = new BetMatch()
                        {
                            Country         = i.First().Country,
                            TeamNames       = i.First().TeamNames,
                            DateTimeOfMatch = i.First().DateTimeOfMatch,
                            Odds            = i.SelectMany(n => n.Odds).ToList(),
                            League          = i.First().League,
                            Site            = "sportyBet",
                        };

                        matchGrouped.Add(sb);
                    }
                }
                Console.WriteLine("--Sportybet Done.");
                return(matchGrouped);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw;
            }
        }
        public static async Task <List <BetMatch> > Scrape(HttpClient client)
        {
            //url to get all football markets
            var url = "https://1xbet.ng/LineFeed/GetChampsZip?sport=1&lng=en&tf=2200000&tz=1&country=132&partner=159&virtualSports=true";

            var betMatches = new List <BetMatch>();

            try
            {
                Console.WriteLine("Started scraping 1xBet");

                //get todays data
                var response = await client.GetStringAsync(url);



                //get structure of odds
                var ddt = await GetBetModelJsonAsync(client);

                var betsName           = GetBetsName(ddt);
                var betsNameModelGroup = GetBetsNameModel(ddt);

                //var response = responseTask.Result;
                var todayData = JsonConvert.DeserializeObject <FootBallTypes>(response);

                if (todayData == null)
                {
                    return(null);
                }



                //loop through leagues/countries
                foreach (var market in todayData.Value)
                {
                    //removes unneccesary leagues
                    if (market.L.ToLower().Trim().Contains("statistics round") || market.L.ToLower().Trim().Contains("special"))
                    {
                        continue;
                    }



                    //get country and league
                    var arr = market.L.Split('.');


                    string country = "";
                    string league  = "";
                    league = GetLeagueAndOrCountryNames(market, arr, ref country);

                    //get matches in league
                    var mUrl = $"https://1xbet.ng/LineFeed/Get1x2_VZip?champs={market.Id}&count=10&lng=en&mode=4&top=true&partner=159";

                    var marketResponse = await client.GetAsync(mUrl);


                    if (!marketResponse.IsSuccessStatusCode)
                    {
                        continue;
                    }


                    var dt = await marketResponse.Content.ReadAsStringAsync();

                    var matchData = JsonConvert.DeserializeObject <SecondData>(dt);

                    //create list of match tasks
                    var allMatchTasks = matchData.Value.Select(x => client.GetAsync($"https://1xbet.ng/LineFeed/GetGameZip?id={x.Ci}&lng=en&cfview=0&isSubGames=true&GroupEvents=true&allEventsGroupSubGames=true&countevents=250&partner=159"));

                    //get list of matche and thier data
                    var allMatches = await Task.WhenAll(allMatchTasks);


                    foreach (var item in allMatches)
                    {
                        if (!item.IsSuccessStatusCode)
                        {
                            continue;
                        }
                        var singleMatchdata = await item.Content.ReadAsStringAsync();

                        var singleMatch = JsonConvert.DeserializeObject <_1xBetMatchData>(singleMatchdata);

                        //compare dates to get matches for today only.

                        var date1 = DateTimeOffset.FromUnixTimeSeconds(singleMatch.Value.S).DateTime.AddHours(1);
                        var date2 = DateTime.Now;

                        //to get matches for only today
                        if (DateTime.Compare(date1, date2) <= 0)
                        {
                            continue;
                        }

                        var betMatch = new BetMatch
                        {
                            Country         = country,
                            League          = league,
                            DateTimeOfMatch = date1,
                            Site            = "1xBet",
                            TeamNames       = $"{singleMatch.Value.O1} - {singleMatch.Value.O2}"
                        };


                        var betList = new List <BetOdds>();

                        foreach (var e in singleMatch.Value.Ge)
                        {
                            var bG = e.G;

                            var betGroup = betsNameModelGroup[bG.ToString()].N;

                            foreach (var eee in e.E.SelectMany(ee => ee.Select(eee => eee)))
                            {
                                var betType   = eee.T.ToString();
                                var value     = eee.C.ToString();
                                var selection = betsName[betType].N;
                                betList.Add(new BetOdds {
                                    MainType = betGroup, Selection = selection, Type = betGroup, Value = value
                                });
                            }
                        }

                        betMatch.Odds = betList;

                        betMatches.Add(betMatch);
                    }

                    return(betMatches);
                }

                return(null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw;
            }
        }
        public List <BetMatch> ScrapeDaily(HttpClient client)
        {
            var currdate     = DateTime.Now.ToString("yyyy'-'MM'-'dd");
            var tomodate     = DateTime.Now.AddDays(1).ToString("yyyy'-'MM'-'dd");
            var listEvents   = new List <BetMatch>();
            var jsonSettings = new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            };

            try
            {
                //get todays data
                string FirstresponseBody = client.GetStringAsync("https://merrybet.com/rest/search/events/search-by-date/" + currdate).Result;

                //get next day data
                //string SecondresponseBody = client.GetStringAsync("https://merrybet.com/rest/search/events/search-by-date/" + tomodate).Result;

                //get first day list of events id
                var t = JsonConvert.DeserializeObject <SearchData>(FirstresponseBody).data.Where(m => m.category1Name == "Soccer" && !m.category3Name.ToLower().Contains("special") && m.eventType == 1).Select(x => x.eventId).ToList();

                //get second day list of events id and add to previous list
                //t.AddRange(JsonConvert.DeserializeObject<SearchData>(SecondresponseBody).data.Where(m => m.category1Name == "Soccer" && !m.category3Name.ToLower().Contains("special") && m.eventType == 1).Select(x => x.eventId).ToList());

                Parallel.ForEach(t, (eventId) =>
                {
                    //get data for event
                    var singleresponse  = client.GetStringAsync("https://merrybet.com/rest/market/events/" + eventId).Result;
                    var singleEventData = JsonConvert.DeserializeObject <MBData.ReceivedDataMerryBet>(singleresponse);

                    if (singleEventData.data != null)
                    {
                        var mbOdds = singleEventData.data.eventGames.
                                     SelectMany(x => x.outcomes.
                                                Select(m => new BetOdds()
                        {
                            Type = x.gameName, Selection = m.outcomeName, Value = m.outcomeOdds.ToString()
                        }))
                                     .ToList();

                        var teamNames = singleEventData.data.eventName.Split('-');

                        try
                        {
                            mbOdds.ForEach(
                                m => m.Selection = m.Selection.Replace(teamNames[0].Trim(), "1").Replace(teamNames[1].Trim(), "2"));
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(mbOdds.Count + e.Message);
                            return;
                        }

                        var mbOddsnGames = new BetMatch();

                        if (singleEventData.data.category3Name.ToLower() == "group stage")
                        {
                            mbOddsnGames = new BetMatch()
                            {
                                DateTimeOfMatch = DateTimeOffset.FromUnixTimeMilliseconds(singleEventData.data.eventStart).DateTime.AddHours(1),
                                League          = singleEventData.data.category2Name,
                                TeamNames       = singleEventData.data.eventName,
                                Odds            = mbOdds,
                                Country         = singleEventData.data.category3Name,
                                Site            = "merryBet"
                            };
                        }
                        else
                        {
                            mbOddsnGames = new BetMatch()
                            {
                                DateTimeOfMatch = DateTimeOffset.FromUnixTimeMilliseconds(singleEventData.data.eventStart).DateTime.AddHours(1),
                                League          = singleEventData.data.category3Name,
                                TeamNames       = singleEventData.data.eventName,
                                Odds            = mbOdds,
                                Country         = singleEventData.data.category2Name,
                                Site            = "merryBet"
                            };
                        }

                        listEvents.Add(mbOddsnGames);
                    }
                    else
                    {
                        Console.WriteLine("No data returned");
                    }
                });

                Console.WriteLine("--Merrybet Done");
                return(listEvents);
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine("\n Http Exception Caught!");
                Console.WriteLine("Message :{0} ", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("\nException Caught!");
                Console.WriteLine("Message :{0} ", e.Message);
            }

            return(null);
        }