spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# mellem — Mellem (Groupe Mach) — Gatineau + Montréal2- site: https://www.mellem.ca/projets/manoir-des-trembles (+ /grace-dart, /ville-marie)3- méthode: html (Nuxt SSR) → module « plans » Livya/Realvuu (`app.livya.com`, Next.js SSR) dont le payload embarque l'inventaire JSON complet4- annonces: 84 unités disponibles — **Gatineau 26** (Manoir-des-Trembles, 189 unités) + Montréal 58 (Grace Dart 25, Ville-Marie 33)5- couverture (sur 84 annonces): prix 100 %, superficie 100 %, adresse 100 %, **lat/lng 100 %**, dispo 100 %, commodités 100 %, images 100 %, type d'unité 96 %6- fixture: ok (7 requêtes) · test: ok (2 verts)78## Champs extraits9- **Découverte** : `sitemap.xml` → pages `/projets/<slug>` (aucune liste codée en dur) ; chaque page porte `<div data-module="plans" data-project="mellem-manoir-des-trembles" data-entity="<uuid>" data-lang="fr">` → URL du module `https://app.livya.com/fr/maitre-carre/projects/<project>/plans/<entity>?noLayout=1`. Seul `maitre-carre` (compte Livya du groupe, publié dans le bundle du site) est une constante de routage.10- Le module Next.js diffuse son payload en flux RSC (guillemets échappés) : le tableau `units` est repéré, dé-échappé puis décodé. Attention, la clé `units` sert **aussi** au dictionnaire des libellés d'interface → seul le tableau dont le 1er élément porte `unitId` est retenu.11- Par unité : `number` (→ `external_id` = `manoir-des-trembles-812`), `availability` (**AVAILABLE** seulement ; RESERVED/NOT_AVAILABLE exclues), `rental` (les unités en vente sont écartées), `rentalPrice` (loyer **exact**, pas « à partir de »), `unitSize` (pi²), `balconySize`, `rooms` (4.5 → 4½), `roomsBed`/`roomsBath`, `typeName`, `floorDisplayName` + `floorNumber` (→ `details.floor`), `address` + `city` + `postalCode` (adresse complète reconstruite), **`latitude`/`longitude`**, `typeImages` (plan/rendu de la typologie).12- Ville prise **dans la donnée de l'unité** (Gatineau / Montréal) : le connecteur ne suppose rien à partir du projet.13- Commodités : liste « Plus de commodités pour mieux vivre » de la page projet (`section.ui-sections-projects-list-inclusion`) — Internet, électricité et eau chaude, 5 électroménagers, air climatisé et thermopompe, habillage des fenêtres, chute à déchet/compost, application mobile, caméras, équipe sur place, salle de colis. Les autres listes de la page (commerces du quartier) sont **exclues**.1415## Champs indisponibles à la source16- **Secteur** : non publié par unité (l'adresse et les coordonnées permettent l'enrichissement quartier en aval) → `sector` vide, pas de secteur déduit d'un code postal.17- Date de libération : `futureAvailability` est `null` partout (les unités disponibles le sont immédiatement) → `availability = "Disponible"`.18- Animaux/meublé : non exposés (les inclusions viennent de la liste de commodités).19- 3 unités sur 84 sans type d'unité : leur champ `rooms` vaut 0.5 (incohérence de la source) et leur code de type ne porte pas de typologie ; quand le code l'indique (« A-2.5 »), la typologie est relue dedans (4 unités → 2½), sinon le champ reste vide.2021## Fragilités22- Deux dépendances en série (mellem.ca puis app.livya.com) : un changement de l'intégration Livya casse la sync (0 annonce, autres sources intactes).23- Le payload RSC est du JSON échappé dans du HTML : le décodage est borné par `raw_decode` et protégé par try/except ; toute évolution du format se verra immédiatement dans la fixture.24- Le même connecteur alimente 2 immeubles montréalais : un ajout de projet au sitemap est capté automatiquement (`max_projects = 8`).2526## Échantillon27- `mellem:manoir-des-trembles-812 | Manoir-des-Trembles — Unité 812 | 256 Boulevard Saint-Raymond, Gatineau, J9A 3G7 | 3½ | 2 299 $ par mois | 674 pi² | balcon 72 pi² | étage 8 | 45.4278/-75.7624 | 11 commodités`28- `mellem:manoir-des-trembles-206 | 2½ (relu dans le code de type « A-2.5 ») | 1 557 $ | 499 pi²`29- `mellem:grace-dart-605 | Grace Dart — Unité 605 | 6085 Rue Sherbrooke Est, Montréal, H1N 1C2 | 3½ | 2 196 $ | 648 pi²`30