public async Task <IEnumerable <MatchOdds> > RetrieveAll()
        {
            var tasks = new List <Task <IEnumerable <Market> > >();

            using (var countryRequest = BetfairRequest.GetCountries(_authenticator))
            {
                var countries = await countryRequest.Submit <List <Country> >(_httpClient);

                if (countries == null)
                {
                    Console.WriteLine($"[ERROR] Unable to get countries");
                    return(Enumerable.Empty <MatchOdds>());
                }

                Console.WriteLine($"Retrieving data for {countries.Count} countries...");
                int i = 0;
                foreach (var country in countries)
                {
                    Console.WriteLine($"Retrieving odds for {country.CountryCode} [{++i} of {countries.Count}]...");
                    var scopedCountry = country;
                    tasks.Add(scopedCountry.SoccerOdds(_httpClient, _authenticator));
                    _throttler.Wait();
                }
            }

            var odds = Task.WhenAll(tasks).Result.SelectMany(x => x).ToList();

            return(odds.Select(MatchOdds.From));
        }
Esempio n. 2
0
        public async Task <IEnumerable <Market> > SoccerOdds(IHttpClient httpClient, IAuthenticator authenticator)
        {
            if (_markets == null)
            {
                _markets = new List <Market>();

                var startTime = DateTime.Today;
                for (int i = 0; i < 5; i++)
                {
                    var timeRange = new TimeRange {
                        From = startTime.AddDays(i), To = startTime.AddDays(i + 1)
                    };
                    using (var marketRequest = BetfairRequest.GetCatalogue(authenticator, CountryCode, timeRange))
                    {
                        var markets = await marketRequest.Submit <List <Market> >(httpClient);

                        if (markets == null || markets.Count == 0)
                        {
                            Console.WriteLine($"[ERROR] Unable to get odds for {CountryCode}");
                            break;
                        }

                        var marketIds = markets.Select(m => m.Id).ToList();
                        if (marketIds.Any())
                        {
                            using (var oddsRequest = BetfairRequest.GetOdds(authenticator, marketIds))
                            {
                                var odds = await oddsRequest.Submit <List <MarketBook> >(httpClient);

                                if (odds == null)
                                {
                                    Console.WriteLine($"Retrieving odds for {CountryCode}... FAILED");
                                    break;
                                }
                                Console.WriteLine($"Retrieving odds for {CountryCode}... COMPLETE ({odds.Count} records)");
                                foreach (var market in markets)
                                {
                                    market.PopulateOdds(odds);
                                }
                            }
                            _markets.AddRange(markets);
                        }
                    }
                }
            }
            return(_markets);
        }