Skip to content
# shdm — Société d'habitation et de développement de Montréal
- site: https://www.shdm.org/fr/logements-disponibles
- méthode: json-api (payload NUXT_DATA « devalue » du front Nuxt 3 / WordPress GraphQL)
- annonces: 2 → 2
- couverture après (sur 2 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
- fixture: ok · test: ok
- CPT « logement » : prix, numéro d'app., typologie (« 4 1/2 »), date de disponibilité ISO, booléens de commodités (balcon, porte-patio, plancher bois, deux étages, adapté, accessible), étage structuré →
details.floor, nombre de chambres (« 2 chambres »), orientation des fenêtres (positionFenetreEst/Nord/Ouest/Sud → commodités), clientèle cible (taxonomie autonomie : « Clientèle : Pour tous »).
- Immeuble lié : adresse, quartier (secteur), description riche (contenu WP), médias (photos logement + immeuble).
- Inclusions (chauffage/électricité/eau chaude) dérivées par finalize() depuis la description de l'immeuble.
# Champs indisponibles à la source
- Superficie (pi²) : absente du payload.
- lat/lng : le payload ne contient que des polygones GeoJSON de quartiers, pas de coordonnées d'immeuble.
- Animaux, meublé, stationnement : non exposés.
- Salles de bain : non exposées.
# Fragilités
- Format « devalue » de Nuxt 3 (tableau plat d'index) : un changement de version Nuxt/structure GraphQL casserait le parsing — le résolveur _Devalue est générique mais la détection des nœuds (« logementFields » + « uri ») est heuristique.
- Booléens d'inclusion du CPT non fiables à false : pour le 3280 Pépinière, chauffage/electricite/eauChaude sont à false dans le payload alors que la description de l'immeuble dit explicitement « Chauffage, électricité et eau chaude sont inclus dans le loyer » (cases non cochées par les éditeurs). Ils ne sont donc publiés qu'à true (via commodités) ; les false sont ignorés, la description fait foi.
- Les fiches s'ouvrent en modale (les URI /fr/logement/ répondent 404) : l'URL pointe vers la liste avec le slug en ancre.
# Améliorations apportées
details.floor depuis le champ structuré etage (>0 ; 0 = RDC non exposé, sémantique ambiguë).
- Commodités enrichies : nombre de chambres, orientation des fenêtres, clientèle cible (autonomie).
- Investigation des booléens d'inclusion : conservés en positif seulement (voir Fragilités) — évite d'écraser les inclusions vraies dérivées de la description par des false erronés.
- Recherche de superficie/lat-lng dans tout le payload : confirmé absents.
# Échantillon avant/après
- 2245-2249 De Champlain app. 2249 (4½, 1595 $, dispo 2026-09-01) — avant : details
{ac, balcony} ; après : + floor: 1, commodités + « 2 chambres », « Clientèle : Pour tous ».
- 3280 Pépinière app. 0212 (4½, 1486 $) — avant : inclusions true (description) ; après : inclusions true conservées +
floor: 2, « 2 chambres », « Clientèle : Pour tous ».