아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Coleta preços online de produtos industrializados (com EAN) de supermercados da Região Metropolitana de Campinas, guarda em SQLite com histórico, e (nas próximas fases) permite buscar um produto e ver o ranking do mais barato ao mais caro.
database.py (com categorias, identidade de mercado e migração idempotente).coletores/vtex.py) e VIP Commerce
(coletores/vipcommerce.py), cada um reaproveitável entre mercados da mesma plataforma.config/categorias.json): Mercearia, Bebidas, Limpeza, Higiene, Laticínios
(Hortifrúti entra como "em breve"). Cada produto é etiquetado pela categoria do termo que o achou.cor_badge (monograma) + loja_ref gravados.analise/normalizar.py): extrai gramatura do nome e calcula
R$/kg, R$/L, R$/un (~97% de cobertura; casos ambíguos ficam sem valor de propósito).analise/ranking.py): busca por nome (acento/ordem-insensível) ou EAN
e ordena do mais barato ao mais caro entre mercados.api/main.py): /categorias, /categoria/{slug}, /buscar?q=,
/produto/{ean}, /historico/{ean}, cesta (/cesta) e lista/alertas
(/lista GET/POST com quantidade, /lista/{ean} DELETE, /alertas). Cada linha de
preço vem com identidade do mercado, link do produto no site, sparkline e tendência.lista.comprado).coleta_diaria.bat) + notificação toast (notificar_alertas.py).front/index.html): página única acessível (AA, mobile-first) — busca +
chips de categoria (com "em breve"), cards expansíveis, ranking por mercado com
monograma colorido, sparkline de histórico (rótulo textual + aria-label),
selo "menor preço", e rótulo "preço de loja online · atualizado em {data}".coletar.py popula tudo; amostra.py e analise/renormalizar.py como utilitários.| Mercado | Plataforma | Status |
|---|---|---|
| Savegnago | VTEX | ✅ ativo |
| Covabra | VTEX | ✅ ativo |
| Atacadão | VTEX | ✅ ativo (atacarejo; loja campinas-dom-pedro, preço online uniforme) |
| Enxuto | VIP Commerce | ✅ ativo (org 153; token gerado automaticamente) |
| Super Dalben | VIP Commerce | ✅ ativo (org 29; token gerado automaticamente) |
| Tenda Atacado | API própria | ✅ ativo (token X-Authorization gerado automaticamente) |
| Super Pague Menos | Convertiez | ✅ ativo (fallback HTML: EAN só na página do produto) |
| Carrefour | VTEX | ⛔ adiado — Cloudflare bloqueia todo /api/ (503) até no navegador real |
paguemenos.com.bré a farmácia (Fortaleza); o supermercado de Campinas ésuperpaguemenos.com.br. Enxuto usaenxuto.com(não.com.br).
"VTEX-first": onde o mercado é VTEX, consumimos o JSON de catálogo (
/api/catalog_system/pub/products/search/) em vez de parsear HTML.
iniciar.batEle prepara o ambiente na primeira vez, sobe o servidor e abre o navegador em http://localhost:8080. Para parar, feche a janela preta. Pronto.
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
copy .env.example .env # ajuste se quiser
python coletar.py # todos os mercados ativos
python coletar.py savegnago # só um mercado
python amostra.py # query de amostra (contagens, preços, histórico)
python -m analise.ranking "café brasileiro" # ranking por nome (CLI)
python -m analise.ranking 7891000100103 # ranking por EAN (CLI)
python -m analise.renormalizar # recalcula R$/un sem re-scraping
python -m uvicorn api.main:app --port 8000 # sobe API + front em http://localhost:8000
python notificar_alertas.py # checa a lista e notifica alertas (toast)
agendar_coleta.bat # registra a coleta diária no Windows (roda 1x)
config/mercados.json # mercados: slug, url_base, plataforma, ativo, classe do coletor
config/sementes.json # ~40 termos de busca (industrializados comuns)
coletores/base.py # interface Coletor + ItemColeta + checagem de robots.txt
coletores/vtex.py # coletor VTEX genérico (paginação, pacing, validação de EAN)
coletores/savegnago.py # config específica do Savegnago (delega ao genérico)
db/schema.sql # DDL; precos é APPEND-ONLY (histórico)
db/database.py # conexão + upsert de produtos/mercados + insert de preços
coletar.py # entrypoint: orquestra, isola falhas por mercado
amostra.py # query de amostra
precos; nada é
sobrescrito. Rodar 2x gera 2 snapshots por produto.precos.origem = 'online'.robots.txt, delay ≥ 1s por domínio (configurável),
User-Agent identificável (header From/X-Bot-Contato), sem paralelismo no mesmo domínio.Fazer scraping pode conflitar com os Termos de Uso de cada site. O uso desta
ferramenta é de responsabilidade do operador. Mantenha volume baixo e uso pessoal,
respeite robots.txt e o pacing. Isto não é aconselhamento jurídico.
sc/CEP).