SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.4 KB

# lakle — La Klé (Cité Verte)

  • site: https://lakle.ca/phase-1-occupation-immediate/ (+ /contact pour adresses/coordonnées)
  • méthode: json-api (sélecteur de plans WP /wp-json/do-selecteur-plans/v1/unite) + html (cartes phases 2-3)
  • annonces: 26 → 46
  • couverture après (sur 46 annonces): prix 57%, adresse 100%, dispo 100%, superficie 100%, commodités 100%
  • fixture: ok · test: ok (2 passed)

# Champs extraits

  • Sélecteur de plans (tour phase 4, 26 unités) : <polygon class="disponible"> (numéro, étage, type, prix) + API JSON par unité : prix (montant + montant_suffixe « + taxes »), type, superficie habitable structurée → area_sqft explicite (distincte de la terrasse), superficie terrasse/balcon, style, nb chambres, date libre (a_partir), plan PDF, galerie, promotion. details.floor depuis data-etage (structuré).
  • Cartes phases 2 et 3 (nouveau — 20 unités) : ul.liste-unite-disponible > li : nom d'unité (B16, H, C et Ci…), phase, « 1214pi² - 3 chambres » (type + superficie dérivés par finalize), texte marketing, mention « Disponible en octobre / dès maintenant » → availability, photo du plan, PDF.
  • Page /contact (nouveau) : marqueurs Google Map structurés par phase → adresse civique avec code postal + lat/lng par phase (phase 4 : Av. Ernest-Gagnon G1S 0E4 ; phase 3 : 475 Ernest-Gagnon ; phase 2 : 1180 Louis-Adolphe Robitaille) — avec repli constant si la page change.
  • Commodités du complexe (liste « Toutes les unités incluent » de l'accueil, vérifiée) : électroménagers, électricité, chauffage/climatisation centrale, piscine intérieure, salle d'entraînement, toiles solaires, vélos intérieurs, stationnement intérieur en option, interphone, puce d'accès, caméras.

# Champs indisponibles à la source

  • Prix des unités phases 2-3 : aucun prix par unité (les tuiles « à partir de 1575$/1945$/2615$ » sont des filtres projet-entiers, pas rattachées à ces unités — non utilisées). → 20/46 sans prix, fidèle à la source.
  • Politique animaux / fumeur : jamais mentionnée.
  • Meublé : non mentionné.
  • Étage des unités phases 2-3 (seulement « en hauteur » en texte libre).

# Fragilités

  • Le sélecteur de plans est associé à la phase 4 par déduction (calendly « la-kle-phase-4 », visuels phase-4) alors que l'URL dit « phase-1-occupation-immediate » (slug historique) — à revalider si le site restructure.
  • external_id des cartes = p<phase>-<slug du nom> (ex. p3-b16) : stable tant que le nom d'unité ne change pas.
  • La disponibilité a_partir (« Libre le 8 août 2026 ») semble générée avec la date du jour côté serveur → normalisée « now ».
  • Les cartes sans mention « Disponible … » reçoivent « Disponible » (la section s'intitule « Découvrez nos unités disponibles »).

# Améliorations apportées

  • Bug corrigé : area_sqft prenait la superficie de la terrasse (finalize prend le min des superficies trouvées dans la description : 161 pi² de balcon < 682 pi² habitables). Désormais superficie_habitable structurée de l'API → 100 % correct.
  • +20 annonces : unités disponibles des phases 2 et 3 (cartes), auparavant totalement ignorées.
  • Adresse civique réelle + code postal par phase (avant : « Cité Verte, Québec ») et lat/lng (avant : géocodage sur adresse vague).
  • details.floor structuré depuis data-etage.
  • Liste des commodités du complexe complétée et vérifiée contre le site (11 items au lieu de 5).

# Échantillon avant/après

La Klé — Unité 103 (3½) (1845 $)

  • avant : area_sqft=161 (terrasse !), address=Cité Verte, Québec, lat/lng absents, amenities=5
  • après : area_sqft=682, address=Av. Ernest-Gagnon, Québec, G1S 0E4, lat=46.798431/lng=-71.25187, details.floor=1, amenities=11

La Klé — Unité B16 (Phase 3) (nouvelle annonce)

  • avant : absente
  • après : unit_type=5½ (3 chambres), area_sqft=1214, availability=Disponible en octobre en hauteur → 2026-10-01, address=475 Ernest-Gagnon, Québec, G1S 0E4, lat/lng phase 3, plan PDF + photo

# Lacune générique de normalisation détectée

  • parse_area_sqft() retourne le min de toutes les superficies d'un texte : quand une description contient l'appartement ET son balcon/terrasse (« Superficie 682 pi² | Balcon 161 pi² »), la terrasse gagne. Un indice de contexte (mots balcon/terrasse à proximité → exclure) éviterait ce piège pour les connecteurs qui n'ont pas de champ structuré.