Cotação do dólar com PHP
Neste artigo você vai aprender como consumir dados de uma API pública para obter o valor da cotação do dólar. Vamos utilizar a API de cotação do dólar do Banco Central do Brasil com PHP.
O Banco Central do Brasil possui um site chamado "dados abertos" com APIs de uso geral referentes a vários indicadores financeiros.
https://dadosabertos.bcb.gov.br/
Vamos consumir a API referente a cotação do dólar, o link para você consultar as opções disponíveis é este:
https://bit.ly/2KKXKuy
Será necessário informar:
1 - O serviço que desejamos utilizar
2 - Uma data no formato mês-dia-ano.
3 - O formato da resposta. Por padrão a resposta é uma string no formato JSON.
Um exemplo de como acessar:
https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarDia(dataCotacao=@dataCotacao)?@dataCotacao='08-15-2022'&$format=json
Para fazer a comunicação, utilizamos Curl. O cURL é uma ferramenta que permite criar requisições em diversos protocolos, como HTTP, HTTPS e FTP e obter conteúdo remoto. Ele permite que façamos a conexao com webservices e APIs. O Curl existe como ferramenta de linha de comando, e também como biblioteca, a libcurl, que o PHP incorpora e expõe por meio das funções que possuem curl_* no nome.
$ch = curl_init("https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarDia(dataCotacao=@dataCotacao)?@dataCotacao='08-14-2022'&format=json");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res_curl = curl_exec($ch);
if(curl_error($ch)) {
echo curl_error($ch);
} else {
print_r($res_curl);
}
curl_close($ch);
Ao executar o comando acima, fizemos as seguintes operações
1 - No comando curl_init, informamos qual o endereço que queremos acessar, e enviamos os parâmetros através do método GET.
2 - Utilizando os comandos curl_setopt, podemos passar outrsa configurações para a nossa conexão, o primeiro parâmetro é a conexão, o segundo é o comando que queremos configurar, e o terceiro é o valor. A opção CURLOPT_HEADER com o valor 0 desativa o retorno das informações de cabeçalho do servidor que está sendo consultado.
3 - As opções CURLOPT_SSL_VERIFYPEER e CURLOPT_SSL_VERIFYHOST desabilitam a verificação do certificado para conexão com SSL. Para fins de testes, desativamos esta opção, mas em produção, ela deve ficar ativa.
4 - A opção CURLOPT_RETURNTRANSFER como true permite receber o retorno enviado pelo servidor que está sendo acessado.
5 - Finalmente, utilizando o comando curl_exec, executamos a nossa conexão, e guardamos o resultado na variável $res_curl
6 - Para verificar se houve erro, utilizandos o comando curl_error, passando como parâmetro a nossa conexão. Se houver erro de comunicação, imprimimos na tela o resultado. Caso contrário, exibimos na tela o resultado da conexão, que está guardado na variável $res_curl.
O resultado recebido do webservice é uma string no formato JSON. Para poder utilizar este resultado, vamos utilizar o comando json_decode, para converter esta string num array.
Um exemplo de conteúdo:
{"@odata.context":"https://was-p.bcnet.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata$metadata#_CotacaoDolarDia",
"value":[{"cotacaoCompra":5.09190,"cotacaoVenda":5.09250,"dataHoraCotacao":"2022-08-15 13:11:49.159"}]}
Dentro deste JSON, existe um array de objetos dentro do campo "value". Como fizemos o filtro por 1 data, o array vai ter apenas uma posição.
$resultado = json_decode($res_curl, true);
$valores = $resultado["value"][0];
Para recuperar a informação da cotação do dólar, que está dentro da variável valores, vamos fazer o seguinte:
echo $valores["cotacaoCompra"];
Segue abaixo o código completo:
$ch = curl_init("https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarDia(dataCotacao=@dataCotacao)?@dataCotacao='08-14-2022'&format=json");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res_curl = curl_exec($ch);
if(curl_error($ch)) {
echo curl_error($ch);
} else {
$resultado = json_decode($res_curl, true);
$valores = $resultado["value"][0];
//Agora será possível recuperar a informação da cotação do dólar:
echo $valores["cotacaoCompra"];
echo (" * ");
echo $valores["cotacaoVenda"];
echo (" * ");
echo $valores["dataHoraCotacao"];
}
curl_close($ch);