# app_urbains — Appartements Urbains - site: https://www.appartementsurbains.ca/projets-residentiels/ (+ micro-sites projets : lecharlie.ca, condosarchipel.ca, quartiercartier.ca, …) - méthode: html (micro-sites) - annonces: 17 → 16 (une unité retirée par la source entre les deux syncs) - couverture après (sur 16 annonces): prix 100%, adresse 100%, dispo 44%, superficie 100%, commodités 100% - fixture: ok · test: ok (2 passed) ## Champs extraits - **Menu / page projets** : nom du projet + quartier (Montcalm, Limoilou, Ste-Foy, Loretteville, Lévis). - **Page projet (micro-site WordPress/Oxygen, suivie via redirection 301)** : - tableau « unités disponibles » : n° d'unité, type (3½…), prix, disponibilité (« Maintenant », « 1er juillet »), **superficie** (colonne « Superficie (pi²) », nouvelle extraction → texte brut `« 915 pi² »` dans amenities, finalize() dérive area_sqft) ; - adresse civique : en priorité la carte wpgb du projet lui-même (corrige Le Charlie qui héritait de l'adresse du Centre Vidéotron), sinon 1re adresse de la page ; - commodités : blocs « avantages » des deux générations de gabarits (`.listing-avantages h4` pour Archipel/Quartier Cartier + `span.ct-span` pour Le Charlie) ; - téléphone du projet (lien `tel:` structuré, décodé) → `details.contact.phone` ; - description (og:description), photos (wp-content/uploads). ## Champs indisponibles à la source - Animaux/inclusions par unité : seulement au niveau projet, en texte libre (« Animaux permis-20lbs ») — dérivés par la normalisation centrale. - Disponibilité pour L'Archipel : le tableau n'a pas de colonne « Disponibilité » (les unités listées sont implicitement disponibles) — laissé vide, aucune valeur inventée. - Superficie du balcon, plan PDF, étage : affichés uniquement dans un visualiseur interactif JS (admin-ajax + nonce), non accessibles statiquement. - Le Zircon / Les Ormes / Quartier Cartier : « Aucune unité disponible » actuellement (0 annonce, normal). ## Fragilités - Chaque projet redirige (301) vers son propre micro-site (domaines différents) : la structure des tableaux varie (« Disponibilité … Superficie » vs « Type … Superficie »). - Sélecteurs Oxygen (`c-full-width flex-row`, `.listing-avantages`) propres au gabarit TactikMedia — cassables à la refonte. - La page liste imprime des warnings PHP dans le HTML (« Undefined variable $post ») — le parsing des noms de projets doit rester tolérant. - Le détail par unité (`/unites/?_unite=N`) est un viewer JS avec nonce WP : ne pas essayer de le scraper. - Le CPT WordPress `unites` est exposé via /wp-json/ mais sans champs ACF (`acf: []`) — inutilisable. ## Améliorations apportées - Superficie par unité extraite du tableau (0 % → 100 % de couverture area_sqft). - Adresse du projet corrigée (carte wpgb du projet prioritaire — Le Charlie passait de « 250 Bd Wilfrid-Hamel » à « 1385 Rue Monseigneur-Plessis »). - Commodités désormais extraites sur les micro-sites récents (`.listing-avantages h4`) : Archipel et autres passent de 0 à ~12 commodités. - Téléphone de contact (`tel:`) ajouté dans `details.contact.phone`. ## Échantillon avant/après **L'Archipel — unité 120** (1810 $, 4½) - avant : area_sqft=None, amenities=[], details=`{}`, address=`7070 Bd Guillaume-Couture, Lévis…` - après : area_sqft=1241, amenities=["Béton pour une insonorisation optimale", "2 ascenseurs", "Chute à déchets", …, "1241 pi²"], details=`{"inclusions": {"heating": true}, "ac": true, "elevator": true, "balcony": true, "pool": true, "gym": true, "contact": {"phone": "418-717-2105"}}` **Le Charlie — unité 504** (1630 $, 3½, dispo Maintenant) - avant : area_sqft=None, address=`250 Bd Wilfrid-Hamel, Québec, QC G1L 5A7` (adresse du Centre Vidéotron !) - après : area_sqft=915, address=`1385 Rue Monseigneur-Plessis, Québec, QC`, details enrichi de `"contact": {"phone": "418-717-2105"}`