-
-
Save danperrout/b27197056fa38d0d669332647ab89d7a to your computer and use it in GitHub Desktop.
/* | |
* @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://api.radaropcoes.com/bonds.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."); | |
} |
IMPORTXML("https://www.tesouroinfo.com/";"//table[@id='table_investir']//tr[td='Ipca+ 2045']/td[3]/text()")/100
Deu certo.
Uso uma planilha para controle pessoal, estava atualizando uma vez por semana para contornar esse problema, independente do preciosismo da fonte ser real-time ou se tem a mesma confiabilidade da fonte oficial, estou usando a seguinte fórmula, onde a célula A84 contém o nome do título como consta do site "tesouroinfo.com", e está funcionando muito bem:
=IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & A84 & "']/td[4]/text()")
A fórmula está retornando o "Preço de venda", que é a informação que desejo, alterando o índice em "td[4]/" podemos obter outras informações sobre o título.
Uso uma planilha para controle pessoal, estava atualizando uma vez por semana para contornar esse problema, independente do preciosismo da fonte ser real-time ou se tem a mesma confiabilidade da fonte oficial, estou usando a seguinte fórmula, onde a célula A84 contém o nome do título como consta do site "tesouroinfo.com", e está funcionando muito bem:
=IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & A2 & "']/td[4]/text()")
A fórmula está retornando o "Preço de venda", que é a informação que desejo
Romulo, perfeito, meu caso é o mesmo, incluí a fórmula no Google Sheets trocando a célula referência onde incluí o nome como aparece no site "tesouroinfo.com", porém dá a mensagem ERRO:carregando os dados, O que pode estar errado, pois mesmo digitando direto o nome do título sem referenciar, o erro persiste... ?
Olá Renato! Não sei se funciona para todos os títulos eu usei os seguintes nomes nas células "A81:A86":
Selic 2027
Selic 2029
Ipca+ 2035
Ipca+ 2029
Ipca+ 2026
Funcionou tudo perfeito. Transcrevo a seguir a fórmula novamente, espero que funcione para você:
=IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & A81 & "']/td[4]/text()")
Essa fórmula esta funcionando agora, mas acho que eventualmente irão derrubar, pois eles possuem uma API de consulta:
=IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & PROPER(TRIM(CLEAN(A2))) & "']/td[4]/text()")
@danperrout , tentei agora com o nome do título e retornou N/A. Parou de novo ou errei algo?
=IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & PROPER(TRIM("Tesouro Prefixado 2029")) & "']/td[4]/text()")
#N/A
@danperrout , tentei agora com o nome do título e retornou N/A. Parou de novo ou errei algo? =IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & PROPER(TRIM("Tesouro Prefixado 2029")) & "']/td[4]/text()") #N/A
tem que ser com o nome do titulo que está na página. Nesse caso seria "Prefixado 2029"
=IMPORTXML("https://www.tesouroinfo.com/"; "//table[@id='table_resgatar']//tr[td='" & PROPER(TRIM(CLEAN(A2))) & "']/td[4]/text()")
Romulo, muito obrigado, depois de umas 2 horas o IPCA+ 2029 apareceu ok, mas se mudo para Ipca+ 2035 dá o mesmo erro e fica pendurado carregando, muito estranho.
após um bom tempo rodou...Obrigado!
Antes de discutir formulas pra puxar os valores (< isso tá facil), o principal é discutir que essa fonte realmente é confiável e com sincronia real-time. Antes tinhamos uma API oficial do tesourodireto, agora estamos todos nos baseando num site terceiro, não sei se dá pra garantir que é uma boa fonte de informação.
No momento que posto este comentário:
https://www.tesourodireto.com.br/titulos/precos-e-taxas.htm - Última atualização: 02/09/2024 • 09h26min
https://www.tesouroinfo.com/ - Última atualização: | 30/Ago/2024 15:36
Como suspeitava, não dá pra confiar 100% no site de terceiro. Talvez seja mais um workaround. O ideal seria reestabelecer acesso ao API oficial.
Acessei agora e os dois estão sincronizados.
Tenho acompanhado os dois e estão sempre sincronizados, as vezes demora algumas horas, mas me parece que da pra utilizar.
Eu vou utilizar..
o site https://www.tesouroinfo.com/ está fora do ar? ou é só na minha máquina?
o site https://www.tesouroinfo.com/ está fora do ar? ou é só na minha máquina?
aqui também está fora
Aqui esta fora tambem.
Po galera, aquele csv do tesouro transparente nao é confiavel?
É uma merda usar um arquivo de 11mb cheio de lixo, mas achei que fosse uma opcao viavel.
Vi que eles atualizaram ele hoje, mas abrindo o csv nao achei nenhum registro com data base 02/09/2024
Eu literalmente implementei um codigo ontem que filtra ele e pega os valores atualizados dos titulos, alguem sabe se é comum esse csv nao ser atualizado direito?
Para atualização dos títulos existentes do Tesouro Direto, e dos preços e taxas de venda e compra, utilizava os seguintes serviços:
"https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json"
"https://www.tesourodireto.com.br/b3/tesourodireto/pricesAndFeesHistory?codigo=&periodo="
Ambos estão retornando erro 403, conforme algumas pessoas relataram anteriormente.
Alguém encontrou alguma alternativa?
Aqui esta fora tambem. Po galera, aquele csv do tesouro transparente nao é confiavel?
É uma merda usar um arquivo de 11mb cheio de lixo, mas achei que fosse uma opcao viavel. Vi que eles atualizaram ele hoje, mas abrindo o csv nao achei nenhum registro com data base 02/09/2024
Eu literalmente implementei um codigo ontem que filtra ele e pega os valores atualizados dos titulos, alguem sabe se é comum esse csv nao ser atualizado direito?
atualizando uma vez por dia pra mim já está bom.
fuçando achei este, não sei se serve: https://ghostnetrn.github.io/bot-tesouro-direto/
Será que não valeria a pena entrar em contato com o criador do https://github.com/ghostnetrn/bot-tesouro-direto e perguntar como que ele ainda tá conseguindo utilizar a API do TesouroDireto (URL_API=https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json)??
Alegria de pobre dura pouco, o link não atualiza…
Colocaram o Cloudflare na frente ou já tinha mas ativaram para que bots não possam acessar, exigindo aquela verificação de que é humano. :(
o 403 é do Cloudflare, tanto que funciona no navegador mas com scripts falha sempre.
Como eles não fornecem a chave de API para pessoas físicas, talvez a solução é baixar manualmente o arquivo quando se quiser ver a atualização. Alguma outra ideia?
Alegria de pobre dura pouco, o link não atualiza…
aqui ainda funciona (com o selenium)
Coloquei o caminho "https://raw.githubusercontent.com/ghostnetrn/bot-tesouro-direto/714896cbcfc4100e241006cd29fef1bc3fcbcc65/tesouro.json" no script do Google Sheets e funcionou...
Eu coloquei esse link e funcionou no Google Sheets, mas o preço do título veio diferente.
O problema é que esse link é de um JSON estático. Se não me engano dia dia 05/09/2024.
Então ele sempre irá repetir os valores desse dia.
Alguém saberia alguma forma de pegar o JSON para o dia atual?
Pessoal, implementei minha própria abstração do json do Tesouro Direto. Na verdade, é uma cópia exata do JSON fornecidos por eles que pode ser acessado em:
Oficial: https://www.tesourodireto.com.br/json/br/com/b3/tesourodireto/service/api/treasurybondsinfo.json
Mirror: https://api.radaropcoes.com/bonds.json
Esse json é atualizado de 15 em 15 minutos, mas o próprio TD só atualiza de hora em hora, por isso as datas podem estar "atrasadas" em algumas horas.
Fiquem a vontade para utilizar, além disso, no site Radar Opções, incluí a possibilidade de COPIAR o nome do Título para a área de transferência:
Alguém saberia alguma forma de pegar o JSON para o dia atual?
Código atualizado com o novo endereço de json: https://api.radaropcoes.com/bonds.json
Alguém sabe explicar como resolver o seguinte erro:
Erro TypeError: Cannot read properties of undefined (reading 'toLowerCase')
TESOURODIRETO @ TESOURODIRETO.gs:12
O erro é por conta do comentário que declara a função, segue a versão corrigida:
/**
* Retorna a cotação atual de um título específico do Tesouro Direto.
*
* @param {string} nome do título
* @return Retorna a cotação atual de um título específico do Tesouro Direto.
* @customfunction
* Fonte: https://www.tesourodireto.com.br/titulos/precos-e-taxas.htm
*/
function TESOURODIRETO(bondName="Tesouro IPCA+ 2029", argumento="r") {
let srcURL = "https://api.radaropcoes.com/bonds.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(typeof(currBondName))
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.");
}
Perfeito Artur! Valeu!
IPCA+2045:
=IMPORTXML("https://www.tesouroinfo.com/";"//table[@id='table_investir']//tr[td='Ipca+ 2045']/td[3]/text()")/100
Usando importxml com xpath acho melhor, vale a pena aprender a usar xpath.
Pessoal, vocês confirmam que esse site tesouroinfo.com está realmente atualizando/sincronizando as taxas e todos os valores igualzinho o https://www.tesourodireto.com.br/titulos/precos-e-taxas.htm?
Antes de discutir formulas pra puxar os valores (< isso tá facil), o principal é discutir que essa fonte realmente é confiável e com sincronia real-time. Antes tinhamos uma API oficial do tesourodireto, agora estamos todos nos baseando num site terceiro, não sei se dá pra garantir que é uma boa fonte de informação.