Skip to content
# 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
- 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/<slug>/ (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/<slug> (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.