SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.0 KB · 40 lines markdown
Rendered Raw Blame History
1# msi — MSI Gestion immobilière2- site: https://www.msimmobiliers.com/appartements-a-louer/{quebec,levis,montreal} (BFS des secteurs + fiches unité)3- méthode: html + json embarqué (payload « flight » Next.js dans les fiches)4- annonces: 99 → 96 (3 annonces périmées désactivées au passage)5- couverture après (sur 96 annonces): prix 100%, adresse 100%, dispo 100%, superficie 6%, commodités 100%6- fixture: ok · test: ok78## Champs extraits9- Cartes liste (inchangé) : type (4 1/2…), prix, catégorie, adresse, quartier, disponibilité (« Libre immédiatement », « Disponibilité : 01 septembre 2026 ») ; stationnements/commerciaux exclus.10- Fiches unité — objet JSON `rental` extrait du payload Next.js `self.__next_f.push` (nouveau) :11  - adresse complète avec ville (« 167 Avenue Ruel, Québec, QC, Canada ») ;12  - lat/lng structurés (100 % des annonces) ;13  - date de disponibilité ISO (repli si la carte liste n'a pas de texte) ;14  - étage structuré -> details.floor ; superficie (`area`, quand > 0 : 6 annonces — la source affiche « N/C » ailleurs) ;15  - galerie photo complète (avant : regex wp-content sur toute la page).16- Liste « Caractéristiques » affichée (li de .rental-content__hero--facilities) -> amenities brutes : « Balcon », « Entrée laveuse/sécheuse », « Espace de rangement », « Stationnement inclus », « Chien interdit », « Non fumeur », « Dernier étage »… (« N/C » et « ** Location sur approbation » filtrés) ; repli sur les `features` JSON.1718## Champs indisponibles à la source19- Superficie pour ~94 % des unités (champ `area` à 0, « N/C » affiché).20- Description libre (le champ `catchphrase` est presque toujours vide — extrait quand présent), meublé, contact direct par unité.21- Politique animaux limitée aux chiens (`dogPolicy` / « Chien interdit » — rien sur les chats).2223## Fragilités24- Le payload flight Next.js est un format interne non documenté (extraction par dés-échappement + appariement d'accolades) ; repli conservé (regex images wp-content, features JSON).25- BFS plafonné à 90 pages liste ; fiches plafonnées à 150 vraies requêtes/sync (cache BD self.detail, clé = hash de la carte liste) — 1er sync ~86 s, syncs suivants ~23 s.26- Redirection 301 www -> apex suivie automatiquement par requests.2728## Améliorations apportées29- Pages détail migrées vers self.detail(...) (cache BD) avec plafond de vraies requêtes (avant : 200 fetchs directs à CHAQUE sync, uniquement pour les images).30- Nouveaux champs : lat/lng (0 -> 100 %), amenities (0 -> 100 %), details.floor, adresse complète avec ville, superficie/dispo ISO quand présentes, images plus fiables (galerie JSON ordonnée).31- 2026-08-08 — Expansion provinciale (lot 0) : racine `/appartements-a-louer/thetford-mine` ajoutée (ROOTS + `_ROOT_CITY` → « Thetford Mines »). Page valide (200) mais 0 unité affichée actuellement — flux intermittent, les annonces remonteront automatiquement quand MSI en publiera. 96 annonces au total (inchangé : Québec 72, Lévis 10, Montréal 14). Fixture réenregistrée, 2 tests verts.3233## Échantillon avant/après34- Avant : « 167 Avenue Ruel » — 1095 $, 4½, « Libre immédiatement », superficie NULL, pets NULL, details {}, amenities [], adresse « 167 Avenue Ruel », pas de lat/lng.35- Après : même annonce — details `{"appliances": {"dishwasher": true, "washer_dryer_hookup": true}, "balcony": true, "storage": true, "smoking": false, "parking": {"available": true, "included": true}, "floor": 2}`, 8 amenities brutes, adresse « 167 Avenue Ruel, Québec, QC, Canada », lat 46.8745 / lng -71.1607.3637## Lacunes génériques de normalisation observées38- « Chien interdit » (item courant chez MSI) n'est reconnu par aucun motif pets (_PETS_NO_RE/_PETS_COND_RE) -> pets reste NULL alors que l'info existe.39- « Entrée lave-vaisselle » (= sortie/branchement, pas d'appareil fourni) matche la règle dishwasher -> appliances.dishwasher=true à tort ; il existe un traitement « entrées laveuse-sécheuse » (washer_dryer_hookup) mais pas d'équivalent pour le lave-vaisselle.40