# beaudoin — Société Beaudoin immobilier - site: https://www.beaudoinimmobilier.ca/index.php/wp-json/wp/v2/properties (thème Houzez) - méthode: json-api (WordPress REST) - annonces: 12 → 12 - couverture après (sur 12 annonces): prix 100%, adresse 100%, dispo 100%, superficie 67%, commodités 100% - fixture: ok · test: ok (2 passed) ## Champs extraits - **API REST /wp-json/wp/v2/properties** (déjà en place) : id, titre, lien, prix (`fave_property_price` + postfix), adresse géocodée (`fave_property_map_address`), lat/lng, type d'unité (taxonomie `property_type`), disponibilité (taxonomie `property_status`), ville/secteur (taxonomie `property_city`), description (content), galerie (`fave_property_images` → /media). - **Nouveaux champs de la même API** : - `additional_features` (PHP sérialisé, paires titre/valeur) → amenities : « Eau chaude incluse », « Cuisinière incluse », « Réfrigérateur inclus », « Lave-vaisselle inclus », « Air climatisé inclus », « Espace de rangement inclus », « Chiens et chats acceptés », « Buanderie sur place » — la normalisation centrale en dérive inclusions/appliances/ac/storage/pets ; - `fave_property_size` (+ préfixe « Pieds carrés ») → **area_sqft structuré** (67 % des annonces l'ont à la source) ; - `fave_property_bedrooms` / `fave_property_bathrooms` → amenities « N chambres », « N salle(s) de bain ». ## Champs indisponibles à la source - Superficie absente sur 4/12 propriétés (champ vide chez Houzez). - Meublé, fumeur, stationnement (type/prix) : non renseignés. - Contact agent : les posts `houzez_agent` n'ont pas de route REST (`rest_no_route`) — seuls les courriels présents dans la description sont récupérés par la normalisation. - Taxonomie `property_feature` : vide sur toutes les propriétés actuelles (le gestionnaire utilise plutôt `additional_features`). ## Fragilités - `additional_features` est du PHP sérialisé parsé par regex : des guillemets échappés dans un libellé pourraient fausser le découpage (le parseur tolère `\"`). - La disponibilité vient d'une taxonomie de type « 08 - Disponible pour août » : le préfixe numérique est retiré, la normalisation centrale parse le reste. - L'API est sous `/index.php/wp-json/...` (permaliens non réécrits) — si le site active la réécriture, l'URL changera. - Filtre Grand Montréal par liste blanche de villes : à maintenir si le gestionnaire ajoute des secteurs. - Lacune générique de normalisation constatée : « Chiens et chats acceptés » est classé `pets="conditions"` (via le motif « chats acceptés » de `_PETS_COND_RE`) alors que « oui » serait plus juste — à corriger dans normalize.py, pas localement. ## Améliorations apportées - Extraction des « caractéristiques additionnelles » Houzez (inclusions, électroménagers, climatisation, animaux, buanderie) : commodités passent de 0 % à 100 %. - Superficie structurée (`fave_property_size`) : 0 % → 67 % (le reste est vide à la source). - Chambres / salles de bain ajoutées aux commodités affichables. ## Échantillon avant/après **Grand 5 1/2 au Bois de Champbellé – 525 Saint-Charles O** (2235 $, 5½, dispo maintenant) - avant : area_sqft=None, amenities=[], details=`{"pool": true, "storage": true}` - après : area_sqft=1250, amenities=["Eau chaude incluse", "Cuisinière incluse", "Réfrigérateur inclus", "Lave-vaisselle inclus", "Air climatisé inclus", "Espace de rangement inclus", "3 chambres", "2 salles de bain"], details=`{"inclusions": {"hot_water": true}, "appliances": {"fridge": true, "stove": true, "dishwasher": true}, "ac": true, "pool": true, "storage": true}` **5 1/2 Penthouse au Carignan – 475 Saint-Charles O** (3015 $, 5½) - avant : area_sqft=None, amenities=[], details=`{"balcony": true, "pool": true}` - après : area_sqft=1710, amenities=8 items, details=`{"inclusions": {"hot_water": true}, "appliances": {"fridge": true, "stove": true, "dishwasher": true}, "ac": true, "balcony": true, "pool": true, "storage": true}`