spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# realstar — Realstar Management2- site: https://www.realstar.ca/searchlisting?province=Quebec3- méthode: firecrawl4- annonces: 6 → 65- couverture après (sur 6 annonces): prix 100%, adresse 100%, dispo 83%, superficie 83%, commodités 83%6- fixture: ok · test: ok78## Champs extraits9- 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`).10- Fiche propriété : galerie photos rentcafe, description (2 premiers paragraphes), « Points forts de la propriété » → amenities.11- **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 :12 - `availability` réelle (« N unité(s) disponible(s) — plans… ») → `availability_date="now"` via finalize() ;13 - `price` = minimum des plans disponibles (au lieu de la fourchette carte), `price_label` fidèle ;14 - `area_sqft` + `unit_type` explicites quand un seul plan est disponible ; sinon superficies dans la description (finalize() en dérive le minimum).1516## Champs indisponibles à la source17- `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é).18- lat/lng (la carte Google est initialisée en JS, aucune coordonnée dans le HTML rendu).19- Date précise de disponibilité par unité (derrière le portail sécurisé RentCafe).20- Meublé, étage, JSON-LD (absents).2122## Fragilités23- 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).24- Rendu parfois incomplet : seconde chance avec `waitFor` plus long sur la page recherche.25- Sélecteurs RentCafe (`fp-container`, `data-selenium-id`) : stables mais propres au thème Yardi.26- `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.2728## Améliorations apportées29- `requests.post` module → `self.session.post` dans `_rendered` (les fixtures capturent désormais les 13 réponses Firecrawl).30- 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é.31- Ajout du parsing structuré de `/floorplans` : disponibilité réelle (0 % → 83 %), superficie (0 % → 83 %), prix « à partir de » réels des unités disponibles.32- Téléphone du bureau → `details.contact.phone`.33- Fixture + tests enregistrés (13 requêtes, 6 annonces).34- 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.3536## Échantillon avant/après37- AVANT : `Excelsior Apartments | 1645.0 | | dispo="" (date NULL) | area NULL | details sans contact`38- 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`39- 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)40- « Marc Chagall » : 0 unité disponible aux plans → dispo laissée vide (fidèle), prix = fourchette de la carte.41