# brivia_1sp — 1 Square Phillips (Groupe Brivia) - site: https://www.1squarephillips.ca/locatif (+ /galerie + API AJAX /2022/php/ajax_load_plans_*.php) - méthode: html + json-api (POST AJAX des plans, phase=rental) - annonces: 3 → 3 (une par typologie, uid stables : 1sp-studio / 1sp-1-chambre / 1sp-2-chambres) - couverture après (sur 3 annonces): prix 100%, adresse 100%, dispo 100%, superficie 67% (studio : aucune unité dispo), commodités 100% - fixture: ok · test: ok (42 requêtes rejouées, POST inclus) ## Champs extraits - title, unit_type, price/price_label (« à partir de X $/mois ») : cartes typologie `ul.grid3cols` de /locatif - availability : NOUVEAU — nombre réel d'unités disponibles (« 10 unités disponibles ») compté via l'API AJAX des plans (unités `onsale` de chaque étage, phase rental) ; texte générique conservé si aucune unité - area_sqft : NOUVEAU — superficie structurée (pi²) de la plus petite unité disponible de la typologie (cohérent avec le prix « à partir de »), lue dans `ajax_load_plans_unit.php` - description : intro « tout inclus » + NOUVEAU liste des unités disponibles avec superficie et balcon (ex. « unité 709 (637 pi² + balcon 97 pi²) ») - amenities : NOUVEAU — vraies caractéristiques de l'immeuble scrapées de la section `.features` (parc canin, débarcadère, hammam, piscine/sauna, salles cardio/musculation/yoga, cotravail, cinéma, stationnement souterrain…) + inclusions de l'intro ; l'ancienne liste codée en dur ne sert plus que de repli - details.contact : NOUVEAU — téléphone et courriel structurés (liens `tel:` / `mailto:` du pied de page) - address : NOUVEAU — code postal ajouté (1205, rue du Square-Phillips, Montréal, QC H3B 3C9) - images : perspectives + galerie + NOUVEAU plans PNG des unités disponibles ## Champs indisponibles à la source - Prix par unité (uniquement « à partir de » par typologie) - Date de disponibilité par unité (statut disponible/loué seulement) - Politique animaux explicite (le « parc canin » suggère pet-friendly mais rien d'affirmé — non inventé), meublé, étage de chaque annonce (typologie multi-étages) ## Fragilités - L'inventaire passe par des POST `ajax_load_*.php` non documentés (thème maison) : ~21 requêtes/sync (sélecteur + 20 étages) + 1 fiche par nouvelle unité (cache BD `self.detail`, clé fixe car les fiches plan sont immuables) — plafond 150 fiches - Le statut « onsale » est porté par une classe CSS dans du SVG (`class="unit onsale"`) — regex fragile si le générateur SVG change - Les 3 cartes typologie de /locatif restent la source des prix : si la mise en page `ul.grid3cols` change, les annonces disparaissent - La détection `onsale` est indépendante du paramètre `type` envoyé à l'API (vérifié) ; seule la légende en dépend ## Améliorations apportées - Découverte et exploitation de l'API AJAX des plans (inventaire unité par unité) : disponibilités réelles comptées, superficies structurées, plans en images - Amenities réelles scrapées au lieu d'une liste codée en dur - Contact structuré (tel:/mailto:), adresse avec code postal - POST throttlé (`_post_json`) réutilisant la session (fixtures rejouables), cache BD des fiches unité ## Échantillon avant/après **1 Chambre locatif** — avant : `2040.0 | 3½ | Disponible (tour locative en location) | now | area=∅ | pets=∅ | {"inclusions": {...}, "appliances": {"fridge": true}, "ac": true, "balcony": true, "pool": true, "gym": true, "parking": {...}, "price_from": true}` après : `2040.0 | 3½ | 10 unités disponibles | now | area=598.0 | pets=∅ | {"inclusions": {heating, electricity, hot_water, internet}, "appliances": {"fridge": true}, "ac": true, "elevator": true, "balcony": true, "pool": true, "gym": true, "price_from": true, "contact": {"phone": "514-617-9999", "email": "location@1squarephillips.ca"}}` + description listant les 10 unités avec pi² **2 Chambres locatif** — avant : `2750.0 | 4½ | Disponible (tour locative en location) | now | area=∅ | pets=∅ | {...}` après : `2750.0 | 4½ | 9 unités disponibles | now | area=853.0 | pets=∅ | {... , "contact": {...}}` + unités listées (ex. unité 310 (1405 pi²))