尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Mapa de los departamentos en arriendo de Santiago, con la etiqueta del modelo (oportunidad, precio de mercado o sobre el rango de mercado). Es HTML y JavaScript sin build ni framework: el mapa ocupa toda la pantalla y los filtros están en una barra a la izquierda que se puede ocultar. Versión para Santiago del buscador que se hizo para el Gran Concepción.
Repo hermano de santiago-rentals-elt (datos) y santiago-rentals-ml (modelo). Este repo solo lee: nunca escribe en la base.
Hecho con Fluyo. Es un .svg (la vista estática que se ve aquí) y un .fluyo.json en docs/diagramas/; ese
archivo se abre con el botón Abrir de fluyo.space para reproducir sus Historias (el orden en el tiempo, animado). El script
que lo genera está en docs/diagramas/herramientas/ (ver su LEEME.md).
Cómo llega un aviso al mapa, en dos recorridos:
scripts/exportar.py lee tres tablas de la base: la predicción vigente de cada aviso
(gold.predicciones_vigentes) y sus datos y enlace a la publicación (gold.aviso_entrenamiento, que trae la url). Solo
deja los avisos activos y aptos, con costo total de hasta 10 millones, y escribe data/avisos.json. GitHub Actions lo hace
cada 30 minutos y publica el sitio. El navegador carga ese archivo, filtra y dibuja el mapa. Cada visita y cada
clic en un enlace se cuentan en GoatCounter, sin cookies ni datos personales.gold.modelo_vigente las cifras del @champion cada vez que hay
una versión nueva; el mismo scripts/exportar.py las escribe en data/modelo.json, que alimenta la pestaña "Cómo funciona".
No hace falta correr nada a mano.Historias: Publicación del mapa con avisos nuevos, Un visitante abre el mapa y Las cifras del modelo llegan a la pestaña.
data/modelo.json, no están escritas a mano en la página.noindex) y avisa que no tiene afiliación con Portal
Inmobiliario. Quien publique un aviso puede pedir que se retire, por GitHub o LinkedIn (ver la pestaña "Cómo funciona").scripts/exportar.py lee tres tablas de Gold y escribe data/avisos.json (los campos que usa el mapa) y data/modelo.json
(las cifras del modelo vigente, de gold.modelo_vigente). Solo exporta avisos con apto_entrenamiento (los mismos que usa el
entrenamiento) y, por si acaso, con costo total de hasta 10 millones (el tope del entrenamiento).app.js dibuja el mapa con MapLibre GL JS sobre el fondo claro de
OpenFreeMap (datos de OpenStreetMap; gratis, sin clave, la atribución viene en el estilo),
filtra en el navegador y arma la tarjeta.data/avisos.json y data/modelo.json no están en git: se generan en cada publicación.scripts/vigilar.py es el vigilante (ver "Alertas"). tests/ tiene las pruebas.python -m pytest -q (16 pruebas) revisa sin base de datos ni navegador: el exportador (campos, coordenadas, que la consulta solo
traiga avisos activos y aptos con enlace https:// y nunca la descripción ni datos de contacto), los contratos entre app.js,
index.html y el scoring (valores de etiqueta, ids del DOM, cifras de la pestaña "Cómo funciona") y las reglas
del vigilante. El workflow ci corre además node --check app.js y ruff en cada push.
Seguridad de la página. MapLibre se carga con integrity (si unpkg sirviera otro archivo para esa versión, el navegador no lo
ejecuta) y la página declara una política de contenido (CSP) que solo deja cargar este sitio, MapLibre, OpenFreeMap y
GoatCounter. Los títulos se publican sin teléfonos ni correos (sin_contacto en el exportador). Las Actions están fijadas por
commit y Dependabot las mantiene al día; los workflows tienen permisos mínimos.
El workflow vigilante corre cada hora en GitHub (aunque el notebook del ELT esté apagado) y deja la ejecución en rojo, con
correo de GitHub, si Gold lleva más de 3 horas sin reconstruirse (orquestador caído o notebook apagado), si más del 5 % de las
predicciones quedó atrasado respecto de las visitas (scoring caído) o si más del 5 % de Gold quedó sin precio aunque se visitó su
detalle (el portal sirviendo páginas incompletas; esta revisión es cada 6 horas). Para no mandar un correo por hora, solo avisa al cruzar 3, 12
y 24 horas de atraso y luego cada día. Para recibirlos hay que tener activadas las notificaciones de Actions en
Settings > Notifications del perfil de GitHub. Usa el mismo secret BD_STRING_VIS.
pip install -r requirements.txt
# BD_STRING_VIS en .env (o en el entorno): cadena de conexión con lectura sobre esas tablas
python scripts/exportar.py
python -m http.server 8765 # abrir http://localhost:8765
.github/workflows/publicar.yml regenera los JSON y publica el sitio cada 30 minutos (10 minutos después de cada scoring) y a
mano. Entre Silver y Gold (cada hora en el ELT), el scoring (cada 30 minutos) y esta publicación, un aviso nuevo tarda
unas 2 horas como máximo en llegar al mapa. Requisitos, una sola vez:
BD_STRING_VIS con un rol de solo lectura (vis_lectura) sobre gold.predicciones_vigentes,
gold.aviso_entrenamiento y gold.modelo_vigente. El último permiso lo da solo la reconstrucción de Gold.El sitio publicado es público, igual que este repo: cualquiera ve los avisos exportados (ubicación aproximada, precio, etiqueta y enlace). El repo del ELT, que hace el scraping, es privado.
La página cuenta visitas con GoatCounter (sin cookies ni datos personales; el panel está en
https://santiago-rentals.goatcounter.com). Además de las visitas, registra tres eventos: pestana-mapa, pestana-explicacion
y clic-publicacion-original. En local (localhost) no cuenta. La pestaña "Cómo funciona" lo avisa al pie.
MIT.