e1e9bb7499
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
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)
# 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, doctrinaflow_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(gruposcheduler). - El DSN de Postgres y credenciales NO se hardcodean: van en
pass/.envdel proyecto.
Notas
- Las tablas de
trendsson append-only particionadas porsnapshot_date— pensadas para series temporales en Metabase (qué tendencia sube/baja). No correr en bucle apretado. competitor_pricesse nutre de la tablacompetitor_targets(el usuario inserta los objetivos a vigilar: competidor + product_key + URL).