Implement complete backend scraper with SQLite database and FastAPI REST API - #2
Merged
Merged
Conversation
Co-authored-by: marcelo-m7 <117441129+marcelo-m7@users.noreply.github.com>
…fix, backoff melhorado Co-authored-by: marcelo-m7 <117441129+marcelo-m7@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Create repository for backend scraper under Monynha Softwares
Implement complete backend scraper with SQLite database and FastAPI REST API
Oct 27, 2025
marcelo-m7
approved these changes
Oct 27, 2025
marcelo-m7
left a comment
Contributor
There was a problem hiding this comment.
It is needed to improve the scrapping process.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds production-ready scraper infrastructure for UAlg course data with normalized SQLite storage and REST API endpoints for data access.
Core Components
Database Schema (
schema.sql)levels,schools,areas,courses,modules,course_documents,course_area,module_courseComplete Scraper (
src/scrape_ualg.py)data/docs/REST API (
src/api.py)GET /courses- filterable by level/school/area with paginationGET /courses/{id}- full details including modules and documentsGET /levels|/schools|/areas- metadata endpointsGET /stats- aggregate statistics/docsUsage
Testing
35 tests with 80% coverage across scraper, API, and database operations. All SQL queries parameterized to prevent injection.
Notes
Original basic scraper (
src/scraper.py) preserved for backward compatibility. Selectors inscrape_ualg.pyare placeholder heuristics and need adjustment to actual DOM structure of UAlg site.Original prompt
Prompt: Criação de Repositório Backend/Scraper – Monynha Softwares
Crie um para o projeto dsob a organização Monynha-Softwares (https://github.com/Monynha-Softwares) o back-end com scraper. O repositório deve seguir o modelo de monynha Softwares, conter somente o código do back-end e scraper (sem front-end por enquanto) e utilizar a licença MIT. Toda a documentação (README, comentários, arquivos de contribuição) deve ser em português. Siga as melhores práticas de programação colaborativa e organização de código, conforme descrito a seguir.
Estrutura e Conteúdo do Repositório
Nomeação adequada: escolha um nome claro e consistente com o propósito (ex.: monynha-backend-scraper).
Diretórios principais: crie pastas como src/ ou app/ para o código-fonte do scraper/back-end e tests/ para os testes automatizados. Separe o código de produção e os testes em diretórios distintos (de acordo com boas práticas de projeto Python).
Gerenciamento de dependências: inclua um arquivo requirements.txt (ou pyproject.toml/Pipfile) com todas as dependências. Adicione também um Makefile (ou script de gerenciamento) na raiz. Por exemplo, inclua no Makefile tarefas genéricas como init (que rode pip install -r requirements.txt) e test (que rode pytest tests).
Arquivos de configuração: adicione um .gitignore adequado (ex.: ignorar venv/, arquivos temporários, etc.), e diretório .github/workflows/ com workflow de CI para testes automatizados. Use ferramentas de linting e formatação (ex.: Flake8, Black) para manter estilo consistente (mesmo que não haja citação direta, isso é recomendação geral).
Readme inicial: crie README.md em português explicando o objetivo do projeto, instruções de instalação e uso. O README é o primeiro arquivo que visitantes veem, e junto com a licença e demais arquivos ajuda a alinhar expectativas do projeto.
Documentação e Licença
README: deve descrever o projeto, suas funcionalidades, dependências, instruções de instalação e execução, exemplos de uso e como executar os testes. Escreva em português claro e conciso. Deixe claro que a licença é MIT e liste os passos básicos para rodar o scraper/back-end. (Um bom README, junto com licença e diretrizes de contribuição, “ajuda a compartilhar expectativas e gerenciar contribuições”.)
LICENÇA: inclua um arquivo LICENSE com o texto padrão da licença MIT. A licença informa “o que se pode e não se pode fazer com o código” e garante direitos de uso abertos.
CONTRIBUTING e COC: adicione um CONTRIBUTING.md em português com orientações de como contribuir (padrões de código, fluxo de trabalho, código de conduta, etc.) e um CODE_OF_CONDUCT.md definindo normas de convivência na comunidade (boas práticas de interação).
Templates de issues/PR: crie templates em .github/ISSUE_TEMPLATE/ e .github/PULL_REQUEST_TEMPLATE/ para padronizar novas issues e pull requests (incentive descrições completas, checklist de testes, etc.). Isso ajuda a guiar contribuidores desde o início.
Boas Práticas de Colaboração
Fluxo de trabalho Git: use branch principal (main) estável e faça ramificações (branches) para cada feature ou correção. Realize revisões via pull requests, solicitando aprovação de pelo menos outro revisor antes de mesclar. Use issues para relatar bugs e planejar melhorias, e pull requests para discutir e revisar mudanças propostas.
Commits e mensagens: faça commits frequentes e atômicos, cada um com uma mensagem clara e descritiva. Mensagens detalhadas ajudam na manutenção e colaboração. Por exemplo, explique o “por quê” da mudança, não só o “quê”. Isso facilita o entendimento durante code reviews e históricos de mudanças.
Revisão de código: incentive revisões mútuas de código. Ao criar um PR, revise as mudanças de outro desenvolvedor e vice-versa. Isso diminui bugs, melhora a legibilidade e transmite conhecimento na equipe. Busque sempre legibilidade e adesão às convenções (ex.: PEP8 em Python).
Comunicação: use a seção de Issues para discussões específicas (relatar bugs, pedir melhorias) e comentários em Pull Requests para feedback de código. Mantenha um tom profissional e colaborativo, seguindo o Código de Conduta definido.
Testes Automatizados
Cobertura de testes: escreva testes automatizados para as funcionalidades do scraper e do back-end. Prefira testes de unidade independentes; cada teste deve ter um nome descritivo que indique claramente seu propósito. Use asserts para verificar resultados esperados. Por exemplo, teste a extração correta de dados, tratamento de erros, etc.
Independência dos testes: certifique-se de que cada teste não dependa de estados externos ou de outros testes. Use fixtures ou mocks se necessário. Isso garante que possam rodar isoladamente e em qualquer ordem.
Integração Contínua: configure um workflow de CI (ex.: GitHub Actions) para instalar dependências e executar a suíte de testes a cada push ou pull request. O GitHub Actions tem templates prontos para projetos Python, mas o essencial é que, em cada push, o ambiente virtual ...
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.