Skip to content
# forsa — Gestion immobilière Forsa
- site: https://www.gestionforsa.com (Squarespace)
- méthode: html plat — sections « liste » de /logements-disponibles (1 requête/sync) + fiches détail par unité (cache BD, budget 20)
- annonces: 12 (le chalet à la journée de St-Adolphe-d'Howard est exclu : location saisonnière 85-100 $/jour, pas un bail résidentiel)
- couverture (sur 12 annonces): prix 100%, adresse 100%, dispo 100%, type 100%, ville 100%, images 100%, description 100% — superficie/GPS jamais publiés
- fixture: ok (13 requêtes : liste + 12 détails) · test: ok (2 verts)
- Page /logements-disponibles : 3 sections Squarespace « liste »
(2½-3½ / 4½-5½ / maisons de ville & chalet), cartes
li.list-item :
- titre
list-item-content__title « 2 1/2, Joliette - MAINTENANT » →
unit_type (préfixe, via normalize_unit_type), ville (2e segment) et
availability (après le tiret ou la 2e virgule, texte source :
« MAINTENANT », « Septembre », « 1er DÉCEMBRE ») ;
- description de la carte : 1er paragraphe = adresse civique
(« 222, rue Lajoie Sud, app. 12 »), paragraphe avec $ = price_label
brut (« 1 290 $ par mois (2 stationnements) ») ; l'espace de milliers
est retiré avant parse_price ;
- bouton « Détails » → page par unité ; le slug d'URL (ex.
222-12lajoiesud) sert d'external_id stable.
- Villes réelles tirées du titre de chaque carte, abréviations développées
(St-Gabriel → Saint-Gabriel, St-Charles-Borromée → Saint-Charles-Borromée) ;
une unité est à Montréal (2580A Sherbrooke Est) — conservée telle quelle.
- Fiche détail (cache BD,
self.detail) : bloc HTML le plus long =
description riche (ENVIRONNEMENT / LOGEMENT / IMMEUBLE, Inclusions,
Exclusions — textmine structure au finalize()) + galerie complète
(img squarespace-cdn, max 30, paramètre ?format= retiré).
- robots.txt : le groupe
User-agent: * autorise les pages HTML mais
interdit /api/ et les vues JSON → aucun appel à l'API Squarespace,
HTML seulement.
# Champs indisponibles à la source
- Superficie, GPS, animaux/meublé structurés : jamais publiés (les
inclusions restent dans la description, structurées par textmine).
- Pas de pagination : tout le parc annoncé tient sur une page.
# Fragilités
- external_id = slug de page créé à la main par l'agence : une annonce
republiée sous un autre slug devient une nouvelle annonce (acceptable,
le slug est stable pendant la vie de l'annonce).
- Format du titre non strictement uniforme (« - » vs « , » avant la
dispo) : le parseur accepte les deux, mais un format inédit laisserait
availability vide.
- Le prix vit dans un paragraphe libre de la carte : si l'agence déplace
le $ dans un autre paragraphe, l'adresse et le prix pourraient être
intervertis (le 1er § sans $ = adresse).
# Échantillon
- 222-12lajoiesud : 2½, Joliette, 595 $/mois (eau chaude incluse),
MAINTENANT, 222 rue Lajoie Sud app. 12, 10 photos.
- 165-8maskinonge : 4½, Saint-Gabriel, 1 290 $/mois (2 stationnements),
165 rue Maskinongé app. 8, 30 photos.
- 2580asherbrookeest : 5½, Montréal, 1 950 $/mois, 2580A rue Sherbrooke
Est, 23 photos.