SPB Git

spb/lou-ka Public

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

HTML 99.7%
3.8 KB

# sgiq — Société de Gestion Immobilière du Québec (SGIQ / Amiral)

  • site: https://gestionimmobilierequebec.com/immeubles (+ fiches /fiche/ et endpoint AJAX /mod/act_p/ImmeubleAct.php)
  • méthode: html + json-api (endpoint carte getMarkers)
  • annonces: 147 → 147
  • couverture après (sur 147 annonces): prix 100%, adresse 100%, dispo 99%, superficie 0%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • Liste paginée (7 pages) : titre/adresse, localité, catégorie, prix, image vignette.
  • Endpoint JSON POST ImmeubleAct.php a=getMarkers&form=dispo= : lat/lng structurés (129/147, les autres fiches n'ont pas de marqueur exploitable) + type d'unité structuré (« 3-1-2 » → 3½) pour toutes les fiches.
  • Fiches détail : description complète (bloc gauche seulement, sans mélanger les items techniques), commodités (« Chauffé : Oui », « Éclairé : Non », « 1 chambre », « 1 salle de bain », « 1 stationnement », « Chiens permis »), images (jusqu'à 30), pets structuré depuis l'icône animal dédiée (oui : 131, non : 16), secteur (« QUARTIER SAINTE-FOY »), disponibilité (« DISPONIBLE PRÉSENTEMENT », « PRÉSENTEMENT DISPONIBLE », « DISPONIBLE EN JUILLET », « Prise de possession flexible »).
  • Téléphone dans la description → contact dérivé par finalize().

# Champs indisponibles à la source

  • Superficie (pi²) : jamais publiée (ni liste, ni fiche, ni JSON).
  • Meublé : non exposé.
  • Adresse postale complète avec code postal : seulement dans certains titres.

# Fragilités

  • La disponibilité vit uniquement dans le texte libre de la description (MAJUSCULES, tirets variables) — regex tolérante mais un nouveau phrasé peut échapper.
  • Le cache détail est calé sur titre+prix+catégorie de la carte liste : si SGIQ modifie seulement la description (ex. nouvelle date de dispo) sans toucher le prix, la fiche ne sera pas re-téléchargée avant le prochain changement de prix.
  • Endpoint AJAX non documenté (ImmeubleAct.php) : peut changer sans préavis ; le connecteur le traite en best-effort (try/except, aucun champ obligatoire n'en dépend).

# Améliorations apportées

  • Cache BD des fiches via self.detail() (clé = hash titre|prix|catégorie) + plafond max_fetch_per_sync=160 de vraies requêtes (exception _FetchBudget pour ne jamais mettre en cache un payload vide) : sync passe de ~83 s (147 GET) à ~4 s quand rien n'a changé.
  • lat/lng (0 % → 88 %) et type d'unité structuré via l'endpoint carte getMarkers (1 seul POST).
  • pets (0 % → 100 %) depuis l'icône « Chiens permis » (img icon_animal), avec négation (« non/refusé/interdit ») → "non".
  • Disponibilité 31 % → 99 % : ajout de « PRÉSENTEMENT », ordre inversé (« PRÉSENTEMENT DISPONIBLE »), « EN » sans année (alternation de mois FR).
  • Description plus propre : bloc gauche de « Description et remarques » seulement (les items « Chauffé : Oui » restent dans amenities).

# Échantillon avant/après

  • 751-C avenue Myrand (3½, 948 $) — avant : dispo « », availability_date NULL, pets NULL, lat NULL. Après : dispo « Disponible présentement » → now, pets oui, lat 46.79107/-71.27273.
  • 905-1G rue Liénard (4½, 1148 $) — avant : dispo vide ; après : « Disponible présentement » → now, pets oui, coordonnées présentes.
  • Studios Limoilou « DISPONIBLE EN JUILLET » — avant non capté ; après dispo « Disponible en juillet » → date ISO du 1er juillet à venir.

# Lacune générique de normalisation (à traiter dans normalize.py, non contournée ici)

  • _PETS_YES_RE ne reconnaît pas « Chiens permis » / « CHIEN ACCEPTÉ » (singulier + « permis » non couverts) — ici compensé par l'icône structurée de la source, mais d'autres sources texte-seulement en profiteraient.