# boreal_abitibi — Constructions Boréal Abitibi - site: https://constructionsborealabitibi.com/locations/ - méthode: html + AJAX (admin-ajax.php `get_rents`) - annonces: 5 (Val-d'Or ×4, Malartic ×1 — logements neufs, seul acteur structuré à Malartic) - couverture (sur 5 annonces): prix 100%, disponibilité 100% (« Disponible en août/… »), ville 100%, adresse 100% (avec n° d'app.), type 100% (Grandeur), chambres/sdb/garage 100%, étage 100%, inclusions 100%, animaux 100% (non), images 100%, description 100% - fixture: ok · test: ok ## Champs extraits - WordPress + thème maison (Tailwind) : la grille `/locations/` est **vide côté serveur** et remplie en AJAX. Le connecteur lit le HTML de `/locations/` pour récupérer le `nonce` (`var ajax_object = {…}`), puis POST `admin-ajax.php` `action=get_rents` (paginé via `max_num_pages` ; `town` vide = toutes les villes, donc un seul appel couvre Val-d'Or ET Malartic — le filtre `?rent_town=` de l'URL n'est pas nécessaire). - Chaque « rent » du JSON est une carte HTML `article.listing-item` : **ville** (`div.h4 strong`), adresse + n° d'appartement (`h3 a`), prix (« 1 550 $ / mois »), « Disponible en », pictos chambres/salles de bain/garage, mention « Non meublé, non chauffé, non éclairé », photo (data-srcset, la plus grande résolution). - Fiche détail `/loyer//` (via `self.detail` + cache BD, budget 30) : tableau de specs (rangées `lg:table-row` h2/div) — **Grandeur** « 4 et demi » → `unit_type` 4½, Étage, Parking, **Inclusions** ; description (« Proximité des écoles… ») ; galerie lazy-load (data-src, redimensionnements retirés) ; la mention « TOUS NOS LOGEMENTS SONT NON-FUMEUR ET NOUS N'ACCEPTONS PAS LES ANIMAUX » affichée sur chaque fiche alimente `pets = non`. - `external_id` = slug `/loyer/` (CPT WordPress) — stable. ## Périmètre (exclusions volontaires) - Rien à exclure : le CPT « loyer » ne contient que du résidentiel locatif (les terrains à vendre sont une page séparée). ## Champs indisponibles à la source - Superficie, GPS : jamais publiés. - Prix affiché unique par carte (pas de « à partir de »). ## Fragilités - Le `nonce` AJAX est requis : s'il expirait entre le GET et le POST (improbable, quelques secondes), la requête échouerait — le sync suivant repart de zéro. À l'enregistrement de fixture, le nonce lu du HTML capturé rend le POST déterministe au rejeu. - Les classes de carte sont des utilitaires Tailwind : le parsing repose sur les pictos `icon-bedroom/bathroom/garage`, les regex de prix/« Disponible » et `div.h4 strong` — les éléments les plus sémantiques disponibles. - `posts_per_page=12` (valeur du site) conservé ; garde-fou `max_pages=10`. ## Notes - Villes réelles observées : Val-d'Or (3e Avenue, rue Giguère), Malartic (Dargis Ménard). - Tout le parc actuel est en 4½ (2 chambres, 1 sdb, garage/stationnement), 1 400 $–1 650 $/mois, non meublé/chauffé/éclairé. - robots.txt WP standard (admin-ajax.php explicitement `Allow`), sitemap `sitemap_index.xml` ; politesse 0,6 s (GET et POST) ; 7 requêtes par sync au volume actuel.