-
-
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"); | |
} |
Boa tarde, @lucashmsilva
Sou iniciante no google sheets, segui os passos no (https://www.reddit.com/r/investimentos/comments/hpl8j9/fun%C3%A7%C3%A3o_tesourodierto_no_google_sheets/), e após executar o script não estou conseguindo chamar a função na planilha.(Erro Função desconhecida).#NOME?
Pode me ajudar?
Olá @Tiagoalvesds, pode acessar essa página [1] e me mostrar como está ai pra você?
@Tiagoalvesds apague toda a linha 1 e a linha 18. Daí salve em implantar
e depois volte pra planilha e tente usar a função de novo.
@Tiagoalvesds, da uma olhada nesse segundo script. Ele retorna somente o valor do título que é passado na função. Pode só copiar o código e substituir todo o código que você colocou lá. Vai ficar igual ao código do print que mandei na primeira resposta que mandei pra você.
Esse número que você está vendo ai é a taxa anual do título, além do valor.
@lucashmsilva , deu certo e funciona perfeitamente! Obrigado! Notei que a cotação puxada é a de resgate, teria como adicionar uma linha e/ou função que puxa a cotação de compra?
@Tiagoalvesds , cara teria que analisar o retorno desses dados no site no TD para descobrir qual campo é a cotação de compra para só então adaptar o código. Hoje em dia não me lembro muito bem, mas não deve ser difícil descobrir o campo. A fonte de dados é essa: json b3
Fiz uma melhoria pra cachear a response do tesouro pq as vezes dá erro por chamar vezes seguidas :)
var cache = CacheService.getScriptCache();
function TESOURODIRETO(bondName, argumento = "r") {
var tesouro = getCachedTesouro();
if (bondName == "tesouro-selic-2027")
bondName = "Tesouro Selic 2027";
if (bondName == "tesouro-selic-2029")
bondName = "Tesouro Selic 2029";
if (bondName == "tesouro-prefixado-2025")
bondName = "Tesouro Prefixado 2025";
if (!tesouro) {
Logger.log("No cached tesouro info found");
updateTesouroCache();
}
tesouro = getCachedTesouro();
for (let bond of tesouro.TrsrBdTradgList) {
console.log(bond);
let currBondName = bond.TrsrBd.nm;
if (currBondName.toLowerCase() === bondName.toLowerCase())
if (argumento == "r")
return bond.TrsrBd.untrRedVal;
else
return bond.TrsrBd.untrInvstmtVal;
}
return 0;
}
function getCachedTesouro() {
var cached = cache.get("tesouro");
if (cached) {
try {
var tesouro = JSON.parse(cached).response;
return tesouro;
} catch (e) {
Logger.log("Error while parsing tesouro from cache");
}
}
}
function updateTesouroCache() {
Logger.log("Updating tesouro cached information");
var response = UrlFetchApp.fetch("https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json");
var content = response.getContentText();
try {
var data = JSON.parse(content);
var cachedTesouro = {};
cachedTesouro["tesouro"] = JSON.stringify(data)
cache.putAll(cachedTesouro);
} catch (e) {
Logger.log("Error while parsing response from tesouro: " + content);
}
}
OI Lucas, valeu obrigado pela ajuda!