Closed caioschiavo closed 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?
@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?
@caioschiavo está um pouco lento o http://caioschiavo.com/quinta/ Se puder coloca em algum repositório para podermos dar uma olhada. vlw
@giovanigenerali sim, bem lento, pq faço 32 requisições, uma para cada time.
@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.
@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?
@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.
@roomoraaes fez em php? Porque vc soma as parciais dos atletas, se no JSON ja vem a parcial do time?
@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.
@caioschiavo consegui fazer uma chamada direta na API para autenticar e em seguida fazer as chamadas que requerem 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]"}
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:
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
}
}
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
}
@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??
@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.
@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"
}
)
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...
@giovanigenerali é isso ai mesmo, obrigado
@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.
@caioschiavo troca o serviceId para 438 no json de autenticação. Já atualizei meu comentário acima.
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);
}
});
});
@spydoug veja o formato do json de envio para autenticação nesse arquivo aqui https://github.com/wgenial/cartrolandofc/blob/master/auth.php
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??
@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.
@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
@rafa-trr dá uma lida aqui mesmo https://github.com/wgenial/cartrolandofc/issues/3#issuecomment-220145143 tem tudo explicado.
@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 ??
@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.
@spydoug você conseguiu resolver o seu problema na chamada ajax da autenticação?
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 ?
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?
está normal, dá uma olhada no código aqui do projeto load-api.php
Boa tarde,
Gostaria de saber se alguém está conseguindo pegar a foto do jogador, se sim, como?
Agradeço desde já.
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
@jhonata-menezes Eu vi lá, mas mesmo assim o link que vem, sempre dá um 404 (pelo menos para mim). Mas valeu!
tem dar um replace na string FORMATO que vem na url da foto.
@Thialyson vem no Gitter
@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;
@aoliveira82 por favor qualquer dúvida sobre programação, uso da API etc.. postar no Gitter.
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));
fiz de ontem pra hoje na correria, só para quebrar um ganho
mas será que tem alguma maneira mais facil?