licitacoes-jp-parai / sistema-licita-jp

O objetivo deste repositório é ser um monorepo para as aplicações relacionadas ao projeto de Licitações e visualização de dados
2 stars 0 forks source link

Documentar todas as APIs que entregam dados relevantes no portal de licitações #1

Open fbormann opened 5 months ago

fbormann commented 5 months ago

O objetivo desta tarefa é aprender e documentar sobre todas as rotas, requests e responses necessários para obter os dados a partir do link https://transparencia.joaopessoa.pb.gov.br/#/licitacoes.


Motivação

Dessa forma, nós poderemos começar a coletar dados das APIs e aprender sobre eles, para poder tomar decisões acerca de que dados temos disponíveis. Quais não temos, e qual vai ser a melhor forma de automatizar.


Entregável

Crie um PR que adicione as descobertas em um documento dentro da pasta "docs/source_data/…". Este documento deve incluir as seguintes informações para cada rota:

Sugestões iniciais

Uma boa forma de fazer isto é seguindo/aprendendo com os artigos:

flauberjp commented 5 months ago

Pessoal,

Um contato meu, que trabalhou na prefeitura, mencionou que antes de sair, houve um projeto para criar endpoints públicos para acesso aos dados de licitações, mas não progrediu.

De todo jeito, ele sugeriu que a gente utilize o FalaBr, explicando de forma simples a necessidade de acesso a todas as licitações da prefeitura a partir de uma determinada data. Falou para destacarmos a inviabilidade de baixar uma por uma no portal de transparência e que solicitemos uma solução para acessar todas as informações de uma só vez.

O link abaixo é o do FalaBr:

https://falabr.cgu.gov.br/web/home

É acessar, escolher a categoria "Acesso à Informação" e compartilhe a necessidade do nosso grupo de voluntários.

Lembrando que ter acesso aos dados do site de verdade é uma real possibilidade.

Um grande exemplo disso é o app "Preço da Hora" que acessa dados da receita pra pegar as notas fiscais emitidas e usar isso para informar os preços a população. É uma tarefa dificil? É! Mas não impossível! Podemos conseguir isso se tivermos a razão certa. Detalhe que esse app, foi uma parceria da UFPB com o TCE e o Governo do Estado, e que uma das razões do TCE esta envolvido foi a necessidade de criar ferramentas exatamente para detectar irregularidades nas contas (como por exemplo corrupção), minha opnião

fbormann commented 5 months ago

https://portaldatransparencia.gov.br/pagina-interna/603389-dicionario-de-dados-licitacoes

fbormann commented 5 months ago

Segue URL para buscar os dados das licitações recentes: https://transparencia.joaopessoa.pb.gov.br:8080/filter-licitacoes

Segue a URL para buscar os dados de uma licitação específica através do ID: https://transparencia.joaopessoa.pb.gov.br/#/licitacoes?id=9057

Segue URL para baixar os arquivos: https://transparencia.joaopessoa.pb.gov.br/#/licitacoes/baixar-arquivo?id={ID_DO_ARQUIVO}

fbormann commented 5 months ago

Minha branch pra investigar essa issue é esta : https://github.com/licitacoes-jp-parai/sistema-licita-jp/tree/issue-1-research-apis-fbormann , minha ideia é criar uma CLI que permita o consumo fácil da API, além dela exportar os dados para stdout, csv e json. (Pra exportar pra .csv, eu vou propor alguns modelos de dados do tipo Pydantic pra validar as coisas no consumo)

epitacioneto commented 5 months ago

Boa noite, comecei a preparação da documentação da rota filter-licitacoes, na branch issue-1-research-apis-epitacioneto. Estou focando na rota que faz o menu principal de licitações do site, de forma a entender e identificar o que está sendo retornado pela response.

Tem um markdown na pasta _docs/sourcedata que ainda está faltando documentar os formatos de alguns objetos da response, bem como formatá-lo para ficar com a legibilidade melhor.

No momento em que estava preparando a documentação da rota, precisei realizar alguns scripts para me retornar valores presentes no dropdown do menu, que fazem parte da rota analisada e coloquei-os na pasta _research_code/issue1. Iniciei o script utilizando apenas o BeautifulSoup4, mas não consegui pegar o HTML corretamente (estava conversando com @fbormann na reunião do dia 31/01 que seria interessante solucionar essas requests apenas com Bs4), desta forma, acabei utilizando o Selenium junto com Bs4 para conseguir extrair a página corretamente. Como executei o script inicialmente no Google Colab, acabou existindo um problema de compatibilidade do Colab com o Selenium, por isso, nos próximos dias, vou testar o script localmente.

Como solução intermediária do problema anterior, retirei o HTML manualmente dos dropdowns (estão na pasta _research_code/issue_1/rawdata) para testes. Em dois casos, nos dropdowns de Participantes e Unidades Interessadas, por serem uma lista grande, a página só retorna um número menor de componentes da lista, algo parecido (ou talvez seja) como uma paginação, então também vou analisar uma solução para extrair todos os componentes dessas listas.