Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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");
        }