Skip to content

Instantly share code, notes, and snippets.

@danperrout
Created June 3, 2021 16:08
Show Gist options
  • Save danperrout/b15d52448ba06baf1dbccd9bd6d19a5c to your computer and use it in GitHub Desktop.
Save danperrout/b15d52448ba06baf1dbccd9bd6d19a5c to your computer and use it in GitHub Desktop.
API Função SELIC Google Planilhas (Sheets)
/*
* @return Retorna a taxa anual da SELIC de acordo com a data passada (se não for passada nenhuma data retorna a taxa anual do dia de hoje).
* Fonte: https://www.bcb.gov.br/estabilidadefinanceira/selicdadosdiarios
**/
function SELIC(dataConsulta = new Date()) {
var today = Utilities.formatDate(new Date(), "GMT+3", "dd/MM/yyyy");
if (dataConsulta.length == 0)
dataConsulta = new Date()
dataConsulta = new Date(String(dataConsulta))
dataConsulta = Utilities.formatDate(dataConsulta, "GMT+3", "dd/MM/yyyy")
if (dataConsulta == today)
(dataConsulta) = Utilities.formatDate(new Date((new Date()).getTime() - 1 * (24 * 3600 * 1000)), "GMT+3", "dd/MM/yyyy")
var data = {
"dataInicial": dataConsulta,
"dataFinal": dataConsulta
};
var payload = JSON.stringify(data);
var options = {
"method": "POST",
headers: {
Accept: " application/json, text/plain, */*",
"Content-Type": "application/json",
},
payload: payload,
};
var url = "https://www3.bcb.gov.br/novoselic/rest/taxaSelicApurada/pub/search?page=1&pageSize=20";
try {
let jsondata = UrlFetchApp.fetch(url, options);
let parsedData = JSON.parse(jsondata.getContentText());
console.log(parsedData.registros[0].taxaAnual.toFixed(2));
return parseFloat(parsedData.registros[0].taxaAnual.toFixed(4)) / 100
} catch (e) {
// Logs an ERROR message.
var erro = 'Erro ao obter taxa SELIC: ' + e
console.error(erro);
return erro
}
}
@lucas404x
Copy link

lucas404x commented Jan 7, 2024

Opa amigo,

Notei que quando é realizada uma consulta num dia não útil (como finais de semana ou feriados), a API retorna a SELIC do próximo dia útil, o que por consequência retorna uma taxa zerada. Não tenho muito conhecimento em JS, mas as mudanças abaixo resolveram o problema.

/*
* @return Retorna a taxa anual da SELIC de acordo com a data passada (se não for passada nenhuma data retorna a taxa anual do dia de hoje). 
* Fonte: https://www.bcb.gov.br/estabilidadefinanceira/selicdadosdiarios
**/
function SELIC(dataConsulta = new Date()) {
  var today = Utilities.formatDate(new Date(), "GMT+3", "dd/MM/yyyy");
  
  if (dataConsulta.length == 0)
    dataConsulta = new Date()

  dataConsulta = new Date(String(dataConsulta))
  dataConsulta = Utilities.formatDate(dataConsulta, "GMT+3", "dd/MM/yyyy")
  var dataInicial = dataConsulta

  if (dataConsulta == today) {
    dataConsulta = Utilities.formatDate(new Date((new Date()).getTime() - 1 * (24 * 3600 * 1000)), "GMT+3", "dd/MM/yyyy")
    dataInicial = Utilities.formatDate(new Date((new Date()).getTime() - (new Date().getDate() + 1) * (24 * 3600 * 1000)), "GMT+3", "dd/MM/yyyy")
  }

  var data = {
    "dataInicial": dataInicial,
    "dataFinal": dataConsulta
  };
  var payload = JSON.stringify(data);

  var options = {
    "method": "POST",
    headers: {
      Accept: " application/json, text/plain, */*",
      "Content-Type": "application/json",
    },
    payload: payload,
  };

  var url = "https://www3.bcb.gov.br/novoselic/rest/taxaSelicApurada/pub/search?page=1&pageSize=20";

  try {
    let jsondata = UrlFetchApp.fetch(url, options);
    let parsedData = JSON.parse(jsondata.getContentText());
    
    let taxaAnual = 0
    for (const registro of parsedData.registros) {
      const regTaxAnual = registro.taxaAnual.toFixed(2)
      if (regTaxAnual > 0) {
        taxaAnual = parseFloat(regTaxAnual)
        break;
      }
    }
    taxaAnual = parseFloat(taxaAnual.toFixed(4)) / 100
    console.log(taxaAnual)
    return taxaAnual
  } catch (e) {
    // Logs an ERROR message.
    var erro = 'Erro ao obter taxa SELIC: ' + e
    console.error(erro);
    return erro
  }

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