# ----------------------------------------------------------------------------- # Lou-Ka — Agrégateur de logements à louer (province de Québec) # Auteur : Simon-Pierre Boucher — contact@spboucher.ai # connectors/gestimmo_estrie.py : connecteur Gestimmo Estrie (gestimmoestrie.com) # Gestionnaire multi-immeubles de Sherbrooke et de l'Estrie. Même plateforme # WordPress + thème Houzez que Gestion Dynamic : tout le parsing (cartes, # pagination /a-louer/page/N/, fiches détail, cache BD) est hérité de # DynamicConnector. Particularités du site : # - la disponibilité est l'étiquette de statut de la carte # (lien /status/ : « Libre maintenant », « Juillet », « Loué »…) ; # - les fiches n'ont pas d'aperçu Houzez : le type d'unité vient du titre # (« 4 1/2 Rue de la Sainte-Famille ») ou de la ligne « Grandeur : 4 1/2 » # de la description. # Les logements « Loué » sont exclus (filtre hérité). # ----------------------------------------------------------------------------- from __future__ import annotations import re from .dynamic import DynamicConnector # « Grandeur : 4 1/2 » / « Grandeur: Studio » dans la description des fiches _SIZE_IN_DESC = re.compile(r"grandeur\s*:?\s*(\d\s*1/2|\d\s*½|studio|loft)", re.I) class GestimmoEstrieConnector(DynamicConnector): source_id = "gestimmo_estrie" BASE = "https://gestimmoestrie.com" LIST_PATH = "/a-louer/" CITY_DEFAULT = "Sherbrooke" # -- crochets par site -------------------------------------------------------- def _card_availability(self, card, title: str) -> str: """Gestimmo : étiquette de statut de la carte (« Libre maintenant », « Juillet », « Loué »…).""" status_el = card.select_one("a[href*='/status/']") return status_el.get_text(" ", strip=True) if status_el else "" def _fetch_detail(self, url: str) -> dict: """Fiche Houzez sans bloc aperçu : repli type d'unité sur la ligne « Grandeur : … » de la description.""" out = super()._fetch_detail(url) if not out.get("type_raw") and out.get("description"): m = _SIZE_IN_DESC.search(out["description"]) if m: out["type_raw"] = m.group(1) return out