// get data for last 6 games and last 6 home/away games from api and generate/calculate form data public async Task <Match> getRecentFormFromApi(Match match) { using (HttpResponseMessage response = await client.GetAsync("https://api.football-data.org/v2/competitions/" + match.LeagueId + "/matches?status=FINISHED&season=" + season)) { if (response.IsSuccessStatusCode) { JObject jsonObject = JObject.Parse(await response.Content.ReadAsStringAsync()); JArray allCompetitionMatches = (JArray)jsonObject["matches"]; match.HomeStats = MatchUtilities.getTeamForm(match.HomeStats, match.HomeTeamId, allCompetitionMatches); match.AwayStats = MatchUtilities.getTeamForm(match.AwayStats, match.AwayTeamId, allCompetitionMatches, false); return(match); } else { throw new Exception(response.ReasonPhrase); } } }
// match hasn't been generated before so isn't in database, get it from api instead, generate prediction then add to database private async Task <Match> getMatchFromApi(Match match) { client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("X-Auth-Token", "7830c352850f4acda78aa61d1666d45b"); using (HttpResponseMessage response = await client.GetAsync("https://api.football-data.org/v2/matches/" + match.MatchId)) { if (response.IsSuccessStatusCode) { JObject jsonObject = JObject.Parse(await response.Content.ReadAsStringAsync()); if (jsonObject["match"]["status"].ToString() == "FINISHED") { match = await populateFinishedMatch(jsonObject, match); } else { match = await populateFutureMatch(jsonObject, match); match.HomeStats = await leagueService.getStats(match.LeagueId, match.HomeTeamId, match.MatchId); match.AwayStats = await leagueService.getStats(match.LeagueId, match.AwayTeamId, match.MatchId, false); MatchUtilities.getWDLString(match.HomeStats); MatchUtilities.getWDLString(match.AwayStats); match = await getRecentFormFromApi(match); } Predictor.generatePrediction(match); addMatchToDatabase(match); return(match); } else { throw new Exception(response.ReasonPhrase); } } }
// returns a match object, either from databse or API public async Task <Match> getMatch(Match match) { //check if match is in database already if (databaseCheck(match)) { match = await getMatchFromDatabase(match); //if match is in database as an unfinished match, check if it has since finished and update if (DateTime.Parse(match.UtcDate).AddHours(2) < DateTime.Now && !match.predictionResultRecorded) { using (HttpResponseMessage response = await client.GetAsync("https://api.football-data.org/v2/matches/" + match.MatchId)) { if (response.IsSuccessStatusCode) { JObject jsonObject = JObject.Parse(await response.Content.ReadAsStringAsync()); if (jsonObject["match"]["status"].ToString() == "FINISHED") { match.finished = true; match = await populateFinishedMatch(jsonObject, match); updateFinishedMatchInDatabase(match); incrementPredictions(match); addGoalScorersToDatabase(match.homeGoalScorers, match.HomeTeamId, match.MatchId); addGoalScorersToDatabase(match.awayGoalScorers, match.AwayTeamId, match.MatchId); } } } } return(match); } else // match not in database, get from api instead { using (HttpResponseMessage response = await client.GetAsync("https://api.football-data.org/v2/matches/" + match.MatchId)) { if (response.IsSuccessStatusCode) { JObject jsonObject = JObject.Parse(await response.Content.ReadAsStringAsync()); //if match is finished, get from api as a finished match if (jsonObject["match"]["status"].ToString() == "FINISHED") { await populateFinishedMatch(jsonObject, match); } else // else get a scheduled match object { await populateFutureMatch(jsonObject, match); match.HomeStats = await leagueService.getStats(match.LeagueId, match.HomeTeamId, match.MatchId); match.AwayStats = await leagueService.getStats(match.LeagueId, match.AwayTeamId, match.MatchId, false); match.HomeStats.homeOrAwayWDL = MatchUtilities.getWDLString(match.HomeStats); match.AwayStats.homeOrAwayWDL = MatchUtilities.getWDLString(match.AwayStats); match = await getRecentFormFromApi(match); match = Predictor.generatePrediction(match); } addMatchToDatabase(match); return(match); } else { throw new Exception(response.ReasonPhrase); } } } }