Skip to content

Instantly share code, notes, and snippets.

@danperrout
Last active April 1, 2025 14:37
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 Acesse radaropcoes.com 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.");
}
@edermcastro
Copy link

edermcastro commented Mar 20, 2025

podes usar o Curl pra isso

function obterConteudoElementoJson($url, $elementSelector) {
// Inicializa o cURL
$curl = curl_init();

// Configura as opções do cURL
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // Desativa a verificação SSL (não recomendado em produção)
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // Desativa a verificação do host SSL (não recomendado em produção)

// Executa a requisição cURL
$html = curl_exec($curl);

// Verifica se houve erro
if ($html === false) {
    echo 'Erro cURL: ' . curl_error($curl);
    curl_close($curl);
    return false;
}

// Fecha a conexão cURL
curl_close($curl);

// Cria um objeto DOMDocument para analisar o HTML
$dom = new DOMDocument();
@$dom->loadHTML('<?xml encoding="utf-8" ?>' . $html);  // Supressão de erros de parsing (ex: tags não fechadas)

// Cria um objeto DOMXPath para executar consultas XPath
$xpath = new DOMXPath($dom);

// Executa a consulta XPath para encontrar o elemento desejado
 $elementList = $xpath->query('//*[contains(@id, "' . str_replace('#', '', $elementSelector) . '")]');

if ($elementList->length > 0) {
     $element = $elementList->item(0);

    // Extrai os dados relevantes do elemento
    $data = [];
    $listItems = $xpath->query('./li', $element); // Seleciona todos os <li> dentro do elemento

    foreach ($listItems as $listItem) {
        $titulo = $xpath->query('./h3[@class="variavel-titulo"]/text()', $listItem)->item(0)->textContent;
        $dado = $xpath->query('./p[@class="variavel-dado"]/text()', $listItem)->item(0)->textContent;
        $periodo = $xpath->query('./p[@class="variavel-periodo"]/text()', $listItem)->item(0)->textContent;

        $data[] = [
            'titulo' => trim($titulo),
            'dado' => trim($dado),
            'periodo' => trim($periodo),
        ];
    }


    // Converte o array para JSON
    return json_encode($data, JSON_UNESCAPED_UNICODE);
} else {
    return false; // Elemento não encontrado
}
}

// Exemplo de uso:
$url = 'https://www.ibge.gov.br/explica/inflacao.php';
$elementSelector = '#dadoBrasil';

$json = obterConteudoElementoJson($url, $elementSelector);

if ($json !== false) {
header('Content-Type: application/json'); // Define o cabeçalho para JSON
echo $json;
} else {
echo "Não foi possível obter o conteúdo do elemento '$elementSelector' do site '$url'.";
}

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