SPB Git forge

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

232commits 1branches 0releases
172.9 MBsize
maindefault branch
2 days agolast push
HTML 98.9% Python 0.6%
2.1 KB · 46 lines python
Raw Blame History
1# -----------------------------------------------------------------------------2# Lou-Ka — Agrégateur de logements à louer (province de Québec)3# Auteur : Simon-Pierre Boucher — contact@spboucher.ai4# connectors/quartier_7.py : connecteur Quartier 7 (quartier7mascouche.com —5#   Constructions Lacourse, 9 phases de condos locatifs au 1451 avenue de la6#   Gare à Mascouche, ~650 unités). La page « condos neufs à louer » affiche7#   ses unités via le widget Planpoint : on interroge l'API JSON publique8#   (app.planpoint.io/api/groups/find, 1 requête/sync, voir _planpoint.py).9#   Granularité UNITÉ : pi², chambres, salle(s) de bain, plans et inclusions10#   par unité, date de livraison, adresse + lat/lng par phase ; la source ne11#   publie AUCUN prix (price null chez Planpoint, « sans prix publics » —12#   rien d'inventé). Seules les unités « Available » sont retenues.13# -----------------------------------------------------------------------------14from __future__ import annotations1516from ..schema import Listing17from ._planpoint import planpoint_projects, unit_listing18from .base import BaseConnector1920PAGE_URL = "https://quartier7mascouche.com/condos-neufs-a-louer-mascouche/"21NAMESPACE = "quartier7"22HOST_NAME = "general"232425class Quartier7Connector(BaseConnector):26    source_id = "quartier_7"27    request_delay = 0.82829    def fetch(self) -> list[Listing]:30        try:31            projects = planpoint_projects(self, "groups", NAMESPACE, HOST_NAME)32        except Exception:33            return []34        listings: list[Listing] = []35        for project in projects:36            # « Quartier 7 - Phase 6 » -> le nom de phase distingue les unités37            # aux numéros identiques (toutes les phases ont la même adresse)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="Mascouche")43                    if lst is not None:44                        listings.append(lst)45        return listings46