Skip to content
# realstar — Realstar Management
- 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.