# firma — Groupe Firma - site: https://groupefirma.ca (API REST /wp-json/wp/v2/housing + fiches /logement//) - méthode: html - annonces: 12 → 12 - couverture après (sur 12 annonces): prix 8%, adresse 100%, dispo 100%, superficie 100%, commodités 100% - fixture: ok · test: ok ## Champs extraits - Découverte des 23 immeubles via l'API WordPress (post type `housing`), filtrage Grand Montréal (Lachute exclue), adresse civique du bloc d'en-tête, description de l'immeuble, commodités par icônes actives `bjm-active` (immeuble + unité), unités `li#unit-NNN` (type, badge de disponibilité + date, plan + galerie). - NOUVEAU — `details.floor` explicite depuis le champ structuré « Étage : N » de la fiche d'unité (8/12 annonces ; ignoré si non numérique). - NOUVEAU — `area_sqft` explicite depuis « Superficie : N » (pi², structuré). Indispensable car la fiche affiche aussi « Superficie du balcon : N » : le parsing générique (min) aurait retenu le balcon. - NOUVEAU — « Superficie du balcon : N pi² » ajoutée à la description -> `balcony: true` dérivé. ## Champs indisponibles à la source - PRIX : le gabarit met le loyer dans un commentaire HTML `` qui est VIDE (``) pour 11 unités sur 12 — le site ne publie tout simplement pas les loyers (« Je suis intéressé.e par ce logement » = formulaire). Rien d'autre (pas d'API de réservation exposée, pas de JSON-LD avec prix). - Animaux : « Chiens acceptés » apparaît dans les commodités mais pas de politique structurée. - Coordonnées GPS, contact par annonce, inclusions (chauffage/électricité) : absents. ## Fragilités - Tout le parsing repose sur les classes `bjm-*` du thème (Boîte à Journaux Média ?) : un re-thème casse le connecteur. - Le prix dans un commentaire HTML est intrinsèquement fragile (et déjà presque toujours vide). - La ville est déduite du dernier segment de l'adresse ; adresses sans virgule -> immeuble ignoré (comportement conservateur voulu). - Dates de disponibilité parfois périmées chez la source (ex. « 01/10/2024 ») -> normalisées en « now ». ## Améliorations apportées - Étage structuré (`details.floor`) sur 8/12 annonces. - Superficie explicite (protège contre la confusion avec la superficie du balcon). - Superficie du balcon exposée dans la description -> `balcony` dérivé. ## Échantillon avant/après - AVANT : `Le Salaberry — 3½ #208 | (sans prix) | Disponible bientôt | 582 pi² | {"ac": true, "elevator": true, "parking": {...}}` - APRÈS : `Le Salaberry — 3½ #208 | (sans prix) | Disponible bientôt | 582 pi² | {"ac": true, "elevator": true, "balcony": true, "parking": {"available": true, "type": "intérieur et extérieur", "included": false}, "floor": 2}` ## Lacune générique notée - « Chiens acceptés » (commodité fréquente ici) n'est pas reconnu par les regex pets de normalize.py (`_PETS_YES_RE` exige « animaux/chats … acceptés ») : `pets` reste None alors que la source l'affirme. À élargir dans normalize.py (`chiens? acceptes`).