Coletar Informações...
 
Notifications
Clear all

Coletar Informações em API do Cartola

26 Posts
5 Usuários
4 Reactions
8,626 Visualizações
Felipe Ecks
(@ecks)
Posts: 48
Trusted Member
Topic starter
 

Boa noite, de antemão saudo a todos e agradeço toda ajuda que sempre recebo aqui no fórum.
Bem, estou precisando coletar informações em um API do cartola, nela encontram dados de jogadores dispostos como na imagem anexo. Porém, eu preciso buscar dentro da api as informações e acomodá-las na planilha cada dado em seu devido lugar, para que apos cada rodada eu possa atualizar os dados direto da API...
Testei alguns códigos, mas em nenhum obtive êxito. Resolvi pedir ajuda.

Link API https://api.cartolafc.globo.com/atletas/mercado
Os dados vem distribuidos dessa forma...

A tabela pra onde preciso mandar os dados está anexada, mas a imagem é essa...

Certo de todo empenho e ajuda que sempre recebo aqui, já agradeço.

 
Postado : 05/05/2018 1:10 pm
(@excel86)
Posts: 12
Active Member
 
Postado por: @raygsson

O @edsonbr fez um excelente trabalho usando expressões regulares pra tratar esse arquivo.

A forma mais simples é usando uma função pra tratar o JSON como objeto, a melhor função pra isso esta em https://github.com/VBA-tools/VBA-JSON  . Vou anexar o arquivo aqui também, importe o arquivo/modulo pro seu projeto.

Não fiz apenas a parte pra extrair os "SCOUTS", precisaria analisar com calma este caso. Nada impede você se pesquisar sobre isso na WEB também.

Um exemplo de código pra extrair os demais dados seria isso:

Sub ExtrairJson()

With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", "https://api.cartolafc.globo.com/atletas/mercado", False
.send: .WaitForResponse 10
txtSite = .responsetext
End With

Dim jsonObject As Object
Set jsonObject = JsonConverter.ParseJson(txtSite)

i = 3
For Each item In jsonObject("atletas")
Planilha1.Cells(i, "A") = item("nome")
Planilha1.Cells(i, "B") = item("slug")
Planilha1.Cells(i, "C") = item("apelido")
Planilha1.Cells(i, "D") = item("foto")
Planilha1.Cells(i, "E") = item("atleta_id")
Planilha1.Cells(i, "F") = item("rodada_id")
Planilha1.Cells(i, "G") = item("clube_id")
Planilha1.Cells(i, "H") = item("posicao_id")
Planilha1.Cells(i, "I") = item("status_id")
Planilha1.Cells(i, "J") = item("pontos_num")
Planilha1.Cells(i, "K") = item("preco_num")
Planilha1.Cells(i, "L") = item("variacao_num")
Planilha1.Cells(i, "M") = item("media_num")
Planilha1.Cells(i, "N") = item("jogos_num")
i = i + 1
Next

End Sub

Não entendi o que fazer. Sou leigo com isso.

 
Postado : 17/09/2020 3:37 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

o arquivo .rar não esta corrompido , baixe o programa necessário pra extração. Pode usar WinRAR ou 7-Zip, existem varios.

 
Postado : 17/09/2020 3:41 pm
(@excel86)
Posts: 12
Active Member
 
Postado por: @raygsson

o arquivo .rar não esta corrompido , baixe o programa necessário pra extração. Pode usar WinRAR ou 7-Zip, existem varios.

Consegui fazer a extração, porém não sei como usar aquele código que enviou acima.

 
Postado : 17/09/2020 3:54 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

Segue a planilha que usei no teste

 
Postado : 17/09/2020 4:18 pm
(@excel86)
Posts: 12
Active Member
 
Postado por: @raygsson

Segue a planilha que usei no teste

Muito obrigado pela ajuda. Amanhã tentarei entender um pouco em relação. Já saí do trabalho e no momento estou sem PC. Grato.

 
Postado : 17/09/2020 4:24 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 
Postado por: @raygsson

...@macedorafa a estrutura do arquivo JSON pode ter modificado...

...Não fiz apenas a parte pra extrair os "SCOUTS", precisaria analisar com calma este caso....

De fato, analisando por alto, o erro que está dando é que agora há dois scouts a mais do que os da época (DS e PI) o que dá erro quando algum atleta (?) tem um desses dois scouts (o .Find não o encontra). Seria só ajustar isso tanto na planilha quanto no código*.

Postado por: @raygsson

...A forma mais simples é usando uma função pra tratar o JSON como objeto, a melhor função pra isso esta em https://github.com/VBA-tools/VBA-JSON

Muito bem, @raygsson! É sempre bom ter um coelho a mais em nossa "Cartola" 👍  [não pude resistir ao trocadilho com o assunto do tópico hehehe]

Agora com os Excéis (?) mais novos também podemos importar diretamente arquivos JSON salvos ou diretamente da internet para uma tabela pelo Obter e Transformar (Power Query): Guia Dados > Nova Consulta > De Outras Fontes > Da Web. Insere-se o link e o conteúdo é acrescentado ao modelo de dados. Aí seria só trabalhar sobre as sub-tabelas.

Como me sinto mais confortável, por enquanto, com o VBA/Regex, vou nessa vibe. Mas se algum colega se dispor a trabalhar sobre o Power Query, poste aqui que aprenderemos também.

Postado por: @raygsson

O @edsonbr fez um excelente trabalho usando expressões regulares pra tratar esse arquivo.

Obrigado pela consideração. 👍 

*@macedorafa, agora não dá mas vou ver se consigo mexer nisso à noite, ok?

 
Postado : 17/09/2020 4:35 pm
Raygsson reacted
(@excel86)
Posts: 12
Active Member
 
Postado por: @edsonbr
Postado por: @raygsson

...@macedorafa a estrutura do arquivo JSON pode ter modificado...

...Não fiz apenas a parte pra extrair os "SCOUTS", precisaria analisar com calma este caso....

De fato, analisando por alto, o erro que está dando é que agora há dois scouts a mais do que os da época (DS e PI) o que dá erro quando algum atleta (?) tem um desses dois scouts (o .Find não o encontra). Seria só ajustar isso tanto na planilha quanto no código*.

Postado por: @raygsson

...A forma mais simples é usando uma função pra tratar o JSON como objeto, a melhor função pra isso esta em https://github.com/VBA-tools/VBA-JSON

Muito bem, @raygsson! É sempre bom ter um coelho a mais em nossa "Cartola" 👍  [não pude resistir ao trocadilho com o assunto do tópico hehehe]

Agora com os Excéis (?) mais novos também podemos importar diretamente arquivos JSON salvos ou diretamente da internet para uma tabela pelo Obter e Transformar (Power Query): Guia Dados > Nova Consulta > De Outras Fontes > Da Web. Insere-se o link e o conteúdo é acrescentado ao modelo de dados. Aí seria só trabalhar sobre as sub-tabelas.

Como me sinto mais confortável, por enquanto, com o VBA/Regex, vou nessa vibe. Mas se algum colega se dispor a trabalhar sobre o Power Query, poste aqui que aprenderemos também.

Postado por: @raygsson

O @edsonbr fez um excelente trabalho usando expressões regulares pra tratar esse arquivo.

Obrigado pela consideração. 👍 

*@macedorafa, agora não dá mas vou ver se consigo mexer nisso à noite, ok?

Certo Edson. Muito obrigado pela ajuda, tanto você quanto o raygsson. 

 
Postado : 17/09/2020 6:11 pm
Raygsson reacted
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

Ajustei pra trazer os "SCOUTS", inclui tbm as novas DS e PI que o @edsonbr citou, segue o código e planilha:

Sub ExtrairJson()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", "https://api.cartolafc.globo.com/atletas/mercado", False
.send: .WaitForResponse 10
txtSite = .responsetext
End With

Dim jsonObject As Object
Set jsonObject = JsonConverter.ParseJson(txtSite)

With Planilha1

i = 3
For Each item In jsonObject("atletas")
.Cells(i, "A") = item("nome")
.Cells(i, "B") = item("slug")
.Cells(i, "C") = item("apelido")
.Cells(i, "D") = item("foto")
.Cells(i, "E") = item("atleta_id")
.Cells(i, "F") = item("rodada_id")
.Cells(i, "G") = item("clube_id")
.Cells(i, "H") = item("posicao_id")
.Cells(i, "I") = item("status_id")
.Cells(i, "J") = item("pontos_num")
.Cells(i, "K") = item("preco_num")
.Cells(i, "L") = item("variacao_num")
.Cells(i, "M") = item("media_num")
.Cells(i, "N") = item("jogos_num")
.Cells(i, "O") = item("scout")("RB")
.Cells(i, "P") = item("scout")("G")
.Cells(i, "Q") = item("scout")("A")
.Cells(i, "R") = item("scout")("SG")
.Cells(i, "S") = item("scout")("FS")
.Cells(i, "T") = item("scout")("FF")
.Cells(i, "U") = item("scout")("FD")
.Cells(i, "V") = item("scout")("FT")
.Cells(i, "W") = item("scout")("DD")
.Cells(i, "X") = item("scout")("DP")
.Cells(i, "Y") = item("scout")("GC")
.Cells(i, "Z") = item("scout")("CV")
.Cells(i, "AA") = item("scout")("CA")
.Cells(i, "AB") = item("scout")("PP")
.Cells(i, "AC") = item("scout")("GS")
.Cells(i, "AD") = item("scout")("FC")
.Cells(i, "AE") = item("scout")("I")
.Cells(i, "AF") = item("scout")("PE")
.Cells(i, "AG") = item("scout")("DS")
.Cells(i, "AH") = item("scout")("PI")
i = i + 1
Next

End With

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

MsgBox "Extração Efetuada!", vbInformation, "Aviso."

End Sub
 
Postado : 17/09/2020 7:31 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

@raygsson, baixei seu arquivo (bom trabalho, por sinal!) porém percebi que vc não eliminou meu código antigo e também não atualizou o link do botão "Extrai Atletas" para a sua Sub ExtrairJson(). Então ao clicar no botão vai executar a desatualizada, o que dá erro. 

Gentileza editar seu arquivo e substituí-lo aqui no Planilhando, eliminando meu trecho de código e deixando apenas o seu, para não confundir quem for utilizar, ok?

 
Postado : 18/09/2020 3:03 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Segue a minha versão corrigida para incluir os Scouts DS, PI e outros que porventura surgirem.

 

 
Postado : 18/09/2020 3:12 am
(@excel86)
Posts: 12
Active Member
 

@edsonbr e @raygsson. Muito obrigado pela atenção de vocês. Me ajudaram bastante com as planilhas. Ficaram show de bola.

 
Postado : 18/09/2020 9:11 am
Página 2 / 2