turicas/covid19-br

Script em php para consultar API

falinhares opened this issue · 5 comments

Olá,

Criei este script em php para consultar os dados dos estados consolidados mas ele está retornando um string vazio quando deveria retornar num json preenchido:

                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, 'https://brasil.io/api/dataset/covid19/caso/data?is_last=True&place_type=state');
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                    $result = curl_exec($ch);
                    if (curl_errno($ch)) {
                        echo 'Error:' . curl_error($ch);
                    }
                    curl_close($ch);
                    var_dump($result);

Opa, tudo bem? tentou debugar pra ver o motivo de retornar uma string vazia? Eu fiz um aqui em javascript e funcionou tranquilamente.

@falinhares mostra pra gente detalhes do retorno da requisição HTTP

Aqui tá 100%

$ curl -sSL https://brasil.io/api/dataset/covid19/caso/data\?is_last\=True\&place_type\=state | jq .                                                                                                                                                 [14:29:06]
{
  "count": 27,
  "next": null,
  "previous": null,
  "results": [
    {
      "city": null,
      "city_ibge_code": "12",
      "confirmed": 7983,
      "confirmed_per_100k_inhabitants": 905.16875,
      "date": "2020-06-07",
      "death_rate": 0.0259,
      "deaths": 207,
      "estimated_population_2019": 881935,
      "is_last": true,
      "order_for_place": 83,
      "place_type": "state",
      "state": "AC"
    },
...

Pois é. Tá estranho, pq o CURL tá direitinho. Fiz um var_dump do resultado e sai assim:

/Users/falinhares/Sites/forxon_lander_v2/covid.php:45:string '' (length=0)

Consegui. Fiz mais umas pesquisas e precisava colocar mais um parâmetro no setup do curl e fazer um setup do header. Consegui pegar o resultados. Código abaixo:

                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, 'https://brasil.io/api/dataset/covid19/caso/data?is_last=True&place_type=state');
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                    $headers = array();
                    $headers[] = 'Content-Type: application/json';
                    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                    $result = curl_exec($ch);
                    if (curl_errno($ch)) {
                        echo 'Error:' . curl_error($ch);
                    }
                    curl_close($ch);
                    var_dump($result);

@falinhares recomendamos usar a API pública com parcimônia para não onerar nossos servidores. Estamos tendo um volume muito grande de chamadas a API para interagir com datasets completos. Caso você precise manipular volumes muito grandes de dados, baixe os CSVs completos. Peço que acompanhe as novidades em nosso canal no Telegram.