Skip to content
# plan_a — Plan A Immobilier
- site: https://plan-a.ca/plan-a-appartements-et-condos-a-louer/ (fiches /project//)
- méthode: html
- annonces: 9 → 9 (granularité = 1 annonce par complexe, prix plancher ; projets Saguenay/Sherbrooke exclus)
- couverture après (sur 9 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
- fixture: ok · test: ok
- Cartes-projets : JSON
data-filters-item (ville, budget-min), adresse, prix "À partir de", types, disponibilité, carrousel d'images (inchangé).
- Fiches projets :
- Commodités des unités (nouveau) : section
.c-feature ("Comptoir de quartz", "Électroménagers (5) inclus", "Thermopompe murale", "Balcon privé", "Un animal de 10 livres et moins est permis"…).
- Services de l'immeuble (nouveau) : liste à puces sous "SERVICES DANS L'IMMEUBLE" ("Ascenseurs", "Stationnements intérieurs ($)", "Espaces de rangements ($)"…).
- Atouts (nouveau) : titres du carrousel
.c-cell_title h4 ("Centre fitness", "Piscine"…).
- Types d'unités complets (
.c-info_unit : 3½/4½/5½), description (og:description), disponibilité "Prochaine disponibilité + x/y unités", quartier (section QUARTIER).
- Galerie (nouveau) : photos wp-content de la fiche ajoutées aux images de la carte (cap 20).
- Dérivés par finalize() : ascenseur, balcon, piscine, gym, rangement, ac (thermopompe), stationnement intérieur/extérieur, lave-vaisselle, entrée laveuse-sécheuse, price_from.
# Champs indisponibles à la source
- Superficie : non affichée (ni par projet ni par type).
- Prix/dispo par unité : la page publique n'expose que le prix plancher et le compte d'unités disponibles ; pas d'API des unités individuelles (vérifié : pas de wp-json custom, pas d'iframe de disponibilités).
- lat/lng : non exposés (seulement un lien google.com/maps?q=).
- pets structuré : seulement en texte libre ("Un animal de 10 livres et moins est permis").
# Fragilités
- Disponibilité extraite par regex sur le texte aplati ("Prochaine disponibilité … Unités").
- Thème sur mesure (classes c-card/c-feature/c-cell) — refonte graphique = maintenance.
- La liste des sous-titres de carte sert à la fois d'adresse et de prix (ordre positionnel).
# Améliorations apportées
- Cache
self.detail(...) : les 9 fiches projets ne sont re-téléchargées que si la carte change (clé = sha1 de prix|dispo|types|adresse) ; sync sans changement : 25 s → 2,4 s ; plafond max_details=20 vraies requêtes (compteur dans fetch_fn).
- Commodités : de 0% à 100% (3 sections extraites), d'où des details riches (avant : quasi vides).
- Types d'unités complets depuis la fiche, galerie enrichie.
- 2026-08-08 — Expansion provinciale (lot 0) :
sherbrooke ajouté à ALLOWED_CITIES. +1 annonce : Complexe du Parc (85 Rue Bowen N, Sherbrooke — 1½ à 4½, à partir de 590 $/mois, 29/196 unités disponibles). Saguenay (District Jonquière, disponible sur le site) reste exclu — prévu au lot Est & Nord du plan d'expansion. 9 → 10 annonces. Fixture réenregistrée, 2 tests verts.
# Échantillon avant/après
- Avant :
ELORA | 1720 | 3½ | Disponible maintenant (79 / 185 unités) | amenities=[] | details={"price_from": true}
- Après :
ELORA | 1720 | 3½ | Disponible maintenant (79 / 185 unités) | amenities=["Comptoir de quartz et dosseret de quartz", "Électroménagers (5) inclus dans toutes les unités", …, "Ascenseurs", "Stationnements intérieurs ($)"] | details={"appliances": {"fridge": true}, "ac": true, "elevator": true, "balcony": true, "gym": true, "storage": true, "parking": {"available": true, "type": "intérieur"}, "price_from": true}
# Notes de normalisation (génériques)
- "Un animal de 10 livres et moins est permis" (singulier "animal") ne matche aucun motif pets (
_PETS_*_RE n'acceptent que "animaux/chats/chiens") → pets=None alors que la source l'affiche. Ajouter le singulier "animal … permis" profiterait à toutes les sources.
unit_type du schéma est mono-valeur : "3½, 4½, 5½" est réduit à "3½" par normalize_unit_type — cohérent avec le prix plancher, mais l'éventail des types du complexe est perdu (visible seulement dans la fixture/le titre).