Beispiel #1
0
        public LeagueTable GetLeague(LeagueEnum league, int journey)
        {
            // Busca en diccionario, despues en ficheros y si no lo descarga
            LeagueTable tabla = null;

            if (!_leagues[league].TryGetValue(journey, out tabla))
            {
                Log.Info($"No existe en memoria la jornada {journey} de la liga {EnumUtility.GetDescriptionFromEnumValue(league)}");

                // Comprobar si existe el directorio con los ficheros csv
                if (!Directory.Exists(FOLDERPATH))
                {
                    Directory.CreateDirectory(FOLDERPATH);
                }

                if (!File.Exists($"{FOLDERPATH}/2017_{EnumUtility.GetDescriptionFromEnumValue( league )}_{journey}.json"))
                {
                    Log.Info($"Descargando jornada {journey} de la liga {EnumUtility.GetDescriptionFromEnumValue(league)}");
                    _downloadLeague(league, journey);
                }
                else
                {
                    Log.Info($"leyendo de fichero la jornada {journey} de la liga {EnumUtility.GetDescriptionFromEnumValue(league)}");
                    _readLeagueFromFile(league, journey);
                }
            }

            tabla = _leagues[league][journey];

            return(tabla);
        }
Beispiel #2
0
        public LeagueTable GetLeagueTable(LeagueEnum league)
        {
            LeagueTable table = null;

            //string liga = league == LeagueEnum.PRIMERA ? PrimeraDivisionRequest : SegundaDivisionRequest;

            string request = $"{API_URL}{LeagueRequest}";

            request = request.Replace("$LEAGUEID$", ((int)league).ToString());

            WebHeaderCollection headers = new WebHeaderCollection();

            headers.Add(RequestHeader, API_KEY);

            using (WebClient wc = new WebClient()
            {
                Headers = headers
            })
            {
                var json = wc.DownloadString(request);
                table = JsonConvert.DeserializeObject <LeagueTable>(json);
            }

            return(table);
        }
Beispiel #3
0
        public void PrintLeague(LeagueEnum league, int journey)
        {
            LeagueTable liga = GetLeague(league, journey);

            Log.Info($"Jornada numero {liga.matchday}");
            Log.Info($"POS - NOMBRE - PUNTOS - JUGADOS - GANADOS - PERDIDOS - EMPATADOS - G.FAVOR - G.CONTRA");

            foreach (var c in liga.standing)
            {
                Log.Info($"{c.position} - {c.teamName} - {c.points} - {c.playedGames} - {c.wins} - {c.losses} - {c.draws} - {c.goals} - {c.goalsAgainst}");
            }
        }
Beispiel #4
0
        public LeagueEnum GetDivision(string team)
        {
            LeagueEnum res = LeagueEnum.PRIMERA;

            LeagueTable lt = GetLeague(LeagueEnum.PRIMERA, 1);

            if (lt.standing.FirstOrDefault(a => a.teamName == team) == null)
            {
                res = LeagueEnum.SEGUNDA;
            }

            return(res);
        }
Beispiel #5
0
        private void _downloadLeague(LeagueEnum league, int journey)
        {
            //http://api.football-data.org/v1/competitions/436/leagueTable/?matchday=22"
            LeagueTable table = null;

            Log.Debug($"Solicitando datos de la liga {EnumUtility.GetDescriptionFromEnumValue(league)}");

            try
            {
                //string request = $"{API_URL}{LeagueRequest}";
                string leaguerequest = null;
                LeagueRequest.TryGetValue(EnumUtility.GetDescriptionFromEnumValue(league), out leaguerequest);

                string request = $"{API_URL}{leaguerequest}".Replace("$JOURNEY$", journey.ToString());

                //request = request.Replace( "$LEAGUEID$", ( ( int )league ).ToString() );

                WebHeaderCollection headers = new WebHeaderCollection();
                headers.Add(RequestHeader, API_KEY);

                WebClient wc = new WebClient();
                wc.Encoding = Encoding.UTF8;
                wc.Headers  = headers;

                Log.Debug($"Request: {request}");
                var json = wc.DownloadString(request);
                table = JsonConvert.DeserializeObject <LeagueTable>(json);

                // convierto los nombres a mayusculas y sin acentos
                table.standing.Select(a => { a.teamName = a.teamName.RemoveDiacritics().ToUpper(); return(a); }).ToList();
                // Por cada nombre en la tabla, lo busco en la TeamsNames y lo sustituyo si lo encuentra
                foreach (var team in table.standing)
                {
                    team.teamName = Teams.GetKeyfromName(team.teamName);
                }
            }
            catch (Exception e)
            {
                Log.Warn($"Hubo un error al solicitar la clasificacion {EnumUtility.GetDescriptionFromEnumValue( league )}");
                Log.Warn(e.Message);
            }

            if (table != null)
            {
                var fichero = $"{FOLDERPATH}/2017_{EnumUtility.GetDescriptionFromEnumValue( league )}_{journey}.json";
                Log.Info($"Salvando {journey} de la liga {EnumUtility.GetDescriptionFromEnumValue( league )} en fichero {fichero}");
                File.WriteAllText(fichero, JsonConvert.SerializeObject(table, Formatting.Indented));
            }

            _leagues[league][journey] = table;
        }
Beispiel #6
0
        public LeagueEnum GetLeague(string teamName)
        {
            LeagueEnum res = LeagueEnum.PRIMERA;

            if (_apiRequester != null)
            {
                res = _apiRequester.GetDivision(teamName);
            }
            else
            {
                Log.Warn("QuinEagleCalculator no esta inicializado");
            }

            return(res);
        }
Beispiel #7
0
        private void _readLeagueFromFile(LeagueEnum league, int journey)
        {
            var         fichero = $"{FOLDERPATH}/2017_{EnumUtility.GetDescriptionFromEnumValue( league )}_{journey}.json";
            LeagueTable table   = null;

            try
            {
                table = JsonConvert.DeserializeObject <LeagueTable>(File.ReadAllText(fichero));
            }
            catch (Exception e)
            {
                Log.Error($"No al leer el fichero '{fichero}': {e.Message}");
            }

            _leagues[league][journey] = table;
        }
        /// <summary>
        /// Resuelve la ecuacion y = (x + 100) / 2 siendo X la diferencia de % de la posicion en la tabla
        /// </summary>
        /// <returns>The statistic.</returns>
        /// <param name="fixture">Fixture.</param>
        public float GetStatistic(Fixture fixture)
        {
            float      res  = 0f;
            LeagueEnum liga = req.GetDivision(fixture.HomeTeam);

            LeagueTable tabla = req.GetLeague(liga, fixture.Journey - 1);

            if (tabla != null)
            {
                // primero necesitamos saber en que liga está este partido;

                /*if( tabla.standing.Any( a => a.teamName == fixture.HomeTeam ) )
                 *      liga = LeagueEnum.PRIMERA;
                 * else
                 *      liga = LeagueEnum.SEGUNDA;
                 */
                int puntos_posibles = (tabla.matchday) * 3;

                var home_team = tabla.standing.Where(a => a.teamName == fixture.HomeTeam).FirstOrDefault();
                var away_team = tabla.standing.Where(a => a.teamName == fixture.AwayTeam).FirstOrDefault();

                if (home_team != null && away_team != null)
                {
                    float pos_homeTeam = (float)home_team.points / puntos_posibles * 100;
                    float pos_awayTeam = (float)away_team.points / puntos_posibles * 100;

                    float diferencia = pos_homeTeam - pos_awayTeam;

                    Log.Debug($"Posicion de {home_team.teamName} = {pos_homeTeam} || {home_team.points} / {puntos_posibles}");
                    Log.Debug($"Posicion de {away_team.teamName} = {pos_awayTeam} || {away_team.points} / {puntos_posibles}");

                    res = (diferencia + 100) / 2;

                    Log.Debug($"Solucion de {home_team.teamName} vs {away_team.teamName} = {res}");
                }
                else
                {
                    Log.Warn($"No se encuentran los datos de clasificacion de {fixture.HomeTeam} o de {fixture.AwayTeam}");
                }
            }
            else
            {
                res = -1f;
            }

            return(res);
        }
Beispiel #9
0
 public LeagueAttribute(LeagueEnum league)
 {
     this.League = league;
 }