Skip to content
# logisbourg — Logisbourg
- Liste (tableau ASP) : grandeur, date de dispo (attribut TITLE), étage, prix,
inclusions (icônes ALT : chauffage, eau chaude, électricité, semi-meublé).
- Fiche appartement.asp (mise en cache via
self.detail, clé = hash de la
ligne du tableau, plafond 80 vraies requêtes/sync) :
- adresse complète AVEC no d'unité (
nomComplexeAdresse : « 4855, 6e Avenue
Ouest #403 ») — nouveau ;
- lat/lng structurés (
google.maps.LatLng(...)) — nouveau ;
- superficie structurée (encadré
#superficie_encadre) -> area_sqft
explicite (plus fiable que le 1er « NNN pi » de la page) — nouveau ;
- téléphone du bureau de location (lien
tel: du formulaire de visite) ->
details.contact.phone — nouveau ;
- caractéristiques de l'appartement : ALT des icônes + texte visible
(« Balcon 60 pi² », « Entrées laveuse/sécheuse incluses »,
« Un stationnement extérieur », « Revêtements : … ») ;
- caractéristiques de l'immeuble (items
<li> : Bell Fibe, Intercom,
service d'urgence 24/7…) en commodités + texte en description ;
- description enrichie : paragraphe de présentation du complexe
(
#DescriptionComplexe) + caractéristiques immeuble + services
optionnels (ex. « Stationnement extérieur au coût de 50$/mois » ->
parking.price dérivé par finalize) — avant, seule la section
« Caractéristiques immeuble » était captée ;
- images (galerie de l'immeuble), comme avant.
# Champs indisponibles à la source
- Animaux (aucune mention sur le site) ->
pets = None.
- Meublé : seul « semi-meublé » (poêle + réfrigérateur inclus) est exposé via
l'icône ALT « Poêle et réfrigérateur inclus » ; pas d'unité meublée.
- Pas d'API JSON ni de sitemap exploitable (site ASP old-school) ; pas de
superficie sur la page liste (fiche seulement).
# Fragilités
- HTML ASP non structuré : parsing par regex sur les classes de cellules
(
Grandeur, DateDispo, Prix…) — un changement de gabarit casserait le
connecteur (le test fixture le détecterait).
- Le serveur n'annonce pas de charset : l'UTF-8 est forcé (
_get_text).
- Adresses en exposants (
6<SUP>e</SUP>) recousues par _fix_sup.
- Clé de cache des fiches versionnée (
v3:) : bump nécessaire si l'extraction
de la fiche change, sinon les anciens payloads restent servis.
# Améliorations apportées
- Fiches désormais servies par
self.detail() (cache BD) : ~1 requête/sync en
régime stable au lieu de 10 fetches systématiques ; plafond max_details=80
compté DANS fetch_fn (les hits de cache ne comptent pas).
- Nouveaux champs : lat/lng,
area_sqft structuré, no d'unité dans l'adresse,
details.contact.phone, revêtements, items immeuble en commodités,
description 3 volets (complexe + immeuble + services optionnels).
- Conservation des ALT d'icônes (« Entrées laveuse/sécheuse incluses ») en plus
du texte visible : garde la détection
washer_dryer_hookup de normalize.
# Échantillon avant/après
- Avant :
4855, 6e Avenue Ouest — 4½ | 1215$ | dispo 2026-09-01 | 990 pi² (dérivé du texte) | pas de lat/lng | pas de contact | desc = caractéristiques immeuble seulement
- Après :
4855, 6e Avenue Ouest #403 — 4½ | 1215$ | dispo 2026-09-01 | 990 pi² (structuré) | lat 46.841064 / lng -71.264786 | contact 418-623-4006 | details : hookup laveuse-sécheuse, balcon, rangement, stationnement ext., étage 3 | desc = présentation du complexe + immeuble + services optionnels
# Lacune générique de normalisation (à traiter dans normalize.py, pas ici)
- « Entrée lave-vaisselle incluse » (le branchement, pas l'appareil) est classé
appliances.dishwasher = true par _AMENITY_RULES — il faudrait une règle
dishwasher_hookup analogue à washer_dryer_hookup.
- « Entrées lave-vaisselle et laveuse/sécheuse inclus » (formulation combinée)
n'est pas reconnu par le motif hookup
entrees? (?:de )?laveuse — couvert ici
uniquement parce que l'ALT séparé « Entrées laveuse/sécheuse incluses » est
aussi émis.