# gestion_legrand — Gestion Le Grand - site: https://gestionlegrand.ca (WordPress + Elementor) - méthode: API wp-json — articles de la catégorie « Location » (1 requête) + grille /a-louer/ pour les vignettes (1 requête) - annonces: 5 (appartements ; l'agence loue aussi des maisons quand dispo — même catégorie) - couverture (sur 5 annonces): prix 100%, dispo 100%, type 100%, ville 100%, secteur 100%, images 100%, description 100%, adresse 40% — superficie dans le texte (935 pi², 1 500 pi² : parse_area_sqft au finalize) - fixture: ok (2 requêtes) · test: ok (2 verts) ## Champs extraits - `wp-json/wp/v2/posts?categories=28` (catégorie « Location », _fields id,link,title,content) : - id de post WordPress → external_id stable ; - titre « 3 ½ – Place des Bâtisseurs, Drummondville » → title ; le format d'unité en tête → unit_type ; la ville après la dernière virgule → city (repli « Drummondville » : tout le parc y est — la catégorie Location l'affirme : « Vérifiez nos locations disponibles à Drummondville ») ; - contenu de l'article (paragraphes dédupliqués) → description ; on y lit : - « Prix : 1 200 $ / mois » → price_label/price ; - le paragraphe « Disponible maintenant » / « Disponible dès juin 2026 !! » → availability (texte source) ; - « situé au 140, rue Raymond » → address (seulement si présent) ; - « secteur … Saint-Nicéphore » → sector. - Vignettes : la grille Elementor de /a-louer/ mappe post- → img data-src (lazy-load LiteSpeed) — nécessaire car l'API média renvoie rest_forbidden pour une partie des pièces jointes. - Superficie et inclusions (déneigement, tonte, borne de recharge…) restent dans la description : parse_area_sqft/textmine les structurent au finalize(). ## Champs indisponibles à la source - GPS : jamais publié. - Adresse civique complète : publiée seulement pour Place des Bâtisseurs (« 140, rue Raymond ») ; les autres articles ne donnent que la rue dans le titre (rue Chapleau, boul. Saint-Joseph, rue Denise-Marleau). - Une seule photo par annonce côté REST/grille (les galeries des pages articles sont des carrousels Elementor non requêtés pour rester à 2 requêtes/sync). ## Fragilités - L'id de la catégorie « Location » (28) est codé en dur : si l'agence recrée la catégorie, l'API renverrait une liste vide — visible au sync. - Prix/adresse/secteur extraits du texte libre par regex : un changement de formulation (« Loyer : » au lieu de « Prix : ») ferait retomber ces champs à vide (jamais deviné) — le test de fixture le détecterait. - « Disponible 1 er juillet 2026 » : l'exposant « er » du HTML insère une espace (texte source tel quel ; parse_availability_date s'en accommode). ## Échantillon - 2581 : 3½ – Place des Bâtisseurs, 1 200 $/mois, dispo maintenant, 140 rue Raymond, secteur Saint-Nicéphore, ascenseur. - 1645 : 4½ – rue Chapleau, 1 590 $/mois, dispo maintenant, 935 pi², 2 chambres. - 1483 : 5½ – rue Denise-Marleau, 1 550 $/mois, dispo 1er juillet 2026, 1 500 pi², 3 chambres.