giovanigenerali / cartrolandofc

🎩 CartrolandoFC é um site para consultar os pontos parciais do seu time no Cartola FC.
http://www.cartrolandofc.cf
MIT License
279 stars 112 forks source link

Tem como buscar as parciais de todos os times de uma determinada liga durante a rodada? #3

Closed caioschiavo closed 8 years ago

caioschiavo commented 8 years ago

Através do seu código e algumas modificações eu até consegui, mas buscando time por time, individualmente e depois organizando filtrando pelo valor da parcial, porem, lento demais, ja que busca 32 times pelo api.cartolafc.globo.com/times?q=

veja

http://caioschiavo.com/quinta

`$url = "https://api.cartolafc.globo.com/time/{slug}";
$response = (file_get_contents($url)); $teste = (json_decode($response,true));

$times[1]['nome'] = $teste['time']['nome'];
$times[1]['pontos'] = $teste['pontos'];
$times[1]['cartola'] = $teste['time']['nome_cartola'];
$times[1]['escudo'] = $teste['time']['url_escudo_svg'];`

fiz de ontem pra hoje na correria, só para quebrar um ganho

mas será que tem alguma maneira mais facil?

roomoraaes commented 8 years ago

Também tenho essa dúvida. Quero implementar as parciais no site da minha liga particular (http://www.variosgoles.com.br), mas nesse modelo acaba ficando muito lento, pois minha liga conta com 50 times. Alguém tem alguma sugestão?

caioschiavo commented 8 years ago

@roomoraaes O seu está bem legal e aparentemente mas rápido do que o meu tem como vc disponibilizar ai pra eu dar uma olhada?

giovanigenerali commented 8 years ago

@caioschiavo está um pouco lento o http://caioschiavo.com/quinta/ Se puder coloca em algum repositório para podermos dar uma olhada. vlw

caioschiavo commented 8 years ago

@giovanigenerali sim, bem lento, pq faço 32 requisições, uma para cada time.

roomoraaes commented 8 years ago

@caioschiavo Não é necessário fazer 32 requisições para cada time. Apenas uma requisição. Quando voce manda um request para a url: https://api.cartolafc.globo.com/time/nome-time, ela retornará o todos os atletas escalados no time. Some a pontuação de cada um e terá a parcial do time. Ou seja, é necessário apenas uma requisição externa para cada time.

caioschiavo commented 8 years ago

@roomoraaes então, mas é isso mesmo o que eu faço, 1 requisição para cada time, mas são 32 times, portanto 32 requisições no total. @roomoraaes aproveitando, vc sabe como consultar se um usuário está logado? senão nas apis fechadas tem que ficar autenticando a cada refresh?

roomoraaes commented 8 years ago

@caioschiavo Estranho.... Estou utilizando essa lógica e meu retorno esta bem rápido. Média de 1.20 segundos. Em relação a consulta de autenticação, eu não sei lhe dizer. Não estou usando autenticação no meu projeto, as APIs públicas já estão sendo suficientes para mim.

caioschiavo commented 8 years ago

@roomoraaes fez em php? Porque vc soma as parciais dos atletas, se no JSON ja vem a parcial do time?

roomoraaes commented 8 years ago

@caioschiavo Não, a pontuação vem separada com atleta. A pontuação que você está dizendo só é atualizada quando o mercado é aberto, não é parcial.

giovanigenerali commented 8 years ago

@caioschiavo consegui fazer uma chamada direta na API para autenticar e em seguida fazer as chamadas que requerem token.

Autenticação para obter o token

Tem que fazer um post via json nessa url:

https://login.globo.com/api/authentication

O conteúdo do json quem que seguir esse padrão:

{"payload":{"email":"[EMAIL]","password":"[SENHA]","serviceId": 438}}

O retorno do post vai trazer esse json:

{"id":"Authenticated","userMessage":"Usuário autenticado com sucesso","glbId":"[TOKEN]"}

Get nas urls que necessitam de token

Após isso faça uma chamada get nas urls que precisam de autenticação passando no header a chave 'X-GLB-Token' com o valor do token que foi retornado na chamada de autenticação, exemplo:

Informações completa do time

https://api.cartolafc.globo.com/auth/time/info

X-GLB-Token: [TOKEN]

{
  "time": {
    "time_id": 834723,
    "clube_id": 264,
    "esquema_id": 3,
    "cadun_id": 40424774,
    "facebook_id": null,
    "foto_perfil": "https://cartolafc.globo.com/static/img/placeholder_perfil.png",
    "nome": "SLB Encarnados",
    "nome_cartola": "Giovani Generali",
    "slug": "slb-encarnados",
    "tipo_escudo": 1,
    "cor_fundo_escudo": "ffffff",
    "cor_borda_escudo": "000000",
    "cor_primaria_estampa_escudo": "ff241d",
    "cor_secundaria_estampa_escudo": "997a00",
    "url_escudo_svg": "https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/escudo/004042477420160503190708",
    "url_escudo_png": "https://s2.glbimg.com/aSc31ZW1PVPPvUKruorX7jnYbNY=/https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/escudo/004042477420160503190708",
    "url_camisa_svg": "https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/camisa/004042477420160503190708",
    "url_camisa_png": "https://s2.glbimg.com/0S5uu5oYl2vJvzeEOWsF7scP1Zk=/https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/camisa/004042477420160503190708",
    "url_escudo_placeholder_png": "http://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/placeholder/escudo.png",
    "url_camisa_placeholder_png": "http://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/placeholder/camisa.png",
    "tipo_estampa_escudo": 4,
    "tipo_adorno": 1,
    "tipo_camisa": 1,
    "tipo_estampa_camisa": 5,
    "cor_camisa": "ffffff",
    "cor_primaria_estampa_camisa": "ff241d",
    "cor_secundaria_estampa_camisa": "997a00",
    "assinante": false,
    "cadastro_completo": true,
    "patrocinador1_id": 62,
    "patrocinador2_id": 63
  }
}

Informações do time completa

https://api.cartolafc.globo.com/auth/time

X-GLB-Token: [TOKEN]

Feito isso, pronto está ai o json com todo o seu time:

{
  "atletas": [
    {
      "nome": "Rodrigo Eduardo Costa Marinho",
      "apelido": "Rodriguinho",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/28/8d01a11770a124d6d1f9432e0d2cc9eb_FORMATO.png",
      "atleta_id": 61033,
      "rodada_id": 1,
      "clube_id": 264,
      "posicao_id": 4,
      "status_id": 6,
      "pontos_num": 3.1,
      "preco_num": 7.43,
      "variacao_num": 0.43,
      "media_num": 3.1,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 287,
        "clube_casa_posicao": 19,
        "clube_visitante_id": 264,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 8,
        "partida_data": "2016-05-22 16:00:00",
        "local": "Barradão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "FC": 1,
        "FF": 3,
        "FS": 2,
        "PE": 4,
        "RB": 1
      }
    },
    {
      "nome": "Gustavo Ermel",
      "apelido": "Ermel",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/29/9fbbc2a0195e2d3a7da201dfe77f031e_FORMATO.jpeg",
      "atleta_id": 82952,
      "rodada_id": 1,
      "clube_id": 316,
      "posicao_id": 5,
      "status_id": 7,
      "pontos_num": 2.4,
      "preco_num": 6.91,
      "variacao_num": -0.09,
      "media_num": 2.4,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 283,
        "clube_casa_posicao": 18,
        "clube_visitante_id": 316,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 9,
        "partida_data": "2016-05-21 21:00:00",
        "local": "Mineirão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "FC": 1,
        "FD": 1,
        "FS": 5,
        "PE": 2
      }
    },
    {
      "nome": "Giovanni Augusto Oliveira Cardoso",
      "apelido": "Giovanni Augusto",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/28/9930f715c0d34977f60c416dc3311aca_FORMATO.png",
      "atleta_id": 68938,
      "rodada_id": 1,
      "clube_id": 264,
      "posicao_id": 4,
      "status_id": 7,
      "pontos_num": -0.5,
      "preco_num": 3.31,
      "variacao_num": -1.69,
      "media_num": -0.5,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 287,
        "clube_casa_posicao": 19,
        "clube_visitante_id": 264,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 8,
        "partida_data": "2016-05-22 16:00:00",
        "local": "Barradão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "I": 1
      }
    },
    {
      "nome": "Adenor Leonardo Bachi",
      "apelido": "Tite",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/07/cac34fc5a42fd086e55620d546c496a1_FORMATO.png",
      "atleta_id": 45125,
      "rodada_id": 1,
      "clube_id": 264,
      "posicao_id": 6,
      "status_id": 7,
      "pontos_num": 4.66,
      "preco_num": 14.46,
      "variacao_num": -0.54,
      "media_num": 4.66,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 287,
        "clube_casa_posicao": 19,
        "clube_visitante_id": 264,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 8,
        "partida_data": "2016-05-22 16:00:00",
        "local": "Barradão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {}
    },
    {
      "nome": "Bruno Viana Willemen da Silva",
      "apelido": "Bruno Viana",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/28/5e8c21e4fe26c6bb8c148b2ae722699d_FORMATO.png",
      "atleta_id": 92291,
      "rodada_id": 1,
      "clube_id": 283,
      "posicao_id": 3,
      "status_id": 2,
      "pontos_num": 0,
      "preco_num": 3,
      "variacao_num": 0,
      "media_num": 0,
      "jogos_num": 0,
      "partida": {
        "clube_casa_id": 283,
        "clube_casa_posicao": 18,
        "clube_visitante_id": 316,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 9,
        "partida_data": "2016-05-21 21:00:00",
        "local": "Mineirão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {}
    },
    {
      "nome": "Cássio Ramos",
      "apelido": "Cássio",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/28/8d0f1d77fad8f00513e096df10da46e2_FORMATO.png",
      "atleta_id": 42234,
      "rodada_id": 1,
      "clube_id": 264,
      "posicao_id": 1,
      "status_id": 7,
      "pontos_num": 0,
      "preco_num": 25,
      "variacao_num": 0,
      "media_num": 0,
      "jogos_num": 0,
      "partida": {
        "clube_casa_id": 287,
        "clube_casa_posicao": 19,
        "clube_visitante_id": 264,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 8,
        "partida_data": "2016-05-22 16:00:00",
        "local": "Barradão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {}
    },
    {
      "nome": "Alison Wágner Lira Ferreira",
      "apelido": "Alison",
      "foto": "https://s.glbimg.com/es/sde/f/2016/05/09/d7263e570ed2a87bc24ead8f629b3d34_FORMATO.png",
      "atleta_id": 51702,
      "rodada_id": 1,
      "clube_id": 327,
      "posicao_id": 3,
      "status_id": 7,
      "pontos_num": 2.1,
      "preco_num": 3.75,
      "variacao_num": 0.75,
      "media_num": 2.1,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 315,
        "clube_casa_posicao": 13,
        "clube_visitante_id": 327,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 14,
        "partida_data": "2016-05-22 16:00:00",
        "local": "Arena Condá",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "FF": 2,
        "FS": 1,
        "PE": 5,
        "RB": 1
      }
    },
    {
      "nome": "Diogo Barbosa Mendanha",
      "apelido": "Diogo Barbosa",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/27/97ce1981f4c518e025727a48e20f5476_FORMATO.png",
      "atleta_id": 70916,
      "rodada_id": 1,
      "clube_id": 263,
      "posicao_id": 2,
      "status_id": 5,
      "pontos_num": 0,
      "preco_num": 4,
      "variacao_num": 0,
      "media_num": 0,
      "jogos_num": 0,
      "partida": {
        "clube_casa_id": 292,
        "clube_casa_posicao": 17,
        "clube_visitante_id": 263,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 15,
        "partida_data": "2016-05-22 18:30:00",
        "local": "Ilha do Retiro",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {}
    },
    {
      "nome": "Ewandro Felipe de Lima Costa",
      "apelido": "Ewandro",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/26/56ad0ab89503a3a67b55fbb9699091ea_FORMATO.png",
      "atleta_id": 86842,
      "rodada_id": 1,
      "clube_id": 293,
      "posicao_id": 5,
      "status_id": 7,
      "pontos_num": -0.8,
      "preco_num": 5.29,
      "variacao_num": -2.71,
      "media_num": -0.8,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 293,
        "clube_casa_posicao": 20,
        "clube_visitante_id": 282,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 5,
        "partida_data": "2016-05-22 11:00:00",
        "local": "Arena da Baixada",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "FC": 1,
        "PE": 1
      }
    },
    {
      "nome": "Leonardo Moreira Morais",
      "apelido": "Léo",
      "foto": "https://s.glbimg.com/es/sde/f/2016/05/13/eac8265d35cda412d31cdfb857c0d6a8_FORMATO.png",
      "atleta_id": 69177,
      "rodada_id": 1,
      "clube_id": 293,
      "posicao_id": 2,
      "status_id": 3,
      "pontos_num": -5.8,
      "preco_num": 0.74,
      "variacao_num": -2.26,
      "media_num": -5.8,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 293,
        "clube_casa_posicao": 20,
        "clube_visitante_id": 282,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 5,
        "partida_data": "2016-05-22 11:00:00",
        "local": "Arena da Baixada",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "CV": 1,
        "FC": 3,
        "FS": 2,
        "PE": 1
      }
    },
    {
      "nome": "Henrique Pacheco de Lima",
      "apelido": "Henrique",
      "foto": "https://s.glbimg.com/es/sde/f/2016/04/29/3ee91a269e77c0defb08f1fee38c0aff_FORMATO.png",
      "atleta_id": 37694,
      "rodada_id": 1,
      "clube_id": 283,
      "posicao_id": 4,
      "status_id": 7,
      "pontos_num": 5.1,
      "preco_num": 6.69,
      "variacao_num": 2.69,
      "media_num": 5.1,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 283,
        "clube_casa_posicao": 18,
        "clube_visitante_id": 316,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 9,
        "partida_data": "2016-05-21 21:00:00",
        "local": "Mineirão",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "CA": 1,
        "FC": 1,
        "FS": 4,
        "PE": 4,
        "RB": 4
      }
    },
    {
      "nome": "Gabriel Barbosa Almeida",
      "apelido": "Gabriel",
      "foto": "https://s.glbimg.com/es/sde/f/2016/05/01/1483ff1b3cb82fa23bc8625656564b18_FORMATO.png",
      "atleta_id": 83257,
      "rodada_id": 1,
      "clube_id": 277,
      "posicao_id": 5,
      "status_id": 7,
      "pontos_num": -0.8,
      "preco_num": 11.18,
      "variacao_num": -4.82,
      "media_num": -0.8,
      "jogos_num": 1,
      "partida": {
        "clube_casa_id": 277,
        "clube_casa_posicao": 16,
        "clube_visitante_id": 294,
        "aproveitamento_mandante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "aproveitamento_visitante": [
          "",
          "",
          "",
          "",
          ""
        ],
        "clube_visitante_posicao": 4,
        "partida_data": "2016-05-22 11:00:00",
        "local": "Vila Belmiro",
        "valida": true,
        "placar_oficial_mandante": null,
        "placar_oficial_visitante": null,
        "url_confronto": "",
        "url_transmissao": ""
      },
      "scout": {
        "FC": 2,
        "FF": 2,
        "FS": 3,
        "I": 3,
        "PE": 4
      }
    }
  ],
  "clubes": {
    "262": {
      "id": 262,
      "nome": "Flamengo",
      "abreviacao": "FLA",
      "posicao": 5,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/flamengo_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/flamengo_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/flamengo_30x30.png"
      }
    },
    "263": {
      "id": 263,
      "nome": "Botafogo",
      "abreviacao": "BOT",
      "posicao": 15,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/botafogo_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/botafogo_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/botafogo_30x30.png"
      }
    },
    "264": {
      "id": 264,
      "nome": "Corinthians",
      "abreviacao": "COR",
      "posicao": 8,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/corinthians_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/corinthians_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/corinthians_30x30.png"
      }
    },
    "266": {
      "id": 266,
      "nome": "Fluminense",
      "abreviacao": "FLU",
      "posicao": 3,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2015/07/21/fluminense_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2015/07/21/fluminense_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2015/07/21/Fluminense-escudo.png"
      }
    },
    "275": {
      "id": 275,
      "nome": "Palmeiras",
      "abreviacao": "PAL",
      "posicao": 1,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/palmeiras_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/palmeiras_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/palmeiras_30x30.png"
      }
    },
    "276": {
      "id": 276,
      "nome": "São Paulo",
      "abreviacao": "SAO",
      "posicao": 7,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/sao_paulo_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/sao_paulo_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/sao_paulo_30x30.png"
      }
    },
    "277": {
      "id": 277,
      "nome": "Santos",
      "abreviacao": "SAN",
      "posicao": 16,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/santos_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/santos_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/santos_30x30.png"
      }
    },
    "282": {
      "id": 282,
      "nome": "Atlético-MG",
      "abreviacao": "ATL",
      "posicao": 5,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/atletico_mg_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/atletico_mg_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/atletico_mg_30x30.png"
      }
    },
    "283": {
      "id": 283,
      "nome": "Cruzeiro",
      "abreviacao": "CRU",
      "posicao": 18,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2015/04/29/cruzeiro_65.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2015/04/29/cruzeiro_45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2015/04/29/cruzeiro_30.png"
      }
    },
    "284": {
      "id": 284,
      "nome": "Grêmio",
      "abreviacao": "GRE",
      "posicao": 11,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/gremio_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/gremio_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/gremio_30x30.png"
      }
    },
    "285": {
      "id": 285,
      "nome": "Internacional",
      "abreviacao": "INT",
      "posicao": 10,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2016/05/03/inter65.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2016/05/03/inter45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2016/05/03/inter30.png"
      }
    },
    "287": {
      "id": 287,
      "nome": "Vitória",
      "abreviacao": "VIT",
      "posicao": 19,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/vitoria_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/vitoria_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/vitoria_30x30.png"
      }
    },
    "292": {
      "id": 292,
      "nome": "Sport",
      "abreviacao": "SPO",
      "posicao": 17,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2015/07/21/sport65.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2015/07/21/sport45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2015/07/21/sport30.png"
      }
    },
    "293": {
      "id": 293,
      "nome": "Atlético-PR",
      "abreviacao": "ATL",
      "posicao": 20,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2015/06/24/atletico-pr_2015_65.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2015/06/24/atletico-pr_2015_45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2015/06/24/atletico-pr_2015_30.png"
      }
    },
    "294": {
      "id": 294,
      "nome": "Coritiba",
      "abreviacao": "COR",
      "posicao": 4,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/coritiba_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/coritiba_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/coritiba_30x30.png"
      }
    },
    "303": {
      "id": 303,
      "nome": "Ponte Preta",
      "abreviacao": "PON",
      "posicao": 12,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/ponte_preta_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/ponte_preta_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/ponte_preta_30x30.png"
      }
    },
    "315": {
      "id": 315,
      "nome": "Chapecoense",
      "abreviacao": "CHA",
      "posicao": 13,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2015/08/03/Escudo-Chape-165.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2015/08/03/Escudo-Chape-145.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2015/08/03/Escudo-Chape-130.png"
      }
    },
    "316": {
      "id": 316,
      "nome": "Figueirense",
      "abreviacao": "FIG",
      "posicao": 9,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/figueirense_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/figueirense_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/figueirense_30x30.png"
      }
    },
    "327": {
      "id": 327,
      "nome": "América-MG",
      "abreviacao": "AME",
      "posicao": 14,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/equipes/2014/04/14/america_mg_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/america_mg_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/equipes/2013/12/16/america_mg_30x30.png"
      }
    },
    "344": {
      "id": 344,
      "nome": "Santa Cruz",
      "abreviacao": "STC",
      "posicao": 2,
      "escudos": {
        "60x60": "https://s.glbimg.com/es/sde/f/organizacoes/2014/04/14/santa_cruz_60x60.png",
        "45x45": "https://s.glbimg.com/es/sde/f/organizacoes/2014/04/14/santa_cruz_45x45.png",
        "30x30": "https://s.glbimg.com/es/sde/f/organizacoes/2014/04/14/santa_cruz_30x30.png"
      }
    }
  },
  "posicoes": {
    "1": {
      "id": 1,
      "nome": "Goleiro",
      "abreviacao": "gol"
    },
    "2": {
      "id": 2,
      "nome": "Lateral",
      "abreviacao": "lat"
    },
    "3": {
      "id": 3,
      "nome": "Zagueiro",
      "abreviacao": "zag"
    },
    "4": {
      "id": 4,
      "nome": "Meia",
      "abreviacao": "mei"
    },
    "5": {
      "id": 5,
      "nome": "Atacante",
      "abreviacao": "ata"
    },
    "6": {
      "id": 6,
      "nome": "Técnico",
      "abreviacao": "tec"
    }
  },
  "status": {
    "2": {
      "id": 2,
      "nome": "Dúvida"
    },
    "3": {
      "id": 3,
      "nome": "Suspenso"
    },
    "5": {
      "id": 5,
      "nome": "Contundido"
    },
    "6": {
      "id": 6,
      "nome": "Nulo"
    },
    "7": {
      "id": 7,
      "nome": "Provável"
    }
  },
  "time": {
    "time_id": 834723,
    "clube_id": 264,
    "esquema_id": 3,
    "cadun_id": 40424774,
    "facebook_id": null,
    "foto_perfil": "https://cartolafc.globo.com/static/img/placeholder_perfil.png",
    "nome": "SLB Encarnados",
    "nome_cartola": "Giovani Generali",
    "slug": "slb-encarnados",
    "tipo_escudo": 1,
    "cor_fundo_escudo": "ffffff",
    "cor_borda_escudo": "000000",
    "cor_primaria_estampa_escudo": "ff241d",
    "cor_secundaria_estampa_escudo": "997a00",
    "url_escudo_svg": "https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/escudo/004042477420160503190708",
    "url_escudo_png": "https://s2.glbimg.com/aSc31ZW1PVPPvUKruorX7jnYbNY=/https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/escudo/004042477420160503190708",
    "url_camisa_svg": "https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/camisa/004042477420160503190708",
    "url_camisa_png": "https://s2.glbimg.com/0S5uu5oYl2vJvzeEOWsF7scP1Zk=/https://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/svg/camisa/004042477420160503190708",
    "url_escudo_placeholder_png": "http://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/placeholder/escudo.png",
    "url_camisa_placeholder_png": "http://s3.glbimg.com/v1/AUTH_58d78b787ec34892b5aaa0c7a146155f/placeholder/camisa.png",
    "tipo_estampa_escudo": 4,
    "tipo_adorno": 1,
    "tipo_camisa": 1,
    "tipo_estampa_camisa": 5,
    "cor_camisa": "ffffff",
    "cor_primaria_estampa_camisa": "ff241d",
    "cor_secundaria_estampa_camisa": "997a00",
    "assinante": false,
    "cadastro_completo": true,
    "patrocinador1_id": 62,
    "patrocinador2_id": 63
  },
  "patrimonio": 91.76,
  "variacao_patrimonio": null,
  "esquema_id": 3,
  "pontos": 9.460000038146973,
  "variacao_pontos": null,
  "valor_time": 91.76,
  "servicos": [
    {
      "servicoId": 3004,
      "status": "HABILITADO"
    },
    {
      "servicoId": 5391,
      "status": "HABILITADO"
    },
    {
      "servicoId": 6490,
      "status": "HABILITADO"
    },
    {
      "servicoId": 438,
      "status": "HABILITADO"
    }
  ],
  "total_ligas": 0,
  "total_ligas_matamata": 0
}

Obs.: Para testar essas chamadas eu recomendo usar o https://www.getpostman.com/.

caioschiavo commented 8 years ago

@roomoraaes valeu, acertei a pontuação aqui

@giovanigenerali então, isso eu consegui também. Minha duvida seria o seguinte, a cada refresh ele vai autenticar e pegar o token, correto? tem como verificar se ja está autenticado antes de fazer a requisição em https://login.globo.com/api/authentication??

giovanigenerali commented 8 years ago

@caioschiavo tem uma url que dá para ficar verificando se o usuário está autenticado:

http://cocoon.globo.com/?callback=userAuth

Retorna esse json:

{
  "hasProEmail": false,
  "isMale": true,
  "name": "[nome do usuario]",
  "facebookId": null,
  "photo": null,
  "hasFreeEmail": false,
  "lastServices": [
    {
      "url": "http://globoesporte.globo.com/cartola-fc",
      "logo": "https://s.glbimg.com/pc/cw/servico/imagens/400-499/438/icone.png",
      "name": "Cartola FC"
    }
  ],
  "email": null,
  "isSubscriber": false,
  "hasFacebook": false
}

Para fazer logout, envia um get nessa url:

https://login.globo.com/logout

Consulte novamente a url de validação, veja que não existe mais o usuário autenticado.

http://cocoon.globo.com/?callback=userAuth

Retorno:

{
  "error": "Cookie missing"
}

Eu não sei se essa é a melhor forma de fazer essa verificação mas pelo que teste isso até que funciona.

Também não sei quanto tempo expira esse token, eu testei aqui e parece que se mantém por um bom tempo. Dependendo da sua necessidade, acho válido essa verificação antes de chamar essas urls que precisam de token.

Depois avisa se resolveu, blz.

giovanigenerali commented 8 years ago

@caioschiavo achei uma outra url para validação, segue o mesmo esquema da que postei acima. No callback você pode passar qualquer função.

http://cocoon.globo.com/user/logged?callback=userAuth

Retorno:

userAuth(
{
 status: "authorized",
 code: "codigo",
 name: "nome-usuario",
 gender: "sexo",
 address: {
 city: "cidade",
 state: "estado"
},
dateOfBirth: "data-nascimento",
token: "[TOKEN]",
provider: "cadun",
id: idi-cadun
}
)

Após o logout:

http://cocoon.globo.com/user/logged?callback=userAuth

Retorno:

userAuth(
{
 status: "unauthorized",
 token: "r_0Xgq_z_APIW66-kWEfkI3PjwL3k6con5zQQyt3Ay0=",
 code: "...50_G6TPxtuslPNUcDugtMPVkg59Cbqge7XsC2cLnA5o=",
 id: "12295485759280461717",
 provider: "anonymous"
}
)
WMarlon commented 8 years ago

Boa Noite, estou acompanhando e desenvolvendo algo também... porém fiquei com uma dúvida... E quando mudarem o nome do time? Ano passado tinha api com cadun ou id... não lembro bem... esse ano só pelo nome por eqto... ?? Obs.:Nem todos estão cadastrados na liga que administro (sem o PRO são só duas ligas). Guardo o id na primeira consulta... mas e depois?

abraços...

caioschiavo commented 8 years ago

@giovanigenerali é isso ai mesmo, obrigado

giovanigenerali commented 8 years ago

@WMarlon eu acho que na nova API só via slug do time mesmo, cadun e id era usado na API antiga. Talvez nesse seu caso você tenha que fazer uma nova consulta para verificar se o time mudou de nome pois o slug também vai mudar.

giovanigenerali commented 8 years ago

@caioschiavo troca o serviceId para 438 no json de autenticação. Já atualizei meu comentário acima.

spydoug commented 8 years ago

Fala @giovanigenerali blz?

como resolver esse problema

XMLHttpRequest cannot load https://login.globo.com/api/authentication. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

a requisição não sendo feita da url deles.

Usei assim

$( document ).ready(function() { $.ajax({ type: "POST", contentType: "application/json", url: "https://login.globo.com/api/authentication", dataType: "json", data: JSON.stringify({"email":"yyyy","password":"xxxx","serviceId": 438}), success: function (msg) { console.log(msg); }, error: function (msg) { console.log(msg);
alert(msg.statusText); } });

});

giovanigenerali commented 8 years ago

@spydoug veja o formato do json de envio para autenticação nesse arquivo aqui https://github.com/wgenial/cartrolandofc/blob/master/auth.php

rafa-trr commented 8 years ago

Fala galera.. to querendo usar essa API do cartola também para criar uma liga à parte.. quero também usar a API do campeonato brasileiro do globoesporte.com.. como proceder para conseguir esse token? a API do camp brasileiro precisa do token??

giovanigenerali commented 8 years ago

@rafa-trr vc tem informação da API do brasileirão? se tiver algo posta aqui. Veja no código que tem exemplo de como obter o token para chamar a API do CartolaFC, tem que passar seu email e senha.

rafa-trr commented 8 years ago

@giovanigenerali Estou logado no site da globo.com, acessei o link http://cocoon.globo.com/user/logged?callback=userAuth e me retornou um json com "status":"authorized" e me deu um token.. como faço para passar esse token para ser autenticado quando for acessar uma url em que precisa da autenticação ? Sobre a API do brasileirão só sei desse link http://globoesporte.globo.com/dynamo/futebol/campeonato/campeonato-brasileiro/brasileirao2016/classificacao.json que inclusive não consigo acessar

giovanigenerali commented 8 years ago

@rafa-trr dá uma lida aqui mesmo https://github.com/wgenial/cartrolandofc/issues/3#issuecomment-220145143 tem tudo explicado.

rafa-trr commented 8 years ago

@giovanigenerali beleza cara, vou dar umas testadas Estive olhando o www.cartolandofc.com lá voce tem justamente uma coisa que preciso, a tabela de jogos com local e horário de cada rodada (meu objetivo é criar um bolão do brasileirão).. qual o link dessa API ??

giovanigenerali commented 8 years ago

@rafa-trr esse site não é meu mas aqui nesse meu projeto tem a url da API para listar os jogos. Leia o wiki aqui.

pupato13 commented 8 years ago

@spydoug você conseguiu resolver o seu problema na chamada ajax da autenticação?

andrelmariano commented 7 years ago

Consegui fazer o login e recebo o retorno:

[id] => Authenticated [userMessage] => Usuário autenticado com sucesso [glbId] => blablablablabla...

até ai tudo bem, a dúvida agora é, como mostrar os dados do meu time = https://api.cartolafc.globo.com/auth/time

pode ajudar ?

logado login

aoliveira82 commented 7 years ago

Não estou conseguindo acessar os dados do API do cartola, quando informa a URL no browser https://api.cartolafc.globo.com/time/slug/terror-da-catalunya retorna os dados normal, mais na minha aplicação PHP parece que retorna vazio.

Esse é meu código $url = "https://api.cartolafc.globo.com/time/slug/terror-da-catalunya";

$ch = curl_init(); $timeout = 0; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); $json_data = curl_exec($ch); $obj = curl_exec($ch); curl_close($ch);

print_r($json_data);

É o mesmo código que utilizei o ano passado, alguém está com problema para acessar?

giovanigenerali commented 7 years ago

está normal, dá uma olhada no código aqui do projeto load-api.php

Thialyson commented 7 years ago

Boa tarde,

Gostaria de saber se alguém está conseguindo pegar a foto do jogador, se sim, como?

Agradeço desde já.

jhonata-menezes commented 7 years ago

Acho que esse resolve para a foto: https://api.cartolafc.globo.com/atletas/mercado Mas também: No pontuados ele retorna: http://api.kartolafc.com.br/atletas/pontuados No time ele tambem retorna: https://api.cartolafc.globo.com/time/id/2273084

Thialyson commented 7 years ago

@jhonata-menezes Eu vi lá, mas mesmo assim o link que vem, sempre dá um 404 (pelo menos para mim). Mas valeu!

giovanigenerali commented 7 years ago

tem dar um replace na string FORMATO que vem na url da foto.

jhonata-menezes commented 7 years ago

@Thialyson vem no Gitter

aoliveira82 commented 7 years ago

@giovanigenerali não consegui, fiz conforme o exemplo que você pediu (load-api.php) e nada fica em branco, resultado em http://fortodo.com.br/laliga/adm/teste.php.

código-fonte:

header('Content-type: application/json;charset=UTF-8');

$url = "https://api.cartolafc.globo.com/time/slug/terror-da-catalunya";

$json = exec("curl -X GET " . $url); echo $json;

giovanigenerali commented 7 years ago

@aoliveira82 por favor qualquer dúvida sobre programação, uso da API etc.. postar no Gitter.