diff --git a/README.md b/README.md index 5015691..6cd79d3 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,12 @@ $ soccer --help For a full list of supported team and team codes [see this](soccer/teams.json). +A list of league and team codes is also available with: + +```bash +$ soccer --list +``` + Demo ==== diff --git a/soccer/jsonhandler.py b/soccer/jsonhandler.py new file mode 100644 index 0000000..b8c6be6 --- /dev/null +++ b/soccer/jsonhandler.py @@ -0,0 +1,15 @@ +import os +import json + +def load_json(file): + """Load JSON file at app start""" + here = os.path.dirname(os.path.abspath(__file__)) + with open(os.path.join(here, file)) as jfile: + data = json.load(jfile) + return data + +TEAM_DATA = load_json("teams.json")["teams"] +TEAM_NAMES = {team["code"]: team["id"] for team in TEAM_DATA} +LEAGUE_DATA = load_json("leagues.json")["leagues"] +LEAGUE_IDS = {league["code"]: league["id"] for league in LEAGUE_DATA} +LEAGUE_PROPERTIES = {league["code"]: league["properties"] for league in LEAGUE_DATA if league["properties"] != "null"} \ No newline at end of file diff --git a/soccer/leagueids.py b/soccer/leagueids.py deleted file mode 100644 index d08d9e7..0000000 --- a/soccer/leagueids.py +++ /dev/null @@ -1,15 +0,0 @@ -LEAGUE_IDS = { - "BL": 394, - "BL2": 395, - "BL3": 403, - "FL": 396, - "FL2": 397, - "EPL": 398, - "EL1": 425, - "LLIGA": 399, - "SD": 400, - "SA": 401, - "PPL": 402, - "DED": 404, - "CL": 405 -} diff --git a/soccer/leagueproperties.py b/soccer/leagueproperties.py deleted file mode 100644 index 3c1fe8f..0000000 --- a/soccer/leagueproperties.py +++ /dev/null @@ -1,62 +0,0 @@ -LEAGUE_PROPERTIES = { - "EPL": { - "rl": [18, 20], - "cl": [1, 4], - "el": [5, 5], - }, - "EL1": { - "rl": [21, 24], - "cl": [1, 2], - "el": [3, 6] - }, - "BL": { - "rl": [16, 18], - "cl": [1, 4], - "el": [5, 6] - }, - "BL2": { - "rl": [16, 18], - "cl": [1, 2], - "el": [3, 3] - }, - "BL3": { - "rl": [18, 20], - "cl": [1, 2], - "el": [3, 3] - }, - "LLIGA": { - "rl": [18, 20], - "cl": [1, 4], - "el": [5, 6] - }, - "SD": { - "rl": [19, 22], - "cl": [1, 2], - "el": [3, 6] - }, - "SA": { - "rl": [18, 20], - "cl": [1, 3], - "el": [4, 5] - }, - "PPL": { - "rl": [17, 18], - "cl": [1, 3], - "el": [4, 5] - }, - "FL": { - "rl": [19, 20], - "cl": [1, 3], - "el": [4, 4] - }, - "FL2": { - "rl": [18, 20], - "cl": [1, 3], - "el": [0, 0] - }, - "DED": { - "rl": [16, 18], - "cl": [1, 2], - "el": [3, 3] - } -} diff --git a/soccer/leagues.json b/soccer/leagues.json new file mode 100644 index 0000000..ab71463 --- /dev/null +++ b/soccer/leagues.json @@ -0,0 +1,238 @@ +{ + "leagues":[ + { + "properties":{ + "cl":[ + 1, + 3 + ], + "el":[ + 4, + 4 + ], + "rl":[ + 19, + 20 + ] + }, + "name":"Ligue 1", + "code":"FL", + "id":396 + }, + { + "properties":{ + "cl":[ + 1, + 2 + ], + "el":[ + 3, + 6 + ], + "rl":[ + 21, + 24 + ] + }, + "name":"League One", + "code":"EL1", + "id":425 + }, + { + "properties":{ + "cl":[ + 1, + 3 + ], + "el":[ + 4, + 5 + ], + "rl":[ + 17, + 18 + ] + }, + "name":"Primeira Liga", + "code":"PPL", + "id":402 + }, + { + "properties":{ + "cl":[ + 1, + 2 + ], + "el":[ + 3, + 6 + ], + "rl":[ + 19, + 22 + ] + }, + "name":"Segunda Division", + "code":"SD", + "id":400 + }, + { + "properties":{ + "cl":[ + 1, + 4 + ], + "el":[ + 5, + 5 + ], + "rl":[ + 18, + 20 + ] + }, + "name":"Premier League", + "code":"EPL", + "id":398 + }, + { + "properties":{ + "cl":[ + 1, + 3 + ], + "el":[ + 4, + 5 + ], + "rl":[ + 18, + 20 + ] + }, + "name":"Serie A", + "code":"SA", + "id":401 + }, + { + "properties":{ + "cl":[ + 1, + 2 + ], + "el":[ + 3, + 3 + ], + "rl":[ + 18, + 20 + ] + }, + "name":"3. Liga", + "code":"BL3", + "id":403 + }, + { + "properties":{ + "cl":[ + 1, + 4 + ], + "el":[ + 5, + 6 + ], + "rl":[ + 18, + 20 + ] + }, + "name":"La Liga", + "code":"LLIGA", + "id":399 + }, + { + "properties":{ + "cl":[ + 1, + 2 + ], + "el":[ + 3, + 3 + ], + "rl":[ + 16, + 18 + ] + }, + "name":"2. Bundesliga", + "code":"BL2", + "id":395 + }, + { + "properties":{ + "cl":[ + 1, + 3 + ], + "el":[ + 0, + 0 + ], + "rl":[ + 18, + 20 + ] + }, + "name":"Ligue 2", + "code":"FL2", + "id":397 + }, + { + "properties":{ + "cl":[ + 1, + 4 + ], + "el":[ + 5, + 6 + ], + "rl":[ + 16, + 18 + ] + }, + "name":"Bundesliga", + "code":"BL", + "id":394 + }, + { + "properties":{ + "cl":[ + 1, + 2 + ], + "el":[ + 3, + 3 + ], + "rl":[ + 16, + 18 + ] + }, + "name":"Eredivisie", + "code":"DED", + "id":404 + }, + { + "properties":"null", + "name":"Champions League", + "code":"CL", + "id":405 + } + ] +} \ No newline at end of file diff --git a/soccer/main.py b/soccer/main.py index 8ed8b8d..b499691 100644 --- a/soccer/main.py +++ b/soccer/main.py @@ -2,29 +2,17 @@ import os import requests import sys -import json -from soccer import leagueids + from soccer.exceptions import IncorrectParametersException, APIErrorException from soccer.writers import get_writer +from soccer.jsonhandler import TEAM_NAMES, TEAM_DATA, LEAGUE_DATA, LEAGUE_IDS, LEAGUE_PROPERTIES BASE_URL = 'http://api.football-data.org/alpha/' LIVE_URL = 'http://soccer-cli.appspot.com/' -LEAGUE_IDS = leagueids.LEAGUE_IDS - - -def load_json(file): - """Load JSON file at app start""" - here = os.path.dirname(os.path.abspath(__file__)) - with open(os.path.join(here, file)) as jfile: - data = json.load(jfile) - return data -TEAM_DATA = load_json("teams.json")["teams"] -TEAM_NAMES = {team["code"]: team["id"] for team in TEAM_DATA} - def get_input_key(): """Input API key and validate""" @@ -204,15 +192,26 @@ def map_team_id(code): click.secho("No team found for this code", fg="red", bold=True) +def map_league_id(code): + """Take in league ID, read JSON file to map ID to name""" + for league in LEAGUE_DATA: + if league["code"] == code: + click.secho(league["name"], fg="green") + break + else: + click.secho("No league found for this code", fg="red", bold=True) + + def list_team_codes(): """List team names in alphabetical order of team ID, per league.""" # Sort teams by league, then alphabetical by code cleanlist = sorted(TEAM_DATA, key=lambda k: (k["league"]["name"], k["code"])) # Get league names leaguenames = sorted(list(set([team["league"]["name"] for team in cleanlist]))) + leaguecodes = {league["name"]: league["code"] for league in LEAGUE_DATA} for league in leaguenames: teams = [team for team in cleanlist if team["league"]["name"] == league] - click.secho(league, fg="green", bold=True) + click.secho(u"{0}: {1}".format(leaguecodes[league], league), fg="green", bold=True) for team in teams: if team["code"] != "null": click.secho(u"{0}: {1}".format(team["code"], team["name"]), fg="yellow") @@ -229,10 +228,10 @@ def list_team_codes(): help=("Choose the league whose fixtures you want to see. " "See league codes listed in README.")) @click.option('--players', is_flag=True, help="Shows players for a particular team") -@click.option('--team', type=click.Choice(TEAM_NAMES.keys()), +@click.option('--team', type=click.Choice([team for team in TEAM_NAMES.keys() if team != "null"]), help=("Choose the team whose fixtures you want to see. " "See team codes listed in README.")) -@click.option('--lookup', is_flag=True, help="Get team name from team code when used with --team command.") +@click.option('--lookup', is_flag=True, help="Get name from code when used with --league or --team command.") @click.option('--time', default=6, help="The number of days in the past for which you want to see the scores") @click.option('--upcoming', is_flag=True, default=False, help="Displays upcoming games when used with --time command.") @@ -271,10 +270,15 @@ def main(league, time, standings, team, live, use12hour, players, output_format, get_standings(league, writer) return - if team: - if lookup: + if lookup: + if league: + map_league_id(league) + return + elif team: map_team_id(team) return + + if team: if players: get_team_players(team, writer) return diff --git a/soccer/teams.json b/soccer/teams.json index d97d4fe..18b031f 100644 --- a/soccer/teams.json +++ b/soccer/teams.json @@ -1,2249 +1,2429 @@ -{ - "teams":[ - { +{ + "teams":[ + { "id":"5", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"BAY", "name":"FC Bayern M\u00fcnchen" }, - { + { "id":"7", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"HSV", "name":"Hamburger SV" }, - { + { "id":"16", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"FCA", "name":"FC Augsburg" }, - { + { "id":"9", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"BSC", "name":"Hertha BSC" }, - { + { "id":"3", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"B04", "name":"Bayer Leverkusen" }, - { + { "id":"2", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"TSG", "name":"TSG 1899 Hoffenheim" }, - { + { "id":"55", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"DAR", "name":"SV Darmstadt 98" }, - { + { "id":"8", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"H96", "name":"Hannover 96" }, - { + { "id":"15", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"M05", "name":"1. FSV Mainz 05" }, - { + { "id":"31", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"FCI", "name":"FC Ingolstadt 04" }, - { + { "id":"12", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"SVW", "name":"Werder Bremen" }, - { + { "id":"6", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"S04", "name":"FC Schalke 04" }, - { + { "id":"4", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"BVB", "name":"Borussia Dortmund" }, - { + { "id":"18", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"BMG", "name":"Bor. M\u00f6nchengladbach" }, - { + { "id":"11", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"WOB", "name":"VfL Wolfsburg" }, - { + { "id":"19", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"SGE", "name":"Eintracht Frankfurt" }, - { + { "id":"10", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"VFB", "name":"VfB Stuttgart" }, - { + { "id":"1", - "league":{ + "league":{ "id":394, "name":"Bundesliga" }, "code":"FCK", "name":"1. FC K\u00f6ln" }, - { + { "id":"510", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Ajaccio AC" }, - { + { "id":"528", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Dijon FCO" }, - { + { "id":"1045", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"PFC", "name":"Paris FC" }, - { + { "id":"540", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"FC Stade Lavallois Mayenne" }, - { + { "id":"557", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Chamois Niortais FC" }, - { + { "id":"515", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"FC Valenciennes" }, - { + { "id":"556", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"N\u00eemes Olympique" }, - { + { "id":"513", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"EVA", "name":"\u00c9vian Thonon Gaillard FC" }, - { + { "id":"567", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Red Star 93" }, - { + { "id":"573", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"US Cr\u00e9teil" }, - { + { "id":"541", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Clermont Foot Auvergne" }, - { + { "id":"517", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Sochaux FC" }, - { + { "id":"1042", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"FC Bourg-en-Bresse P\u00e9ronnas" }, - { + { "id":"533", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Le Havre AC" }, - { + { "id":"519", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"AJ Auxerre" }, - { + { "id":"512", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"Stade Brestois" }, - { + { "id":"545", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"FCM", "name":"FC Metz" }, - { + { "id":"546", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"RCL", "name":"RC Lens" }, - { + { "id":"520", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"AS Nancy" }, - { + { "id":"544", - "league":{ + "league":{ "id":397, "name":"Ligue 2" }, "code":"null", "name":"RC Tours" }, - { + { "id":"363", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Chesterfield FC" }, - { + { "id":"357", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Barnsley FC" }, - { + { "id":"1079", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Swindon Town FC" }, - { + { "id":"1067", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Bradford City AFC" }, - { + { "id":"1080", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Shrewsbury Town FC" }, - { + { "id":"384", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Millwall FC" }, - { + { "id":"361", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Rochdale AFC" }, - { + { "id":"1077", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Peterborough United FC" }, - { + { "id":"1073", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Fleetwood Town FC" }, - { + { "id":"1069", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Southend United FC" }, - { + { "id":"1071", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Doncaster Rovers FC" }, - { + { "id":"1068", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Bury FC" }, - { + { "id":"1074", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Crewe Alexandra FC" }, - { + { "id":"393", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Port Vale FC" }, - { + { "id":"1076", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Coventry City FC" }, - { + { "id":"75", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Wigan Athletic FC" }, - { + { "id":"1070", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Colchester United FC" }, - { + { "id":"336", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Blackpool FC" }, - { + { "id":"1072", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Burton Albion FC" }, - { + { "id":"1078", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Scunthorpe United FC" }, - { + { "id":"370", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Gillingham FC" }, - { + { "id":"356", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"SUSFC", "name":"Sheffield United FC" }, - { + { "id":"369", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Walsall FC" }, - { + { "id":"1075", - "league":{ + "league":{ "id":425, "name":"League One" }, "code":"null", "name":"Oldham Athletic AFC" }, - { + { "id":"665", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Roda JC Kerkrade" }, - { + { "id":"671", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Heracles Almelo" }, - { + { "id":"675", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Feyenoord Rotterdam" }, - { + { "id":"676", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"FC Utrecht" }, - { + { "id":"682", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"AZ Alkmaar" }, - { + { "id":"678", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Ajax Amsterdam" }, - { + { "id":"672", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Willem II" }, - { + { "id":"679", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Vitesse Arnhem" }, - { + { "id":"680", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"ADO Den Haag" }, - { + { "id":"674", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"PSV", "name":"PSV Eindhoven" }, - { + { "id":"673", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"SC Heerenveen" }, - { + { "id":"669", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"De Graafschap" }, - { + { "id":"677", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"FC Groningen" }, - { + { "id":"666", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"FC Twente Enschede" }, - { + { "id":"684", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"PEC Zwolle" }, - { + { "id":"717", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"SC Cambuur-Leeuwarden" }, - { + { "id":"667", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"NEC Nijmegen" }, - { + { "id":"670", - "league":{ + "league":{ "id":404, "name":"Eredivisie" }, "code":"null", "name":"Excelsior" }, - { + { "id":"450", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"Hellas Verona FC" }, - { + { "id":"100", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"ROM", "name":"AS Roma" }, - { + { "id":"109", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"JUVE", "name":"Juventus Turin" }, - { + { "id":"115", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"Udinese Calcio" }, - { + { "id":"114", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"PAL", "name":"US Citt\u00e1 di Palermo" }, - { + { "id":"107", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"GEN", "name":"Genoa CFC" }, - { + { "id":"471", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"SASS", "name":"US Sassuolo Calcio" }, - { + { "id":"113", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"SSC", "name":"SSC Napoli" }, - { + { "id":"584", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"UC Sampdoria" }, - { + { "id":"713", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"Carpi FC" }, - { + { "id":"110", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"LAZ", "name":"SS Lazio" }, - { + { "id":"103", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"Bologna FC" }, - { + { "id":"108", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"INT", "name":"FC Internazionale Milano" }, - { + { "id":"102", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"Atalanta BC" }, - { + { "id":"470", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"Frosinone Calcio" }, - { + { "id":"586", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"FCT", "name":"Torino FC" }, - { + { "id":"99", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"FIO", "name":"ACF Fiorentina" }, - { + { "id":"98", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"ACM", "name":"AC Milan" }, - { + { "id":"445", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"EMP", "name":"Empoli FC" }, - { + { "id":"106", - "league":{ + "league":{ "id":401, "name":"Serie A" }, "code":"null", "name":"AC Chievo Verona" }, - { + { "id":"25", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"null", "name":"MSV Duisburg" }, - { + { "id":"13", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"KAI", "name":"1. FC Kaiserslautern" }, - { + { "id":"33", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"EBS", "name":"Eintracht Braunschweig" }, - { + { "id":"46", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"SVS", "name":"SV Sandhausen" }, - { + { "id":"17", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"SCF", "name":"SC Freiburg" }, - { + { "id":"14", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"FCN", "name":"1. FC N\u00fcrnberg" }, - { + { "id":"30", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"FSV", "name":"FSV Frankfurt" }, - { + { "id":"721", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"RBL", "name":"Red Bull Leipzig" }, - { + { "id":"21", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"GRE", "name":"SpVgg Greuther F\u00fcrth" }, - { + { "id":"32", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"KAR", "name":"Karlsruher SC" }, - { + { "id":"44", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"HEI", "name":"1. FC Heidenheim 1846" }, - { + { "id":"26", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"1860", "name":"TSV 1860 M\u00fcnchen" }, - { + { "id":"29", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"PAD", "name":"SC Paderborn 07" }, - { + { "id":"36", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"VFL", "name":"VfL Bochum" }, - { + { "id":"20", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"FCP", "name":"FC St. Pauli" }, - { + { "id":"38", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"null", "name":"Arminia Bielefeld" }, - { + { "id":"28", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"FCU", "name":"1. FC Union Berlin" }, - { + { "id":"24", - "league":{ + "league":{ "id":395, "name":"2. Bundesliga" }, "code":"FOR", "name":"Fortuna D\u00fcsseldorf" }, - { + { "id":"66", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"MUFC", "name":"Manchester United FC" }, - { + { "id":"73", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"THFC", "name":"Tottenham Hotspur FC" }, - { + { "id":"1044", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"AFCB", "name":"AFC Bournemouth" }, - { + { "id":"58", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"AVFC", "name":"Aston Villa FC" }, - { + { "id":"62", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"EFC", "name":"Everton FC" }, - { + { "id":"346", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"WAT", "name":"Watford FC" }, - { + { "id":"338", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"LCFC", "name":"Leicester City FC" }, - { + { "id":"71", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"SUN", "name":"Sunderland AFC" }, - { + { "id":"68", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"NCFC", "name":"Norwich City FC" }, - { + { "id":"354", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"CRY", "name":"Crystal Palace FC" }, - { + { "id":"61", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"CFC", "name":"Chelsea FC" }, - { + { "id":"72", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"SWA", "name":"Swansea City FC" }, - { + { "id":"67", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"NUFC", "name":"Newcastle United FC" }, - { + { "id":"340", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"SFC", "name":"Southampton FC" }, - { + { "id":"57", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"AFC", "name":"Arsenal FC" }, - { + { "id":"563", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"WHU", "name":"West Ham United FC" }, - { + { "id":"70", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"SCFC", "name":"Stoke City FC" }, - { + { "id":"64", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"LFC", "name":"Liverpool FC" }, - { + { "id":"74", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"WBA", "name":"West Bromwich Albion FC" }, - { + { "id":"65", - "league":{ + "league":{ "id":398, "name":"Premier League" }, "code":"MCFC", "name":"Manchester City FC" }, - { + { + "name":"Paris Saint-Germain", + "id":"524", + "code":"PSG", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"SL Benfica", + "id":"495", + "code":"SLB", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Sevilla FC", + "id":"559", + "code":"SEV", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Bor. M\u00f6nchengladbach", + "id":"18", + "code":"BMG", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Manchester City FC", + "id":"65", + "code":"MCFC", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Juventus Turin", + "id":"109", + "code":"JUVE", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Club Atl\u00e9tico de Madrid", + "id":"78", + "code":"ATM", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"VfL Wolfsburg", + "id":"11", + "code":"WOB", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"PSV Eindhoven", + "id":"674", + "code":"PSV", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Manchester United FC", + "id":"66", + "code":"MUFC", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Real Madrid CF", + "id":"86", + "code":"MAD", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Valencia CF", + "id":"95", + "code":"VAL", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"FC Porto", + "id":"503", + "code":"FCP", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Chelsea FC", + "id":"61", + "code":"CFC", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"FC Bayern M\u00fcnchen", + "id":"5", + "code":"BAY", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Arsenal FC", + "id":"57", + "code":"AFC", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"AS Roma", + "id":"100", + "code":"ROM", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"FC Barcelona", + "id":"81", + "code":"FCB", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { + "name":"Bayer Leverkusen", + "id":"3", + "code":"B04", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { "id":"749", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"MFF", "name":"Malm\u00f6 FF" }, - { + { "id":"1056", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"ASTA", "name":"FC Astana" }, - { + { "id":"610", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"GSK", "name":"Galatasaray SK" }, - { + { "id":"751", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"CSK", "name":"CSKA Moscow" }, - { + { "id":"724", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"SHA", "name":"Shakhtar Donetsk" }, - { + { "id":"731", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"ZEN", "name":"FC Zenit St. Petersburg" }, - { + { "id":"842", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"DYK", "name":"Dynamo Kyiv" }, - { + { "id":"971", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"MTA", "name":"Maccabi Tel Aviv" }, - { + { "id":"654", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"OLA", "name":"Olympiacos F.C." }, - { + { "id":"755", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"DIN", "name":"GNK Dinamo Zagreb" }, - { + { "id":"748", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"null", "name":"FK BATE Baryssau" }, - { + { "id":"1057", - "league":{ + "league":{ "id":405, "name":"Champions League" }, "code":"null", "name":"KAA Gent" }, - { + { + "name":"Olympique Lyonnais", + "id":"523", + "code":"OLY", + "league":{ + "name":"Champions League", + "id":405 + } + }, + { "id":"1054", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"1. FC Magdeburg" }, - { + { "id":"40", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Rot-Wei\u00df Erfurt" }, - { + { "id":"39", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"SV Wehen Wiesbaden" }, - { + { "id":"1055", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"W\u00fcrzburger Kickers" }, - { + { "id":"34", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"FC Hansa Rostock" }, - { + { "id":"56", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Werder Bremen II" }, - { + { "id":"202", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Stuttgarter Kickers" }, - { + { "id":"204", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Fortuna K\u00f6ln" }, - { + { "id":"51", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Preu\u00dfen M\u00fcnster" }, - { + { "id":"741", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"SG Sonnenhof Gro\u00dfaspach" }, - { + { "id":"720", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Holstein Kiel" }, - { + { "id":"740", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Mainz 05 II" }, - { + { "id":"22", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"AUE", "name":"Erzgebirge Aue" }, - { + { "id":"52", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"VfL Osnabr\u00fcck" }, - { + { "id":"35", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Dynamo Dresden" }, - { + { "id":"45", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"VfB Stuttgart II" }, - { + { "id":"50", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"VFR", "name":"VfR Aalen" }, - { + { "id":"54", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Chemnitzer FC" }, - { + { "id":"23", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Energie Cottbus" }, - { + { "id":"554", - "league":{ + "league":{ "id":403, "name":"3. Liga" }, "code":"null", "name":"Hallescher FC" }, - { + { "id":"521", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"OSC", "name":"OSC Lille" }, - { + { "id":"524", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"PSG", "name":"Paris Saint-Germain" }, - { + { "id":"531", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"null", "name":"ES Troyes AC" }, - { + { "id":"555", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"null", "name":"Gaz\u00e9lec Ajaccio" }, - { + { "id":"516", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"MAR", "name":"Olympique de Marseille" }, - { + { "id":"514", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"SMC", "name":"SM Caen" }, - { + { "id":"522", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"NIC", "name":"OGC Nice" }, - { + { "id":"548", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"MON", "name":"AS Monaco FC" }, - { + { "id":"543", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"NAN", "name":"FC Nantes" }, - { + { "id":"538", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"GUI", "name":"EA Guingamp" }, - { + { "id":"518", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"MHSC", "name":"Montpellier H\u00e9rault SC" }, - { + { "id":"532", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"null", "name":"Angers SCO" }, - { + { "id":"536", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"SCB", "name":"SC Bastia" }, - { + { "id":"529", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"REN", "name":"Stade Rennais FC" }, - { + { "id":"526", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"BOR", "name":"FC Girondins de Bordeaux" }, - { + { "id":"547", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"REI", "name":"Stade de Reims" }, - { + { "id":"511", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"TOU", "name":"Toulouse FC" }, - { + { "id":"527", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"ETI", "name":"AS Saint-\u00c9tienne" }, - { + { "id":"523", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"OLY", "name":"Olympique Lyonnais" }, - { + { "id":"525", - "league":{ + "league":{ "id":396, "name":"Ligue 1" }, "code":"LOR", "name":"FC Lorient" }, - { + { "id":"595", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"CD Mirandes" }, - { + { "id":"91", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Real Zaragoza" }, - { + { "id":"1048", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Real Oviedo" }, - { + { "id":"596", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"CD Lugo" }, - { + { "id":"286", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"SD Ponferradina" }, - { + { "id":"285", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"CFE", "name":"Elche FC" }, - { + { "id":"260", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"CD Numancia de Soria" }, - { + { "id":"254", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"CD Tenerife" }, - { + { "id":"304", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"AD Alcorc\u00f3n" }, - { + { "id":"89", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"RCD Mallorca" }, - { + { "id":"744", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"UE Llagostera" }, - { + { "id":"79", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"CA Osasuna" }, - { + { "id":"299", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Huesca" }, - { + { "id":"263", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Deportivo Alav\u00e9s" }, - { + { "id":"267", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"UDA", "name":"UD Almeria" }, - { + { "id":"745", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"CD Leganes" }, - { + { "id":"265", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Gimn\u00e0stic de Tarragona" }, - { + { "id":"237", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Albacete Balompi\u00e9" }, - { + { "id":"295", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"CCF", "name":"C\u00f3rdoba CF" }, - { + { "id":"250", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Real Valladolid" }, - { + { "id":"1046", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Athletic Bilbao B" }, - { + { "id":"298", - "league":{ + "league":{ "id":400, "name":"Segunda Division" }, "code":"null", "name":"Girona FC" }, - { + { "id":"560", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"LAC", "name":"RC Deportivo La Coruna" }, - { + { "id":"92", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"RSS", "name":"Real Sociedad de F\u00fatbol" }, - { + { "id":"80", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"ESP", "name":"RCD Espanyol" }, - { + { "id":"82", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"FCG", "name":"Getafe CF" }, - { + { "id":"78", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"ATM", "name":"Club Atl\u00e9tico de Madrid" }, - { + { "id":"275", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"null", "name":"UD Las Palmas" }, - { + { "id":"87", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"RAY", "name":"Rayo Vallecano de Madrid" }, - { + { "id":"95", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"VAL", "name":"Valencia CF" }, - { + { "id":"84", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"MAL", "name":"M\u00e1laga CF" }, - { + { "id":"559", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"SEV", "name":"Sevilla FC" }, - { + { "id":"77", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"BIL", "name":"Athletic Club" }, - { + { "id":"81", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"FCB", "name":"FC Barcelona" }, - { + { "id":"96", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"null", "name":"Sporting Gij\u00f3n" }, - { + { "id":"86", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"MAD", "name":"Real Madrid CF" }, - { + { "id":"88", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"LUD", "name":"Levante UD" }, - { + { "id":"558", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"VIG", "name":"RC Celta de Vigo" }, - { + { "id":"90", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"null", "name":"Real Betis" }, - { + { "id":"94", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"VCF", "name":"Villarreal CF" }, - { + { "id":"83", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"GCF", "name":"Granada CF" }, - { + { "id":"278", - "league":{ + "league":{ "id":399, "name":"La Liga" }, "code":"EIB", "name":"SD Eibar" }, - { + { "id":"1049", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"CD Tondela" }, - { + { "id":"498", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"SCP", "name":"Sporting CP" }, - { + { "id":"711", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Belenenses Lissabon" }, - { + { "id":"496", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"FC Rio Ave" }, - { + { "id":"503", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"FCP", "name":"FC Porto" }, - { + { "id":"502", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Vitoria Guimaraes" }, - { + { "id":"506", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Vitoria Setubal" }, - { + { "id":"810", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Boavista Porto FC" }, - { + { "id":"1052", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Uni\u00e3o Madeira" }, - { + { "id":"504", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Maritimo Funchal" }, - { + { "id":"583", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Moreirense FC" }, - { + { "id":"712", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"FC Arouca" }, - { + { "id":"497", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Sporting Braga" }, - { + { "id":"501", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"Nacional Funchal" }, - { + { "id":"495", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"SLB", "name":"SL Benfica" }, - { + { "id":"582", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"GD Estoril Praia" }, - { + { "id":"507", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, "code":"null", "name":"FC Pa\u00e7os de Ferreira" }, - { + { "id":"509", - "league":{ + "league":{ "id":402, "name":"Primeira Liga" }, diff --git a/soccer/writers.py b/soccer/writers.py index c024116..ab1e2c6 100644 --- a/soccer/writers.py +++ b/soccer/writers.py @@ -8,10 +8,7 @@ from itertools import groupby from collections import namedtuple -from soccer import leagueids, leagueproperties - -LEAGUE_PROPERTIES = leagueproperties.LEAGUE_PROPERTIES -LEAGUE_IDS = leagueids.LEAGUE_IDS +from soccer.jsonhandler import LEAGUE_IDS, LEAGUE_PROPERTIES def get_writer(output_format='stdout', output_file=None):