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); }
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); }
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}"); } }
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); }
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; }
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); }
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); }
public LeagueAttribute(LeagueEnum league) { this.League = league; }