In [1]:
import requests
import pandas as pd
import csv

pd.options.display.max_columns = 50

In [2]:
base_url = 'https://api.cartolafc.globo.com/'

In [3]:
def get_mercado():
    url = "{}atletas/mercado".format(base_url)
    response = requests.get(url)
    return response.json()

In [4]:
def mercado_json_to_df(json):
    #     "atletas":[
    #     {
    #         "nome":"Rodrigo Baldasso da Costa",
    #         "apelido":"Rodrigo",
    #         "foto":"https://s.glbimg.com/es/sde/f/2017/06/13/a5cb57a41ef2b2308c98b76ba24b430a_FORMATO.png",
    #         "atleta_id":37644,
    #         "rodada_id":12,
    #         "clube_id":303,
    #         "posicao_id":3,
    #         "status_id":2,
    #         "pontos_num":5.2,
    #         "preco_num":9.04,
    #         "variacao_num":1.31,
    #         "media_num":3.17,
    #         "jogos_num":8,
    #         "scout":{"CA":2,"CV":1,"FC":5,"FD":2,"FF":5,"FS":15,"I":1,"PE":14,"RB":8,"SG":3}
    #     },
    data = []
    columns = ["atleta_id", "rodada_id", "clube_id", "posicao_id", "status_id",
               "pontos_num", "preco_num", "variacao_num", "media_num", "jogos_num",
               "FS", "PE", "A", "FT", "FD", "FF", "G", "I", "PP",
               "RB", "FC", "GC", "CA", "CV", "SG", "DD", "DP", "GS"]
    scouts = ["FS", "PE", "A", "FT", "FD", "FF", "G", "I", "PP",
               "RB", "FC", "GC", "CA", "CV", "SG", "DD", "DP", "GS"]
    
    for atleta in json["atletas"]:
        row = []
        for column in columns:
            if column in scouts:
                if column in atleta["scout"]:
                    row.append(atleta["scout"][column])
                else:
                    row.append(None)
            else:
                if column in atleta:
                    row.append(atleta[column])
                else:
                    row.append(None)
        data.append(row)
    
    df = pd.DataFrame(data=data, columns=columns)
    return df

In [5]:
def atletas_json_to_df(json):
    #     "atletas":[
    #     {
    #         "nome":"Rodrigo Baldasso da Costa",
    #         "apelido":"Rodrigo",
    #         "foto":"https://s.glbimg.com/es/sde/f/2017/06/13/a5cb57a41ef2b2308c98b76ba24b430a_FORMATO.png",
    #         "atleta_id":37644,
    #         "rodada_id":12,
    #         "clube_id":303,
    #         "posicao_id":3,
    #         "status_id":2,
    #         "pontos_num":5.2,
    #         "preco_num":9.04,
    #         "variacao_num":1.31,
    #         "media_num":3.17,
    #         "jogos_num":8,
    #         "scout":{"CA":2,"CV":1,"FC":5,"FD":2,"FF":5,"FS":15,"I":1,"PE":14,"RB":8,"SG":3}
    #     },
    data = []
    columns = ["atleta_id", "nome", "apelido"]
    
    for atleta in json["atletas"]:
        row = []
        for column in columns:
            row.append(atleta[column])
        data.append(row)
    
    df = pd.DataFrame(data=data, columns=columns)
    return df

In [6]:
scouts_columns = ["FS", "PE", "A", "FT", "FD", "FF", "G", "I", "PP",
                  "RB", "FC", "GC", "CA", "CV", "SG", "DD", "DP", "GS"]

In [7]:
mercado = get_mercado()

scouts = pd.read_csv("../2017/scouts.csv")
scouts_rodada = mercado_json_to_df(mercado)
scouts_rodada[scouts_columns] = scouts_rodada[scouts_columns].fillna(0).astype("int")
new_scouts = pd.concat([scouts, scouts_rodada])
new_scouts.to_csv("../2017/new_scouts.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")

scouts_diff = new_scouts.copy()
scouts_cumsum_columns = ["{}_cumsum".format(scout) for scout in scouts_columns]
new_columns = scouts.columns.tolist()[0:10] + scouts_cumsum_columns
scouts_diff.columns = new_columns
scouts_diff[scouts_columns] = scouts_diff.groupby("atleta_id")[scouts_cumsum_columns] \
                                .transform(pd.Series.diff).fillna(0).astype("int")
scouts_diff = scouts_diff.drop(scouts_cumsum_columns, axis=1)
scouts_diff.to_csv("../kaggle/2017_scouts.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")

atletas = pd.read_csv("../2017/atletas.csv")
atletas_rodada = atletas_json_to_df(mercado)
new_atletas = pd.merge(atletas, atletas_rodada, how="outer")
new_atletas.to_csv("../2017/new_atletas.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")
new_atletas.to_csv("../kaggle/2017_atletas.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")

In [8]:
def get_partidas(rodada=None):
    url = "{}partidas".format(base_url)
    if rodada:
        url = "{}/{}".format(url, rodada)
    response = requests.get(url)
    return response.json()

In [9]:
def partidas_json_to_df(json):
    # {"partidas":[
    #     {
    #         "clube_casa_id":266,
    #         "clube_casa_posicao":8,
    #         "clube_visitante_id":315,
    #         "aproveitamento_mandante":["e","v","e","e","e"],
    #         "aproveitamento_visitante":["d","d","d","e","e"],
    #         "clube_visitante_posicao":15,
    #         "partida_data":"2017-07-03 20:00:00",
    #         "local":"Giulite Coutinho",
    #         "valida":true,
    #         "placar_oficial_mandante":3,
    #         "placar_oficial_visitante":3,
    #         "url_confronto":"http://globoesporte.globo.com/rj/futebol/brasileirao-serie-a/jogo/03-07-2017/fluminense-chapecoense",
    #         "url_transmissao":""
    #     },
    data = []
    columns = ["clube_casa_id","clube_visitante_id",
               "clube_casa_posicao","clube_visitante_posicao",
               "aproveitamento_mandante","aproveitamento_visitante",
               "placar_oficial_mandante","placar_oficial_visitante",
               "partida_data","local","valida"]
    rodada_id = json["rodada"]
    partidas = json["partidas"]
    for partida in partidas:
        row = [rodada_id]
        for column in columns:
            if column in ["aproveitamento_mandante", "aproveitamento_visitante"]:
                row.append("".join(partida[column]))
            else:
                row.append(partida[column])
        data.append(row)
    
    df = pd.DataFrame(data=data, columns=["rodada_id"] + columns)
    return df

In [10]:
# Finds out which round is next and retrieves its data
partidas_proxima_json = get_partidas()
partidas_proxima = partidas_json_to_df(partidas_proxima_json)
proxima_rodada = partidas_proxima_json["rodada"]

# Fetches data from the last past round
partidas_rodada_json = get_partidas(proxima_rodada - 1)
partidas_rodada = partidas_json_to_df(partidas_rodada_json)

# Removes last round without scores from our table
partidas = pd.read_csv("../2017/partidas.csv")
new_partidas = partidas[partidas["rodada_id"] < (proxima_rodada - 1)]

# Writes our new data
new_partidas = pd.concat([new_partidas, partidas_rodada, partidas_proxima])
new_partidas.to_csv("../2017/new_partidas.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")
new_partidas.to_csv("../kaggle/2017_partidas.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")

In [ ]: