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.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 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).