Dealio
When a game on your Steam wishlist drops to the price you want, Dealio messages you on Discord. Completely free, and it never asks for your Steam password.
Compare supermarket prices in Campinas to find cheaper purchases
Translation pending
AI summary · website content
CommercePython · HTMLGitHub @danzeneOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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).