Skip to main content

Sistema profissional de monitoramento e resposta a avaliações médicas. Inclui web scraping resiliente, API REST, análise de sentimento, geração inteligente de respostas e integração com n8n/Telegram.

Project description

Pipeline Docker-first para scraping de reviews, geração de respostas e relatórios Telegram com API, dashboard, Redis/RQ, Selenium e n8n.

Wiki · Quickstart · API REST · Dashboard · Telegram · n8n · About

Por que este projeto existe

Este repositório organiza uma rotina operacional completa para reviews do Doctoralia. Em vez de tratar scraping como um script solto, ele une coleta, análise, geração de respostas, snapshots persistidos, histórico, observabilidade e distribuição por Telegram em uma mesma stack local.

O que você encontra aqui

Bloco O que faz
api Expõe endpoints sync e async, settings, health, metrics e notificações Telegram
worker Processa scraping, análise, geração e snapshots em background
dashboard Workspace visual para operação diária, histórico, relatórios e scheduler
redis Fila RQ, métricas Redis-backed, agendamentos, locks e histórico
selenium Navegador remoto para scraping resiliente
n8n Orquestrações externas, callbacks e automações multi-sistema

Tour visual

Overview do dashboard Agendamentos Telegram do dashboard
Workspace operacional
Perfis, pendências, saúde da stack, relatórios e histórico de snapshots.
Scheduler Telegram
Recorrência, scraping novo, geração, anexos, health e histórico persistido.

Como a stack funciona

Workflow principal do projeto

Início rápido

Docker

cp .env.example .env
cp config/config.example.json config/config.json

docker compose up -d --build
docker compose ps

URLs locais esperadas:

  • API: http://localhost:8000/docs
  • Dashboard: http://localhost:5000
  • Telegram scheduling: http://localhost:5000/notifications/telegram/schedule
  • n8n: http://localhost:5678 com Basic Auth configurada no .env
  • Selenium status: http://localhost:4444/status

Desenvolvimento local

make venv
cp .env.example .env
cp config/config.example.json config/config.json

make api
make dashboard

Comandos úteis:

make run-url URL="https://www.doctoralia.com.br/medico/exemplo"
make run-full URL="https://www.doctoralia.com.br/medico/exemplo"
make test
make lint

Endpoints que importam

Método Endpoint Uso
POST /v1/scrape:run Scraping síncrono
POST /v1/jobs Cria job assíncrono
GET /v1/jobs/{job_id} Consulta job
GET /v1/ready Readiness com Redis, Selenium e NLTK
GET /v1/metrics Métricas da API persistidas em Redis
GET/POST/PUT/DELETE /v1/notifications/telegram/schedules CRUD do scheduler Telegram
POST /v1/notifications/telegram/schedules/{schedule_id}/run Disparo manual
GET /v1/notifications/telegram/history Histórico persistido
POST /v1/notifications/telegram/test Validação real do bot
POST /v1/hooks/n8n/scrape Webhook dedicado do n8n

Estado atual do projeto

Tema Situação
Stack Docker api, worker, dashboard, redis, selenium, n8n
Workspace web Operacional e com scheduler Telegram integrado
Persistência Snapshots em data/ e histórico/schedules em Redis
Métricas da API Redis-backed, multi-processo
n8n local preso em 127.0.0.1:5678, com auth e encryption key obrigatórias
Testes 250 passed
Coverage 74%

Redis em localhost:6379

Se você abrir http://localhost:6379 no navegador e receber ERR_EMPTY_RESPONSE, isso é esperado.

  • Redis está rodando.
  • O browser fala HTTP.
  • Redis não fala HTTP.

Validação correta:

docker compose exec -T redis redis-cli ping

Saída esperada:

PONG

Wiki do repositório

O README agora é só a entrada. A documentação foi reorganizada em formato de wiki dentro de docs/.

Página Para que serve
docs/Home.md Hub principal da wiki
docs/about.md Texto de vitrine, metadata e assets do repositório
docs/quickstart.md Setup rápido
docs/overview.md Arquitetura e responsabilidades
docs/dashboard-workspace.md Operação diária no dashboard
docs/telegram-notifications.md Scheduler Telegram completo
docs/api.md Referência da API
docs/n8n.md Workflows e integração externa
docs/operations.md Runbook e troubleshooting
docs/development.md Padrões de desenvolvimento
docs/deployment.md Guia de deploy
docs/templates.md Templates e mensagens

Assets visuais adicionados

Convenções técnicas

  • Imports internos padronizados em formato absoluto: from src... e from config...
  • Dependências gerenciadas por poetry
  • Formatação com black e isort
  • Testes com pytest

Limitações atuais

  • Rate limiting global da API REST ainda não existe como middleware completo.
  • O scheduler recorrente depende da API estar de pé.
  • Ainda há espaço para subir coverage em src/scraper.py, src/response_generator.py, src/telegram_notifier.py e src/dashboard.py.

Licença

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

doctoralia_scrapper-1.2.0.tar.gz (92.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

doctoralia_scrapper-1.2.0-py3-none-any.whl (103.0 kB view details)

Uploaded Python 3

File details

Details for the file doctoralia_scrapper-1.2.0.tar.gz.

File metadata

  • Download URL: doctoralia_scrapper-1.2.0.tar.gz
  • Upload date:
  • Size: 92.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.15 Linux/6.17.0-1008-azure

File hashes

Hashes for doctoralia_scrapper-1.2.0.tar.gz
Algorithm Hash digest
SHA256 de0248f451640a0dcbdc0af791da063aee169588ad328fbfb0e7f436a3dfc8e8
MD5 8b275a685d468468f90baad2a3ac119d
BLAKE2b-256 a1e4715d34ccaf33d2f1fcbd282ff31d52801b3eb4dddc69d36d252f9b0d61bb

See more details on using hashes here.

File details

Details for the file doctoralia_scrapper-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: doctoralia_scrapper-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 103.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.15 Linux/6.17.0-1008-azure

File hashes

Hashes for doctoralia_scrapper-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8aad10819ece587edce94445c49447380eece741e4482ee6e9e2a6df8e991603
MD5 3ea711b54892fa3b371f1504c6fbf4fa
BLAKE2b-256 f9da81ab7b89e1744336a0610ea0f566c942ef4317528ca601283b368665343a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page