Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 98.9%
Python 0.6%
1# -----------------------------------------------------------------------------2# Lou-Ka — Agrégateur de logements à louer (province de Québec)3# Auteur : Simon-Pierre Boucher — contact@spboucher.ai4# connectors/m3_laval.py : connecteur M3 Condos locatifs (m3mirabel.com —5# Cité Mirabel, boul. de Versailles ; 2 groupes d'immeubles : Bâtiments 1 à 36# et 4 à 7, ~325 unités). NB : slug historique « m3_laval » de la campagne7# Laval/Rive-Nord, mais le projet est bien à MIRABEL (Laurentides).8# La page /plans/ affiche ses unités via le widget Planpoint : on interroge9# l'API JSON publique (app.planpoint.io/api/projects/find, 2 requêtes/sync,10# voir _planpoint.py). Granularité UNITÉ : type (« 4 1/2 »), pi², chambres,11# plans par unité, adresse + lat/lng par immeuble ; la source ne publie12# AUCUN prix (price null/0 chez Planpoint, pas de prix sur le site non13# plus) — rien d'inventé. Seules les unités « Available » sont retenues.14# -----------------------------------------------------------------------------15from __future__ import annotations1617from ..schema import Listing18from ._planpoint import planpoint_projects, unit_listing19from .base import BaseConnector2021PAGE_URL = "https://www.m3mirabel.com/plans/"22NAMESPACE = "M3MIRABEL"23HOST_NAMES = ("Batiment1a3", "Batiments4a7")242526class M3LavalConnector(BaseConnector):27 source_id = "m3_laval"28 request_delay = 0.82930 def fetch(self) -> list[Listing]:31 listings: list[Listing] = []32 for host in HOST_NAMES:33 try:34 projects = planpoint_projects(self, "projects", NAMESPACE, host)35 except Exception:36 continue37 for project in projects:38 for floor in project.get("floors") or []:39 for unit in floor.get("units") or []:40 lst = unit_listing(self.source_id, project, floor, unit,41 page_url=PAGE_URL,42 default_city="Mirabel")43 if lst is not None:44 listings.append(lst)45 return listings46