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/marquise_8.py : connecteur Marquise 8 (marquise8.com — Devmet/5# Marquise Condominiums). Tour de 137 condos locatifs tout inclus au6# 3641, avenue Jean-Béraud à Laval (Chomedey, centre-ville). Le site7# Webflow affiche ses unités via le widget Planpoint : on interroge l'API8# JSON publique (app.planpoint.io/api/projects/find, 1 requête/sync,9# voir _planpoint.py). Granularité UNITÉ (numéro de porte, pi², plan,10# étage) mais AUCUN prix publié (« unitPriceTBD ») ni typologie ; seules11# les unités « Available » sont retenues. deliveryDate au format12# JJ-MM-AAAA (contrairement aux autres comptes Planpoint) — converti ici.13# -----------------------------------------------------------------------------14from __future__ import annotations1516import re1718from ..schema import Listing19from ._planpoint import planpoint_projects, unit_listing20from .base import BaseConnector2122PAGE_URL = "https://marquise8.com/#unite"23NAMESPACE = "marquise-8"24HOST_NAME = "marquise-8"2526DEFAULT_CITY = "Laval"27SECTOR = "Chomedey"2829EXTRA_AMENITIES = ["Formule tout inclus"]3031# « 01-07-2026 » (JJ-MM-AAAA, spécifique à ce compte) -> ISO « 2026-07-01 »32_DMY_RE = re.compile(r"^(\d{2})-(\d{2})-(\d{4})$")333435class Marquise8Connector(BaseConnector):36 source_id = "marquise_8"37 request_delay = 0.83839 def fetch(self) -> list[Listing]:40 try:41 projects = planpoint_projects(self, "projects", NAMESPACE, HOST_NAME)42 except Exception:43 return []44 listings: list[Listing] = []45 for project in projects:46 for floor in project.get("floors") or []:47 for unit in floor.get("units") or []:48 lst = unit_listing(self.source_id, project, floor, unit,49 page_url=PAGE_URL,50 default_city=DEFAULT_CITY,51 extra_amenities=EXTRA_AMENITIES)52 if lst is None:53 continue54 lst.sector = SECTOR55 # date de livraison JJ-MM-AAAA -> ISO56 m = _DMY_RE.match(lst.availability_date or "")57 if m:58 iso = f"{m.group(3)}-{m.group(2)}-{m.group(1)}"59 lst.availability_date = iso60 lst.availability = f"Disponible le {iso}"61 listings.append(lst)62 return listings63