# ----------------------------------------------------------------------------- # Lou-Ka — Agrégateur de logements à louer (province de Québec) # Auteur : Simon-Pierre Boucher — contact@spboucher.ai # connectors/quartier_7.py : connecteur Quartier 7 (quartier7mascouche.com — # Constructions Lacourse, 9 phases de condos locatifs au 1451 avenue de la # Gare à Mascouche, ~650 unités). La page « condos neufs à louer » affiche # ses unités via le widget Planpoint : on interroge l'API JSON publique # (app.planpoint.io/api/groups/find, 1 requête/sync, voir _planpoint.py). # Granularité UNITÉ : pi², chambres, salle(s) de bain, plans et inclusions # par unité, date de livraison, adresse + lat/lng par phase ; la source ne # publie AUCUN prix (price null chez Planpoint, « sans prix publics » — # rien d'inventé). Seules les unités « Available » sont retenues. # ----------------------------------------------------------------------------- from __future__ import annotations from ..schema import Listing from ._planpoint import planpoint_projects, unit_listing from .base import BaseConnector PAGE_URL = "https://quartier7mascouche.com/condos-neufs-a-louer-mascouche/" NAMESPACE = "quartier7" HOST_NAME = "general" class Quartier7Connector(BaseConnector): source_id = "quartier_7" request_delay = 0.8 def fetch(self) -> list[Listing]: try: projects = planpoint_projects(self, "groups", NAMESPACE, HOST_NAME) except Exception: return [] listings: list[Listing] = [] for project in projects: # « Quartier 7 - Phase 6 » -> le nom de phase distingue les unités # aux numéros identiques (toutes les phases ont la même adresse) for floor in project.get("floors") or []: for unit in floor.get("units") or []: lst = unit_listing(self.source_id, project, floor, unit, page_url=PAGE_URL, default_city="Mascouche") if lst is not None: listings.append(lst) return listings