SPB Git

spb/lou-ka Public

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

HTML 99.7%
3.9 KB

# realstar — Realstar Management

# Champs extraits

  • Carte liste : nom, adresse complète, ville (mapping slug), lits/sdb/pi² (fourchette), fourchette de prix, vignette, téléphone du bureau de location (lien tel: structuré → details.contact.phone).
  • Fiche propriété : galerie photos rentcafe, description (2 premiers paragraphes), « Points forts de la propriété » → amenities.
  • NOUVEAU — page /floorplans (RentCafe, structurée : #fp-container-*, .fp-availability, data-selenium-id) : par plan — nom (« 4 ½ D »), chambres, pi², prix mensuel, nombre d'unités disponibles. En dérive :
    • availability réelle (« N unité(s) disponible(s) — plans… ») → availability_date="now" via finalize() ;
    • price = minimum des plans disponibles (au lieu de la fourchette carte), price_label fidèle ;
    • area_sqft + unit_type explicites quand un seul plan est disponible ; sinon superficies dans la description (finalize() en dérive le minimum).

# Champs indisponibles à la source

  • pets en valeur structurée (le point fort « ANIMAUX DE COMPAGNIE » est ambigu — laissé au normaliseur générique, qui ne le mappe pas car pas de verbe accepté/refusé).
  • lat/lng (la carte Google est initialisée en JS, aucune coordonnée dans le HTML rendu).
  • Date précise de disponibilité par unité (derrière le portail sécurisé RentCafe).
  • Meublé, étage, JSON-LD (absents).

# Fragilités

  • Tout passe par Firecrawl (Cloudflare + rendu client) : 1 rendu recherche + 2 rendus par propriété. Coût contrôlé par le cache self.detail(...) (clé = hash de la carte liste, incluant le prix) + plafond max_renders=20 (exception _BudgetReached, rien de mis en cache si plafond atteint).
  • Rendu parfois incomplet : seconde chance avec waitFor plus long sur la page recherche.
  • Sélecteurs RentCafe (fp-container, data-selenium-id) : stables mais propres au thème Yardi.
  • FIRECRAWL_API_KEY absent ne lève plus au niveau du connecteur (nécessaire au rejeu hors-ligne des fixtures) ; en direct, Firecrawl répond 401.

# Améliorations apportées

  • requests.post module → self.session.post dans _rendered (les fixtures capturent désormais les 13 réponses Firecrawl).
  • Pages détail (fiche + plans) déplacées derrière self.detail(...) (cache BD) : plus de re-rendu Firecrawl à chaque sync si la carte n'a pas changé.
  • Ajout du parsing structuré de /floorplans : disponibilité réelle (0 % → 83 %), superficie (0 % → 83 %), prix « à partir de » réels des unités disponibles.
  • Téléphone du bureau → details.contact.phone.
  • Fixture + tests enregistrés (13 requêtes, 6 annonces).
  • 2026-08-08 — Expansion provinciale (lot 0) : gatineau, hull (secteur de Gatineau) et sherbrooke ajoutés à _GM_CITIES ; max_properties 8 → 12 (9 propriétés QC sur la page de recherche). +3 annonces : Heritage Lofts I&II (Gatineau, 1 550 $), Les Jardins Hauterive (Sherbrooke, 1 015 $ — propriété signalée dans reports/expansion/estrie.md) et Lumineau Appartements (Sherbrooke, 1 495 $). 6 → 9 annonces. Fixture réenregistrée (19 requêtes), 2 tests verts.

# Échantillon avant/après

  • AVANT : Excelsior Apartments | 1645.0 | | dispo="" (date NULL) | area NULL | details sans contact
  • APRÈS : Excelsior Apartments | 1645.0 | dispo="5 unité(s) disponible(s) — 3 ½ G, 3 ½ A, 4 ½ D, 4 ½ O, 4 ½ T" → now | area 620 | contact.phone=514-447-6264
  • APRÈS : Bourg Du Village | 1750.0 | 4½ | "1 unité(s) disponible(s) — 4 ½ C" → now | area 918 pi² (plan unique disponible → type + superficie explicites)
  • « Marc Chagall » : 0 unité disponible aux plans → dispo laissée vide (fidèle), prix = fourchette de la carte.