-
-
Save danperrout/b27197056fa38d0d669332647ab89d7a to your computer and use it in GitHub Desktop.
| // ============================================================ | |
| // COLE SEU TOKEN AQUI (entre as aspas). | |
| // Gere em https://radaropcoes.com → /profile/ → card API. | |
| // ============================================================ | |
| const RADAR_TOKEN = "rop_COLE_SEU_TOKEN_AQUI"; | |
| // ============================================================ | |
| /* | |
| * @return Acessa radaropcoes.com e retorna informações de um título específico do Tesouro Direto | |
| * Endpoint: https://api.radaropcoes.com/bonds/{bondName} | |
| */ | |
| function TESOURODIRETO(bondName, argumento = "r") { | |
| let srcURL = "https://api.radaropcoes.com/bonds/" + encodeURIComponent(bondName); | |
| let response = UrlFetchApp.fetch(srcURL, { | |
| headers: { "Authorization": "Bearer " + RADAR_TOKEN }, | |
| muteHttpExceptions: true | |
| }); | |
| console.log(srcURL) | |
| if (response.getResponseCode() !== 200) { | |
| throw new Error("Erro ao acessar a API ou título não encontrado."); | |
| } | |
| let bond = JSON.parse(response.getContentText()); | |
| // A API responde 200 mesmo com token inválido/ausente/quota: campos numéricos vêm null | |
| // e os textos contêm a mensagem do erro. Surface esse caso pro usuário. | |
| if (bond.treasuryBondCode === null) { | |
| throw new Error(bond.indication); | |
| } | |
| // argumento: | |
| // "r" → valor de resgate | |
| // qualquer outro → valor unitário de investimento | |
| if (argumento === "r") { | |
| return bond.unitaryRedemptionValue; | |
| } else { | |
| return bond.unitaryInvestmentValue; | |
| } | |
| } |
Aqui parou de funcionar. Aparace a informação: https://api.radaropcoes.com/bonds/undefined
Estava funcionando pra mim, mas parou de atualizar e a última atualização de valor é do dia 28/08 às 19:51. Mais alguém está com o mesmo problema?
Algum update sobre a atualização dos dados? Pra mim aparece ainda como 28/08 a última atualização de valores também.
Algum update sobre a atualização dos dados? Pra mim aparece ainda como 28/08 a última atualização de valores também.
Olá,
Estou usando o código abaixo que adaptei para minha necessidade (apenas obter o valor de resgate do título) e está funcionando normalmente.
Tente avaliá-lo na sua aplicação.
// ============================================================
const RADAR_TOKEN = "token"; // Gere em https://radaropcoes.com → /profile/ → card API.
function TESOURODIRETO(bondName) {
let srcURL = "https://api.radaropcoes.com/bonds/" + encodeURIComponent(bondName);
let response = UrlFetchApp.fetch(srcURL, {
headers: { "Authorization": "Bearer " + RADAR_TOKEN },
muteHttpExceptions: true
});
console.log(srcURL)
if (response.getResponseCode() !== 200) {
throw new Error("Erro ao acessar a API ou título não encontrado.");
}
let bond = JSON.parse(response.getContentText());
if (bond.treasuryBondCode === null) {
throw new Error(bond.indication);
}
return bond.unitaryRedemptionValue;
}
@nikolas-18 o meu código era similar e não estava funcionando no dia que postei minha msg... agora (dia 10/09) a API passou a retornar os valores atualizados novamente. Se quiser, adicione um retorno pro updated_at como parâmetro, assim dá pra ter uma noção da última vez que foi atualizado (foi o que eu fiz) pra saber quando passou a atualizar novamente ou se estava apenas retornando o mesmo valor de dias atrás. Acho que era algum problema na API que o @danperrout comentou semana passada que havia corrigido e só n estava ainda refletindo live 😄
A minha função está +- assim:
/**
* Retorna o valor do título desejado do Tesouro Direto nacional.
*
* @param {string} bondName Nome exato do título do Tesouro Direto. Ex: "Tesouro IPCA+ 2032"
* @param {string} [argumento="r"] Opcional. Tipo de informação: "r" para valor de resgate, "i" para valor de investimento, "t" para a taxa atual, ou "d" para ultima data de atualização do resultado da API.
* @return {number|string} O valor numérico de resgate/investimento ou o texto da taxa do título.
*
* @customfunction
*
* @example
* =TESOURODIRETO("Tesouro IPCA+ 2032")
* =TESOURODIRETO("Tesouro IPCA+ 2032", "r")
* =TESOURODIRETO("Tesouro IPCA+ 2032", "i")
* =TESOURODIRETO("Tesouro IPCA+ 2032", "t")
* =TESOURODIRETO("Tesouro IPCA+ 2032", "d")
*/
function TESOURODIRETO(bondName, argumento = "r") {
let srcURL = "https://api.radaropcoes.com/bonds/" + encodeURIComponent(bondName);
let response = UrlFetchApp.fetch(srcURL, {
headers: { "Authorization": "Bearer " + RADAR_TOKEN },
muteHttpExceptions: true
});
if (response.getResponseCode() !== 200) {
throw new Error("Erro ao acessar a API ou título não encontrado.");
}
let bond = JSON.parse(response.getContentText());
if (bond.treasuryBondCode === null) {
throw new Error(bond.indication);
}
// "r" → valor de resgate
// "i" → valor de investimento
// "t" → taxa do Tesouro (investmentProfitabilityIndexerName)
switch (argumento.toLowerCase()) {
case "r":
return bond.unitaryRedemptionValue;
case "i":
return bond.unitaryInvestmentValue;
case "t":
return bond.investmentProfitabilityIndexerName;
case "d":
return bond.updated_at;
default:
throw new Error("Argumento inválido. Use 'r', 'i', 't' ou 'd'.");
}
}
Funcionou perfeitamente para mim, parabéns Daniel.