private void CreateTeamFiles() // tworzy pliki [kraj].json od początku do ostatniego rankingu [na podstawie FIFA-WWW] { string path = AppDomain.CurrentDomain.BaseDirectory; for (var i = 1; i < 500; i++) { try { var ranking = GetRankingById(i); foreach (var teamInRank in ranking.Teams) { TeamInFile teamInFile = new Model.TeamInFile() { Rank = teamInRank.Rank, TotalPoints = teamInRank.TotalPoints, PreviousPoints = teamInRank.PreviousPoints, MovePosition = teamInRank.MovePosition, Date = ranking.Date, RankId = ranking.Id }; if (System.IO.File.Exists(path + "/data/teams/" + teamInRank.Name + ".json")) { // plik istnieje - dopisz string output = ""; using (StreamReader r = new StreamReader(path + "/data/teams/" + teamInRank.Name + ".json")) { string json = r.ReadToEnd(); List <TeamInFile> items = JsonConvert.DeserializeObject <List <TeamInFile> >(json); items.Add(teamInFile); output = Newtonsoft.Json.JsonConvert.SerializeObject(items, Newtonsoft.Json.Formatting.Indented); } System.IO.File.WriteAllText(path + "/data/teams/" + teamInRank.Name + ".json", output); } else // plik nie istnieje - zrób nowy i pobierz flagę { List <TeamInFile> initialList = new List <TeamInFile>(); // lista z tylko jednym wpisem initialList.Add(teamInFile); string json = JsonConvert.SerializeObject(initialList, Newtonsoft.Json.Formatting.Indented); System.IO.File.WriteAllText(path + "/data/teams/" + teamInRank.Name + ".json", json); using (var client = new WebClient()){ client.DownloadFile(teamInRank.FlagUrl, path + "data/flags/" + teamInRank.Name + ".png"); } } } } catch (Exception ex) { if (i > 260) // zaimportowałem wszystkie rankingi do plików [kraj].json { CreateTeamList(); // tworzę listę krajów na podstawie plików } throw ex; } } }
private string UpdateWithLast() // aktualizacja najnowszym rankingiem { // wyznacz ostatnie Id string path = AppDomain.CurrentDomain.BaseDirectory; int lastIdInFiles = -1; DateTime lastDateInFiles = new DateTime(1992, 12, 1); using (StreamReader r = new StreamReader(path + "data/rankings/_rankingsList.json")) { string json = r.ReadToEnd(); List <RankingInList> items = JsonConvert.DeserializeObject <List <RankingInList> >(json); lastIdInFiles = items.LastOrDefault().Id; lastDateInFiles = items.LastOrDefault().Date; } var nextSiteId = GetNextSiteId(lastDateInFiles); try { Ranking lastRanking = GetRankingBySiteId(nextSiteId, lastIdInFiles + 1); // ######################### dopisz do _rankingsList // ######################### string output = null; using (StreamReader r = new StreamReader(path + "/data/rankings/_rankingsList.json")) { string json = r.ReadToEnd(); List <RankingInList> items = JsonConvert.DeserializeObject <List <RankingInList> >(json); items.Add(new RankingInList { Id = lastRanking.Id, Date = lastRanking.Date }); output = Newtonsoft.Json.JsonConvert.SerializeObject(items, Newtonsoft.Json.Formatting.Indented); r.Close(); } System.IO.File.WriteAllText(path + "/data/rankings/_rankingsList.json", output); // ######################### stwórz plik xxx.json gdzie xxx to id najnowszego rankingu // ######################### string json2 = JsonConvert.SerializeObject(lastRanking); var rankingForList = new RankingInList() { Id = lastRanking.Id, Date = lastRanking.Date }; System.IO.File.WriteAllText(path + "data/rankings/" + (lastIdInFiles + 1) + ".json", json2); // ######################### dopisz do każdej drużyny najnowszy ranking. Sprowadza się to do CreateTeamFiles() tyle że bez pętli // ######################### foreach (var teamInRank in lastRanking.Teams) { TeamInFile teamInFile = new Model.TeamInFile() { Rank = teamInRank.Rank, TotalPoints = teamInRank.TotalPoints, PreviousPoints = teamInRank.PreviousPoints, MovePosition = teamInRank.MovePosition, Date = lastRanking.Date, RankId = lastRanking.Id }; if (System.IO.File.Exists(path + "/data/teams/" + teamInRank.Name + ".json")) { // plik istnieje - dopisz string outputTeam = ""; using (StreamReader r = new StreamReader(path + "/data/teams/" + teamInRank.Name + ".json")) { string json = r.ReadToEnd(); List <TeamInFile> items = JsonConvert.DeserializeObject <List <TeamInFile> >(json); items.Add(teamInFile); outputTeam = Newtonsoft.Json.JsonConvert.SerializeObject(items, Newtonsoft.Json.Formatting.Indented); } System.IO.File.WriteAllText(path + "/data/teams/" + teamInRank.Name + ".json", outputTeam); } else // plik nie istnieje - zrób nowy (doszła w najnowszym rankingu jakaś nowa drużyna) i weź flagę { List <TeamInFile> initialList = new List <TeamInFile>(); // lista z tylko jednym wpisem initialList.Add(teamInFile); string json = JsonConvert.SerializeObject(initialList, Newtonsoft.Json.Formatting.Indented); System.IO.File.WriteAllText(path + "/data/teams/" + teamInRank.Name.Replace("/", "&") + ".json", json); using (var client = new WebClient()) { client.DownloadFile(teamInRank.FlagUrl, path + "data/flags/" + teamInRank.Name.Replace("/", "&") + ".png"); } } } // ######################### usuń i zrób od nowa _teamsList.json (mogła dojść nowa drużyna) // ######################### if (File.Exists(path + "data/teams/_teamsList.json")) { File.Delete(path + "data/teams/_teamsList.json"); CreateTeamList(); } } catch (Exception ex) // nie ma rankingu o takim Id { throw new ApplicationException("Nie powiodło się updateWithLast. Sprawdź czy dane nie są już aktualne. " + ex.Message, ex); } return("[updateWithLast] zakończono powodzeniem"); }