/filometro

Obtenha os dados dos postos de vacinação da covid-19 em São Paulo

Primary LanguagePythonMIT LicenseMIT

Logo filometro
Filometro

Metadata
PyPI License MIT Total Downloads

Status
PyPI - Status Tests - Status

Index

O que é?

Filometro é um wrapper (embrulho) do site De Olho Na Fila, de modo a disponibilizar acesso a diversos dados sobre os postos de vacinação em todo o Estado de São Paulo.

Com esse pacote você tem acesso aos seguintes dados dos postos:

  • Equipamento
  • Endereço
  • Contatos
  • Distrito
  • Zona
  • Os imunizantes disponíveis
  • Situação da fila
  • Modalidade
  • Data e hora da última atualização

As informações são exatamente as mesmas disponíveis no site oficial (De Olho na Fila), porém disponibilizados por meio de um pacote Python simples para facilitar a coleta, manipulação e filtragem dos dados. Consulte a documentação para saber como utiliza-lo.

Instalação

Instale o pacote usando pip:

$ pip install filometro

Demo

Obtenha uma lista de postos que tem disponível em seu estoque o imunizante da PFizer:

>>> from filometro import Filometro
>>> from filometro import Immunizing

>>> filometro = Filometro()

>>> postos = filometro.by_immunizing(Immunizing.PFIZER)
>>> postos
[
    Posto(equipment='UBS HUMAITÁ - DR. JOÃO DE AZEVEDO LAGE', last_update='2021-12-22 12:51:18.653'),
    ...  # comprimido
    Posto(equipment='UBS SANTA CRUZ', last_update='2021-12-22 12:46:35.190')
]

Verifique a documentação para obter informações sobre os atributos e métodos disponíveis.

Documentação

Essa é a documentação completa do pacote Filometro. Nessa seção contém o necessário para utilizar o pacote completamente.

Como utilizar?

Para utilizar o pacote é necessário importar a classe Filometro e instanciar um objeto dessa mesma classe:

>>> from filometro import Filometro
>>> filometro = Filometro()

Quando o objeto é instanciado ocorre a coleta dos dados no site De Olho na Fila e, quando finalizado, são armazenados na memória em um atributo de uso interno do objeto. Para obter todos os dados é aconselhado utilizar o método all_postos:

>>> postos = filometro.all_postos()

Uma lista de objetos do tipo Posto será retornada. O objeto Posto contém atributos que armazenam as informações de um posto. Por exemplo, é possível verificar o endereço de um posto acessando o atributo address:

>>> posto = postos[10]  # Obtendo o posto na posição 10 da lista de postos
>>> posto.address

Também é possível obter uma lista de postos conforme um requisito de filtragem, para isso existem métodos que usam identificadores (Enumeração ou Enum para os íntimos) específicos para realizar a filtragem. Você deve importar o identificador que deseja utilizar e passar como argumento para o método de filtragem. Por exemplo, caso você queira obter uma lista de postos que estão localizados na zona Sul de São Paulo:

>>> from filometro import Zone
>>> filometro.by_zone(Zone.SUL)

Para atualizar os dados dos postos armazenados em memória é indicado utilizar o método reload:

>>> filometro.reload()

Esse método recarrega todos os dados com as informações mais recentes disponíveis no site oficial.

Sempre que precisar, utilize a função help() em alguma classe, objeto ou método para obter ajuda:

>>> help(filometro)

Objeto Posto

Todos os métodos tem como retorno uma lista de dados, esses dados são representados no objeto Posto. Veja quais são seus atributos:

>>> posto.equipment             # Equipamento da unidade.
>>> posto.address               # Endereço onde está localizado.
>>> posto.district              # Distrito onde está localizado.
>>> posto.zone                  # Zona onde está localizado.
>>> posto.maps                  # Um link do Google Maps para o endereço.
>>> posto.contacts              # Uma lista de contatos, se houver.
>>> posto.astrazeneca           # '0' ou '1' caso astrazeneca não esteja ou esteja disponível.
>>> posto.coronavac             # '0' ou '1' caso coronavac não esteja ou esteja disponível.
>>> posto.coronavac_pediatrica  # '0' ou '1' caso coronavac pediátrica não esteja ou esteja disponível.
>>> posto.pfizer                # '0' ou '1' caso pfizer não esteja ou esteja disponível.
>>> posto.pfizer_baby           # '0' ou '1' caso pfizer baby não esteja ou esteja disponível.
>>> posto.pfizer_bivalente      # '0' ou '1' caso pfizer bivalente não esteja ou esteja disponível.
>>> posto.pfizer_pediatrica     # '0' ou '1' caso pfizer pediátrica não esteja ou esteja disponível.
>>> posto.janssen               # '0' ou '1' caso janssen não esteja ou esteja disponível.
>>> posto.influenza             # '0' ou '1' caso influenza não esteja ou esteja disponível.
>>> posto.intercambialidade     # '0' ou '1' caso intercambialidade não esteja ou esteja disponível.
>>> posto.dengue                # '0' ou '1' caso dengue não esteja ou esteja disponível.
>>> posto.situation             # A última atualização da situação da fila.
>>> posto.modality              # A modalidade da unidade.
>>> posto.last_update           # Data e hora da última atualização no formato AAAA-MM-DD HH:MM:SS.MS.

Métodos da classe Filometro

>>> filometro.reload()             # Atualizar dados em memória.
>>> filometro.all_postos()         # Obter todos os postos.
>>> filometro.all_postos_open()    # Obter todos os postos abertos.
>>> filometro.all_postos_closed()  # Obter todos os postos fechados.
>>> filometro.by_zone(...)         # Obter todos postos de uma zona.
>>> filometro.by_modality(...)     # Obter todos postos de uma modalidade.
>>> filometro.by_district(...)     # Obter todos postos de um distrito.
>>> filometro.by_situation(...)    # Obter todos postos por situação.
>>> filometro.by_immunizing(...)   # Obter todos postos que possuem um imunizante.
>>> filometro.to_dict()            # Obter todos postos convertidos para `dict`.

Identificadores para filtragem

Todos os identificadores estão disponíveis para uso atráves da interface príncipal do pacote:

>>> from filometro import Zone, Modality, District, Situation, Immunizing

Zone - Representa as zonas do Estado de São Paulo:

>>> Zone.SUL
>>> Zone.OESTE
>>> Zone.NORTE
>>> Zone.LESTE
>>> Zone.CENTRO
>>> Zone.MEGA_DRIVES

Modality - Representa as modalidades dos postos:

>>> Modality.PARQUES
>>> Modality.POSTO_FIXO
>>> Modality.POSTO_VOLANTE
>>> Modality.DRIVE_THRU
>>> Modality.MEGAPOSTO

District - Representa todos os distritos do Estado de São Paulo que disponíbilizam um imunizante em seus postos. Como há muitos distritos, use a função dir ou help para mais infomações:

>>> help(District)
>>> dir(District)

Situation - Representa as situações das filas nos postos:

>>> Situation.NAO_FUNCIONANDO
>>> Situation.SEM_FILA
>>> Situation.FILA_PEQUENA
>>> Situation.FILA_MEDIA
>>> Situation.FILA_GRANDE

Immunizing - Representa os imunizantes disponíveis nos postos no Estado de São Paulo:

>>> Immunizing.ASTRAZENECA
>>> Immunizing.INTERCAMBIALIDADE
>>> Immunizing.PFIZER
>>> Immunizing.PFIZER_BABY
>>> Immunizing.PFIZER_BIVALENTE
>>> Immunizing.PFIZER_PEDIATRICA
>>> Immunizing.CORONAVAC
>>> Immunizing.CORONAVAC_PEDIATRICA
>>> Immunizing.JANSSEN
>>> Immunizing.INFLUENZA
>>> Immunizing.DENGUE

Contribuições

Toda contribuição é super bem-vinda!

Abaixo mostro com o que você pode contribuir:

  • Encontrou algum bug, quer propor uma nova funcionalidade ou conversar sobre o projeto? Abra uma Issue e descreva seu caso.

  • Existe uma issue aberta e você quer resolve-la, quer implementar uma nova funcionalidade ou melhorar a documentação? Faça suas adições e me envie um Pull Request

  • Gostou do projeto, mas não quer ou ainda não consegue contribuir com ele? Considere deixar uma estrela ⭐ para o Filometro

Obrigado pelo interesse em colaborar de alguma forma com o projeto ❤

Licença

Filometro utiliza a licença MIT em todo seu código, confira suas condições em MIT License.