Fuentes de datos y enlaces
Este documento describe las fuentes de datos del proyecto (base de datos, portales inmobiliarios, servicios externos) y los enlaces que usa el código, alineado con la automatización (cron) y la UI de sincronización.
Dónde se ejecuta cada fuente
| Ámbito | Descripción |
|--------|-------------|
| Cron (POST /api/cron/sync?action=discover) | Habitaclia (venta y alquiler, varios tipos de inmueble por listado), Vidasolucio, Finques SIP, Finques Serra, Llach Serra, Finques Vilafranca, Don Piso, FotoCasa, Idealista (venta y alquiler). Ver src/app/api/cron/sync/route.ts. |
| Sync manual “ALL” | Misma lista que el cron (mismos scrapers), salvo que no incluye Rovira Jubert. Casas Raluy está comentado en el flujo ALL y desmarcado por defecto en la configuración. Ver src/components/sync-all-button.tsx. |
| Solo acción individual en UI | Rovira Jubert (menú por fuente). Casas Raluy y Fusiona Penedès pueden invocarse desde acciones concretas / código, pero no forman parte del descubrimiento ALL ni del cron. |
Base de datos
- SQLite mediante Prisma. La URL de conexión se define con la variable de entorno
DATABASE_URL(verprisma/schema.prisma). No es una URL pública de consumo HTTP.
Portales y agencias (listados usados por los scrapers)
Ámbito geográfico habitual: Vilafranca del Penedès. Entre paréntesis, archivo principal del scraper.
Habitaclia (src/lib/scrapers/habitaclia.ts, catálogo habitaclia-feeds.ts)
Portal generalista. Por cada listado configurado se pagina con ...htm / ...-1.htm / ...-2.htm / … y, salvo excepción, ?ordenar=mas_recientes. Una pasada SALE recorre todos los listados de compra/traspaso/obra nueva; una pasada RENT recorre todos los de alquiler.
Viviendas y obra nueva (venta / alquiler)
Oficinas
Locales comerciales
Industriales
Terrenos y solares
Aparcamientos
Inversiones
Inmuebles singulares
Negocios
Nota: El tipo SALE / RENT en base de datos combina el listado de origen y la URL de ficha (resolveHabitacliaPropertyTransaction en habitaclia-feeds.ts).
Idealista (src/lib/scrapers/idealista.ts)
- Venta (ES): Listado venta
- Alquiler (ES): Listado alquiler
- Venta (EN, usado en rutas alternativas): Listado venta EN
- Alquiler (EN): Listado alquiler EN
Nota: El scraper también usa Google Translate, Google Search y DuckDuckGo como apoyo (ver sección Servicios externos.)
FotoCasa (src/lib/scrapers/fotocasa.ts)
- Venta: Listado comprar
- Alquiler: Listado alquiler
Finques Serra (src/lib/scrapers/serra.ts)
El código recorre tres URLs (venta página 1, venta página 2, alquiler):
- Venta página 1: Buscador comprar (pág. 1)
- Venta página 2: Buscador comprar (pág. 2)
- Alquiler: Buscador alquiler
Vidasolucio (src/lib/scrapers/vidasolucio.ts)
- Buscador (iframe): Página principal
Nota: Tras la extracción se puede filtrar internamente por tipo de operación.
Finques SIP (src/lib/scrapers/finquessip.ts)
- Listado filtrado: Productos filtrados
Llach Serra (src/lib/scrapers/llachserra.ts)
Finques Vilafranca (src/lib/scrapers/finquesvilafranca.ts)
Antes de los listados, el flujo visita la home para sesión/cookies:
Rovira Jubert (src/lib/scrapers/rovirajubert.ts)
Disponible en sincronización por fuente en la UI; no entra en el cron ni en el descubrimiento “ALL”.
- Listado: Resultados Vilafranca
Don Piso (src/lib/scrapers/donpiso.ts)
- Venta: Listado venta
- Alquiler: Listado alquiler
Casas Raluy (desactivada en flujos automáticos habituales)
Código en src/lib/scrapers/casasraluy.ts. Listado base y paginación page/{n}/:
- Página 1: Buscador
- Páginas siguientes:
https://casasraluy.com/search-result-page/page/{n}/?keyword=&location%5B%5D=vilafranca-del-penedes
Nota: Desactivada a petición previa en el producto; la acción syncCasasRaluyProperties sigue existiendo para uso manual. En “Sync ALL” el bloque está comentado.
Fusiona Penedès (no en cron ni “ALL”)
Código en src/lib/scrapers/fusionapenedes.ts. Existe syncFusionaPenedesProperties en src/actions/sync-actions.ts para invocación aparte.
- Listado (página 1): Resultados
- Páginas siguientes: misma base con
pagina={n}&delante del resto de parámetros (según el scraper).
Nota: Históricamente desactivada en sincronización masiva por problemas de parseo; el scraper permanece en el repositorio.
Scrapers no integrados en sync-actions (experimental / pruebas)
Solvia (src/lib/scrapers/solvia.ts)
No está cableado al flujo principal de sincronización. Se usa desde scripts de prueba (p. ej. scripts/test-all-scrapers.ts).
- Patrón de listado:
https://www.solvia.es/es/comprar/viviendas/{provincia}/{ciudad}?orden=fichaFechaPubComponente&ordenAsc=false
Ejemplo usado en tests: provinciabarcelona, ciudadvilafranca-del-penedes→
Ejemplo listado
Servicios externos (enlaces y archivos)
| Servicio | URL o patrón en código | Archivo(s) |
|----------|------------------------|------------|
| Google Translate (proxy de sitio) | https://translate.google.com/website?sl=...&tl=...&u=... | src/lib/scrapers/idealista.ts, src/lib/scrapers/utils/google-translate-proxy.ts |
| Google Search (respaldo Idealista) | https://www.google.com/search?q=... | src/lib/scrapers/idealista.ts |
| DuckDuckGo (respaldo Idealista) | https://duckduckgo.com/?q=... | src/lib/scrapers/idealista.ts |
| ProxyScrape (listas públicas) | https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&... y variante socks5 | src/lib/utils/proxy-manager.ts |
| OpenRouter API | https://openrouter.ai/api/v1/chat/completions | src/lib/ai/openrouter.ts |
| Fyra API | https://fyra.im/v1/chat/completions | src/lib/ai/fyra.ts |
| Ollama (local) | http://localhost:11434/api/chat | src/lib/ai/ollama.ts |
| Ollama generate (imágenes) | http://localhost:11434/api/generate | src/lib/utils/images/image-comparison.ts |
| Groq | URL del SDK oficial (no hardcodeada en el repo); requiere GROQ_API_KEY | src/lib/ai/groq.ts |
| Google Gemini | Cliente @google/generative-ai; requiere GEMINI_API_KEY | src/lib/ai/gemini.ts |
| Telegram Bot API | https://api.telegram.org/bot{TOKEN}/sendMessage | src/lib/telegram.ts |
| OpenStreetMap (teselas) | https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png | src/components/map/PropertyMap.tsx |
| unpkg (assets Leaflet) | https://unpkg.com/leaflet@1.7.1/dist/... | src/components/map/PropertyMap.tsx |
| Referer al descargar imágenes | https://www.fotocasa.es/, https://www.habitaclia.com/, https://www.idealista.com/ | src/lib/utils/images/image-downloader.ts |
Variables de entorno relacionadas
| Variable | Uso resumido |
|----------|----------------|
| DATABASE_URL | Conexión Prisma / SQLite |
| FYRA_API_KEY | API Fyra |
| OPENROUTER_API_KEY | OpenRouter |
| GROQ_API_KEY | Groq |
| GEMINI_API_KEY | Google Gemini |
| USE_OLLAMA | Activar Ollama local (true) |
| TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID | Notificaciones Telegram |
| NEXT_PUBLIC_APP_URL, APP_URL | URL pública de la app (enlaces en mensajes, cabeceras OpenRouter, etc.) |
| CRON_SECRET | Autenticación del endpoint de cron |
| PROXY_LIST | Lista manual de proxies (sustituye fuentes públicas si está definida) |
| USE_PUBLIC_PROXIES | Si es false, se desactivan proxies públicos |
| PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH | Ruta opcional al Chromium para Playwright |
| NODE_ENV | Entorno Node (p. ej. desarrollo vs producción) |
No almacenar secretos en este documento ni en el repositorio en texto plano.
Pendientes de implementación
Webs identificadas para posible integración futura:
Fincas AMP
- Listado: Propiedades
Finques Mata
- Web principal: Ir a la web
- Nota: Requiere filtrar manualmente por Vilafranca del Penedès.
Finques Socal Penedès
- Listado: Propiedades
Finques Piñol
- Listado: Propiedades