# gestion_montreal — Gestion Montréal - site: https://gestion-montreal.com/fr/inscriptions (GeoJSON embarqué) + pages détail /fr/inscriptions/ - méthode: json-api (GeoJSON `window.properties_geojson`) + pages détail html en cache - annonces: 23 → 23 (43 features à la source ; loués / non résidentiels / hors CMM exclus) - couverture après (sur 23 annonces): prix 100%, adresse 100%, dispo 83%, superficie 4%, commodités 96% - fixture: ok · test: ok ## Champs extraits - GeoJSON (déjà en place) : id, slug, prix + libellé, adresse, ville, titre/description FR, classification -> type d'unité, chambres, disponibilité ISO, photos, lat/lng, drapeaux « Loué »/`sold_rented`. - NOUVEAU — pages détail via `self.detail(...)` (cache BD, clé = hash de [updated_at, major_updated_at, prix, dispo, titre], plafond 150 vraies requêtes/sync) : sections structurées « Équipements / Caractéristiques Intérieures/Extérieures / Services / Animaux / Transport » -> commodités fidèles (« Eau chaude », « Chauffage », « Électricité », « Réfrigérateur », « Non-fumeur », « Internet », « Aucun animal autorisé », « Cour privée »…). Le pipeline en dérive inclusions{}, appliances{}, smoking, pets, balcony… - NOUVEAU — `details.contact.phone` depuis le lien `tel:` de la fiche (514-500-7900). - NOUVEAU — salles de bain du GeoJSON -> commodité « N salle(s) de bain ». - NOUVEAU — `area_sqft` explicite depuis les champs structurés `area`/`area_formatted` (« 800 pc ») — 1 seule annonce renseignée à la source. - NOUVEAU — correction mojibake résiduelle : « MontréAl » (recapitalisation post-encodage) -> « Montréal » dans adresses/titres. ## Champs indisponibles à la source - Superficie : 42/43 features ont `area: null` (et les fiches détail ne l'affichent pas non plus). - Étage, stationnement (aucune mention structurée), meublé n'existe que via le mot du titre/classification. - `sublocality` toujours vide -> secteur déduit du titre/description (liste de quartiers connus). ## Fragilités - Le site coupe la connexion sur les User-Agents « bot » : UA navigateur nu obligatoire (déjà en place). - GeoJSON extrait par regex `window.properties_geojson` + raw_decode. - Encodage source corrompu (UTF-8 lu en latin-1 puis re-capitalisé) : réparé heuristiquement (`_fix_mojibake`), de nouveaux motifs peuvent apparaître. - Les fiches détail sont du HTML Bootstrap sans classes sémantiques : le sélecteur `div.card-body ul li ul li small` est structurel. ## Améliorations apportées - Commodités structurées des fiches détail (96% des annonces, 4% avant) -> details riches (inclusions chauffage/électricité/eau chaude/internet, électroménagers, non-fumeur, animaux). - `pets` renseigné quand la section Animaux existe (3 annonces). - Contact téléphonique structuré, salles de bain, superficie structurée quand présente, mojibake d'adresses corrigé. - Cache BD des pages détail : re-fetch seulement si l'annonce change (clé de contenu), plafonné à 150 requêtes/sync. ## Échantillon avant/après - AVANT : `Studio semi-meublé à louer – Centre-ville de Montréal | 950 | Studio | details={"inclusions": {"internet": true}, "laundry": true, "furnished": false} | adresse « … MontréAl » possibles` - APRÈS : `Studio semi-meublé à louer – Centre-ville de Montréal | 950 | Studio | details={"inclusions": {"heating": true, "electricity": true, "hot_water": true, "internet": true}, "appliances": {"fridge": true}, "laundry": true, "smoking": false, "furnished": "semi", "contact": {"phone": "514-500-7900"}} | 1024 Rue Sherbrooke Est, Montréal`