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)); }
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); }