feat(shell): auto-commit con 31 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# market-intel
|
||||
|
||||
Inteligencia de mercado para captación de clientes: scrapers de señales de demanda y
|
||||
tendencias de productos/nichos desde varias fuentes públicas, más vigilancia de precios de
|
||||
la competencia, aterrizados en Postgres y analizados con Metabase. Scheduling con
|
||||
`dag_engine`. Origen: proyecto `captacion_clientes`.
|
||||
|
||||
## Funciones
|
||||
|
||||
| ID | Firma corta | Qué hace |
|
||||
|---|---|---|
|
||||
| `scrape_amazon_bestsellers_py_datascience` | `(marketplace, categories, list_type, max_items)` | Amazon Best Sellers + Movers & Shakers (ranking real de demanda). HTTP, funciona. |
|
||||
| `scrape_google_trends_py_datascience` | `(keywords, geo, timeframe, include_related)` | Interés de búsqueda (0-100) + rising/top via pytrends. Backoff ante 429. |
|
||||
| `scrape_tiktok_creative_py_datascience` | `(country, kind, limit, period)` | TikTok Creative Center (hashtags/songs/creators). **Bloqueado por anti-bot vía HTTP**; pendiente browser CDP. |
|
||||
| `scrape_aliexpress_trending_py_datascience` | `(query, category, limit, ship_to)` | Productos populares AliExpress (orders/rating). **Bloqueado por captcha vía HTTP**; pendiente browser CDP. |
|
||||
| `scrape_competitor_prices_py_datascience` | `(targets) -> list[dict]` | Precio actual de una lista de URLs de competidores (cascada: selector → JSON-LD → meta → heurística). |
|
||||
| `pg_insert_rows_py_infra` | `(dsn, table, rows, add_snapshot_date=True)` | Insert append-only por lote en Postgres (execute_values parametrizado, añade snapshot_date). |
|
||||
| `pg_apply_sql_py_infra` | `(dsn, sql_path) -> int` | Aplica un `.sql` de migración a Postgres (idempotente con IF NOT EXISTS). |
|
||||
| `ingest_market_trends_py_pipelines` | `(source)` | Dispatcher: scrapea una fuente y la aterriza en su tabla. Lo invoca `dag_engine`. |
|
||||
|
||||
## Ejemplo canónico (end-to-end)
|
||||
|
||||
```bash
|
||||
# 1. (una vez) Stack Metabase + Postgres en Docker
|
||||
fn run init_metabase_go_infra --project captacion --metabase-port 3030 --pg-port 5433 \
|
||||
--pg-user captacion --pg-password "$(pass show captacion/postgres | head -1)"
|
||||
docker exec captacion-postgres psql -U captacion -d metabase -c "CREATE DATABASE trends OWNER captacion"
|
||||
|
||||
# 2. (una vez) Aplicar el schema
|
||||
python3 -c "import sys; sys.path.insert(0,'python/functions'); from infra import pg_apply_sql; \
|
||||
pg_apply_sql('postgresql://captacion:PW@localhost:5433/trends', 'projects/captacion_clientes/db/migrations/001_schema.sql')"
|
||||
|
||||
# 3. Ingesta una fuente (manual o vía dag_engine)
|
||||
fn run ingest_market_trends_py_pipelines amazon
|
||||
fn run ingest_market_trends_py_pipelines google_trends
|
||||
|
||||
# 4. dag_engine lo hace solo: dags market-intel-daily (06:30) y competitor-prices-hourly
|
||||
```
|
||||
|
||||
## Fronteras
|
||||
|
||||
- NO hace explotación ni bypass agresivo de anti-bot: TikTok/AliExpress por HTTP-directo
|
||||
caen desde datacenter; la vía robusta es el browser MCP/CDP (grupo `navegator`/`web-proxy`,
|
||||
doctrina `flow_replay.md`), aún no implementada para estas dos fuentes.
|
||||
- NO es un grupo de visualización: el análisis vive en Metabase (grupo `metabase`).
|
||||
- NO gestiona el scheduling: eso es `dag_engine` (grupo `scheduler`).
|
||||
- El DSN de Postgres y credenciales NO se hardcodean: van en `pass`/`.env` del proyecto.
|
||||
|
||||
## Notas
|
||||
|
||||
- Las tablas de `trends` son append-only particionadas por `snapshot_date` — pensadas para
|
||||
series temporales en Metabase (qué tendencia sube/baja). No correr en bucle apretado.
|
||||
- `competitor_prices` se nutre de la tabla `competitor_targets` (el usuario inserta los
|
||||
objetivos a vigilar: competidor + product_key + URL).
|
||||
Reference in New Issue
Block a user