Skip to content

Instantly share code, notes, and snippets.

@danperrout
Last active May 6, 2024 17:53
Show Gist options
  • Save danperrout/b27197056fa38d0d669332647ab89d7a to your computer and use it in GitHub Desktop.
Save danperrout/b27197056fa38d0d669332647ab89d7a to your computer and use it in GitHub Desktop.
API Função TESOURODIRETO Google Sheets
/*
* @return Retorna a cotação atual de um título específico do Tesouro Direto.
* Fonte: https://www.tesourodireto.com.br/titulos/precos-e-taxas.htm
**/
function TESOURODIRETO(bondName, argumento="r") {
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.toLowerCase() === bondName.toLowerCase())
if(argumento == "r")
return bond.TrsrBd.untrRedVal;
else
return bond.TrsrBd.untrInvstmtVal;
}
throw new Error("Título não encontrado.");
}
@joaopedrosusselbertogna

Gente, eu sou meio animal com programação, como eu faço para adicionar essa API no Google Planilhas? Sou professor e estou desenvolvendo um projeto de educação financeira, posso melhorar muito minha planilha com esse API

@danperrout
Copy link
Author

danperrout commented Feb 11, 2023 via email

@danperrout
Copy link
Author

Uso sua API, como faço para buscar o valor de um tesouro que não está mais à venda, mais tenho dinheiro aplicado, como o Tesouro Selic 2024

Meu código já prevê isso e vc pode usar um argumento na sua função pra trazer o valor da aba "INVESTIR" ou o valor da aba "RESGATAR". Por padrão ele traz o valor da aba resgatar. Caso queira o outro valor, usando meu código, é só colocar na sua célula =TESOURODIRETO("nome do título","i")

@johnt1000
Copy link

Boa noite @danperrout, obrigado por compartilhar seu código.

@klausbegnis
Copy link

klausbegnis commented Sep 4, 2023

Então, não estava mais funcionando, pois não comparava certo os valores de ano, adicionei isso daqui:
resolvou para os casos do prefixado e selic que são os do meu interesse

Coloquei uns logs pra debug assim consegue ver no histório de execuções as comparações entre o json e o que você informou de input

/** @return Retorna a cotação atual de um título específico do Tesouro Direto. 
* Fonte: https://www.tesourodireto.com.br/titulos/precos-e-taxas.htm
**/
function TESOURODIRETO2(bondName, argumento="r") {
    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;
        console.log(currBondName, bondName)
        if (currBondName === bondName)
          var thenum1 = currBondName.replace(/^\D+/g, '');
          var thenum2 = bondName.replace(/^\D+/g, '');
          if (thenum1 === thenum2)
              if(argumento == "r")
                  return bond.TrsrBd.untrRedVal;
              else
                  return bond.TrsrBd.untrInvstmtVal;
    }
    throw new Error("Título não encontrado.", bondName);
}

@wroliveira1
Copy link

Ha alguns dias parou de funcionar. Colocando o codigo do klausbegnis consegui fazer o tesouro selic 2029 funcionar com argumento i, ja os demais titulos nao sao encontrados. Com argumento r ele retorna 0. Alguma ideia ?

@danperrout
Copy link
Author

Ha alguns dias parou de funcionar. Colocando o codigo do klausbegnis consegui fazer o tesouro selic 2029 funcionar com argumento i, ja os demais titulos nao sao encontrados. Com argumento r ele retorna 0. Alguma ideia ?

No dia de hoje, esse são os 53 títulos que retornam valor:
[
"Tesouro Selic 2024",
"Tesouro Selic 2025",
"Tesouro Selic 2026",
"Tesouro Selic 2027",
"Tesouro Selic 2029",
"Tesouro Prefixado 2024",
"Tesouro Prefixado 2025",
"Tesouro Prefixado com Juros Semestrais 2025",
"Tesouro Prefixado 2026",
"Tesouro Prefixado com Juros Semestrais 2027",
"Tesouro Prefixado 2029",
"Tesouro Prefixado com Juros Semestrais 2029",
"Tesouro Prefixado com Juros Semestrais 2031",
"Tesouro Prefixado com Juros Semestrais 2033",
"Tesouro IPCA+ 2024",
"Tesouro IPCA+ com Juros Semestrais 2024",
"Tesouro IPCA+ 2026",
"Tesouro IPCA+ com Juros Semestrais 2026",
"Tesouro IPCA+ 2029",
"Tesouro IPCA+ com Juros Semestrais 2030",
"Tesouro Educa+ 2026",
"Tesouro Educa+ 2027",
"Tesouro IPCA+ com Juros Semestrais 2032",
"Tesouro Educa+ 2028",
"Tesouro Educa+ 2029",
"Tesouro Educa+ 2030",
"Tesouro IPCA+ 2035",
"Tesouro IPCA+ com Juros Semestrais 2035",
"Tesouro Educa+ 2031",
"Tesouro Educa+ 2032",
"Tesouro Educa+ 2033",
"Tesouro Educa+ 2034",
"Tesouro Educa+ 2035",
"Tesouro IPCA+ com Juros Semestrais 2040",
"Tesouro Educa+ 2036",
"Tesouro Educa+ 2037",
"Tesouro Educa+ 2038",
"Tesouro Educa+ 2039",
"Tesouro Educa+ 2040",
"Tesouro IPCA+ 2045",
"Tesouro IPCA+ com Juros Semestrais 2045",
"Tesouro Educa+ 2041",
"Tesouro Renda+ Aposentadoria Extra 2030",
"Tesouro IPCA+ com Juros Semestrais 2050",
"Tesouro Renda+ Aposentadoria Extra 2035",
"Tesouro IPCA+ com Juros Semestrais 2055",
"Tesouro Renda+ Aposentadoria Extra 2040",
"Tesouro Renda+ Aposentadoria Extra 2045",
"Tesouro Renda+ Aposentadoria Extra 2050",
"Tesouro Renda+ Aposentadoria Extra 2055",
"Tesouro Renda+ Aposentadoria Extra 2060",
"Tesouro Renda+ Aposentadoria Extra 2065",
"Tesouro IGPM+ com Juros Semestrais 2031"
]

@GuilhermeCostaTSilvio
Copy link

Boa tarde, como eu faria se quisesse trazer o valor unitário do titulo, algum saberia me ajudar?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment