endoedgar / covid19-monitorbr

Project that monitors via interactive map COVID-19 evolution in each Brazilian city and state using Brasil.IO API. Source code available at https://github.com/endoedgar/covid19-monitorbr-src
https://endoedgar.github.io/covid19-monitorbr/
8 stars 0 forks source link

Busca otimizada na API do Brasil.IO #3

Open turicas opened 4 years ago

turicas commented 4 years ago

Para buscar os dados de maneira mais otimizada na API você pode passar alguns filtros via query string, como:

endoedgar commented 4 years ago

Olá turicas, eu utilizei o page_size=10000 para reduzir a paginação da sua API.

No momento, você pode selecionar no mapa tanto uma cidade ou estado, por isso não filtrei os dados apenas por município (afim de reduzir roundtrips para seu servidor caso o usuário selecione um estado por exemplo).

Sobre o is_last, seria possível incluir um filtro para obter registros até uma data X? O is_last é perfeito para obter dados de hoje, porém eu também inclui um novo campo no mapa para o usuário selecionar uma data para carregar a situação do Brasil em qualquer dia do passado, e o is_last só funciona se o usuário escolher a data de hoje :/

Eu sei que se eu usar o campo date=????-??-??, ele me mostra exatamente os casos desse dia, porém para ficar perfeito nesta API, esse filtro deveria ser parecido com o is_last mas para uma data específica no passado, retornando inclusive, cidades com ocorrencias antes dessa data.

turicas commented 4 years ago

@endoedgar isso infelizmente ainda não temos no backend do Brasil.IO. O is_last não inclui apenas os dados de hoje: ele inclui o registro mais recente para aquele estado/município (pode ter sido hoje ou não). Se você não vai usar os filtros da API talvez seja melhor baixar os dados completos.

endoedgar commented 4 years ago

Então turicas, eu consigo utilizar o is_last para data de hoje: Por exemplo na cidade de SP se eu pesquisar com is_last habilitado

GET https://brasil.io/api/dataset/covid19/caso/data?city=São+Paulo&is_last=True

o seguinte resultado aparece:

    {
      "city": "São Paulo",
      "city_ibge_code": "3550308",
      "confirmed": 1044,
      "confirmed_per_100k_inhabitants": 8.52104,
      "date": "2020-03-27",
      "death_rate": 0.0594,
      "deaths": 62,
      "estimated_population_2019": 12252023,
      "is_last": true,
      "place_type": "city",
      "state": "SP"
    }

O que é perfeito! Consigo utilizar esse código numa boa, e até realizar requests subsequentes mais completos caso o usuário clique numa cidade por exemplo. Porém se o usuário escolher a data de ontem por exemplo, e eu pesquisar is_last true com a data de ontem utilizando o seguinte request:

GET https://brasil.io/api/dataset/covid19/caso/data?city=São+Paulo&is_last=True&date=2020-02-26

O resultado é:

"results": []

O que é compreensível do ponto de vista técnico, porém não é o último resultado desse dia entende?

Eu posso fazer o download do arquivo completo numa boa também :), mas é só esse o problema do front-end não poder utilizar o filtro de forma mais eficiente.

turicas commented 4 years ago

Colocar is_last para datas anteriores é algo complexo, pois pode ser que não tenhamos o dado na data exatamente anterior. Por isso, o que recomendo é você criar seu próprio is_last no frontend:

Veja o código que calcula is_lastpara o Brasil.IO.