private static void AppendMatchStatistics(MongoDb db) { var seasons = db.GetSeasons().ToList(); //var roundUid = GetLastCompletedRoundUid(seasons); var roundUid = new RoundUid() { Year = StartingYear, Number = 0 }; Console.WriteLine("Appending from " + roundUid.Year + ", " + roundUid.Number); //add any new matches between last match and now var api = new FootyWireApi(); foreach (var round in seasons.SelectMany(s => s.Rounds)) { if (round.Year >= 2010) { if (round.Matches.Where(m => m.HomeStats is null || m.AwayStats is null || m.HomeStats.Clearances == 0 || m.AwayStats.Clearances == 0).Count() > 0) { api.AppendMatchStatisticstoResults(round); } } else { if (round.Matches.Where(m => m.HomeStats.Kicks == 0 || m.AwayStats.Kicks == 0).Count() > 0) { api.AppendMatchStatisticstoResults(round); } } } seasons.RemoveAll(s => s.Rounds.Count == 0); //update db db.UpdateSeasons(seasons); }
//TODO: Might be less page hits to update by match (once we have their starting data) /*private static void UpdatePlayers(MongoDb db, int updateFromYear) * { * Console.WriteLine("Beginning UpdatePlayers"); * var year = DateTime.Now.Year; * * //What have I got? * List<Player> players = db.ReadPlayerDocument() ?? new List<Player>(); * var api = new FinalSirenApi(); * * //Get histry for each player * for (var i = year; i >= updateFromYear; i--) * { * var newplayers = api.GetPlayers(i); * * foreach (var n in newplayers.Where(n => players.All(p => p.FinalSirenPlayerId != n.FinalSirenPlayerId))) * { * players.Add(n); * } * * foreach (var p in players) * { * if (p.History.Count == 0) * p.History = api.GetPlayerMatchHistory(p.FinalSirenPlayerId); * } * } * * //update db * db.UpdatePlayerDocument(players.Select(p => p.Bsonify()).ToList()); * }*/ private static RoundUid GetLastCompletedRoundUid(List <Season> seasons) { //What have I got? seasons = seasons.OrderBy(s => s.Year).ToList(); var lastCompletedRound = seasons.SelectMany(s => s.Rounds) .Where( r => r.Matches.All(m => m.HomeScore().Total() > Tolerance || m.AwayScore().Total() > Tolerance) && r.Matches.Count > 0) .OrderByDescending(r => r.Matches[0].Date) .FirstOrDefault(); var roundUid = new RoundUid(); roundUid.Year = lastCompletedRound == null ? StartingYear : lastCompletedRound.Year; roundUid.Number = lastCompletedRound == null ? 0 : lastCompletedRound.Number; roundUid.IsFinal = lastCompletedRound == null ? false : lastCompletedRound.IsFinal; return(roundUid); }
public List <Season> UpdateFrom(List <Season> seasons, RoundUid roundUid) { if (seasons.Count == 1) { seasons = new List <Season>(); } var number = roundUid.Number; var year = roundUid.Year; if (roundUid.IsFinal) { number = numHomeandAwayRounds[year]; } var successful = true; while (successful) { try { if (seasons.All(s => s.Year != year)) { seasons.Add(new Season(year, new List <Round>())); } var numRounds = GetNumRounds(year); if (numRounds == 0) { successful = false; } for (var i = number; i <= numRounds; i++) { var round = GetRoundResultsHomeAndAway(year, i); if (seasons.First(s => s.Year == year).Rounds.Count >= i) { seasons.First(s => s.Year == year).Rounds[i - 1] = round; } else { seasons.First(s => s.Year == year).Rounds.Add(round); } } var finals = GetRoundResultsFinals(year); var finalNumber = 0; foreach (var r in finals) { finalNumber++; if (seasons.First(s => s.Year == year).Rounds.Count >= (numRounds + finalNumber)) { seasons.First(s => s.Year == year).Rounds[(numRounds + finalNumber) - 1] = r; } else { seasons.First(s => s.Year == year).Rounds.Add(r); } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); successful = false; } if (successful) { //We're still getting fresh data so loop into next season: year++; number = 1; seasons.Add(new Season(year, new List <Round>())); } } return(seasons); }