-
-
Save lucashmsilva/9f4596f2924ac5c1eb0721c2c41dc257 to your computer and use it in GitHub Desktop.
/* | |
* @return Retorna a cotação atual de um título específico do Tesouro Direto Junto com a taxa anual de retorno | |
* @customfunction | |
**/ | |
function TESOURODIRETO(bondName) { | |
let srcURL = "https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json"; | |
let jsonData = UrlFetchApp.fetch(srcURL); | |
let parsedData = JSON.parse(jsonData.getContentText()).response; | |
for(let bond of parsedData.TrsrBdTradgList) { | |
let currBondName = bond.TrsrBd.nm; | |
if (currBondName === bondName) | |
return [bond.TrsrBd.untrRedVal, bond.TrsrBd.anulInvstmtRate]; // créditos ao @figueiredods por ter encontrado o campo que retorna a taxa correta | |
} | |
throw new Error("Not Found"); | |
} |
/* | |
* @return Retorna a cotação atual de um título específico do Tesouro Direto | |
* @customfunction | |
**/ | |
function TESOURODIRETO(bondName) { | |
let srcURL = "https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json"; | |
let jsonData = UrlFetchApp.fetch(srcURL); | |
let parsedData = JSON.parse(jsonData.getContentText()).response; | |
for(let bond of parsedData.TrsrBdTradgList) { | |
let currBondName = bond.TrsrBd.nm; | |
if (currBondName === bondName) | |
return bond.TrsrBd.untrRedVal; | |
} | |
throw new Error("Not Found"); | |
} |
Realmente, a API tá tentando validar se é um humano fazendo uma chama, mas isso não faz sentido algum, vai totalmente contra o conceito de API:
Isso fica bem claro no "Run code snippet" da descrição do post que fiz no stackoverflow:
E realmente a solução lógica para isso seria reportar o problema para o admin da API mudar o settings no cloudflare para corrigir isso, mas voltamos ao problema de conseguir entrar em contato.
Sem querer polemizar, mas se tratando de serviço público/federal, já sabem que contato e conseguir essa solução ideal é bem difícil.
Enviei mensagem pela central de atendimentos do Tesouro Direto mas não sei se terei alguma resposta.
Sobre os proxys, pelo nível de bloqueio com CloudFlare, o que dá pra fazer, por enquanto, é implementar algo usando Playwright ou Selenium pra fazer essa req simulando um usuário real de X em X tempos e baixar o JSON e prover um endpoint que devolva ele com Nginx...
@EduardoJM vamos focar a conversa no link que o tulio mandou acima: https://gist.github.com/danperrout/b27197056fa38d0d669332647ab89d7a?permalink_comment_id=5159964#gistcomment-5159964
Alguém já conseguiu solucionar o problema?
Alguém já conseguiu solucionar o problema?
Coloquei algumas informações nessa thread em relação ao que já tentei para entrar em contato com alguém do Tesouro Direto.
Link:
https://gist.github.com/danperrout/b27197056fa38d0d669332647ab89d7a?permalink_comment_id=5159964#gistcomment-5159964