spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# sgiq — Société de Gestion Immobilière du Québec (SGIQ / Amiral)2- site: https://gestionimmobilierequebec.com/immeubles (+ fiches /fiche/<id> et endpoint AJAX /mod/act_p/ImmeubleAct.php)3- méthode: html + json-api (endpoint carte getMarkers)4- annonces: 147 → 1475- couverture après (sur 147 annonces): prix 100%, adresse 100%, dispo 99%, superficie 0%, commodités 100%6- fixture: ok · test: ok78## Champs extraits9- Liste paginée (7 pages) : titre/adresse, localité, catégorie, prix, image vignette.10- Endpoint JSON `POST ImmeubleAct.php a=getMarkers&form=dispo=` : **lat/lng structurés** (129/147, les autres fiches n'ont pas de marqueur exploitable) + type d'unité structuré (« 3-1-2 » → 3½) pour toutes les fiches.11- Fiches détail : description complète (bloc gauche seulement, sans mélanger les items techniques), commodités (« Chauffé : Oui », « Éclairé : Non », « 1 chambre », « 1 salle de bain », « 1 stationnement », « Chiens permis »), images (jusqu'à 30), **pets structuré** depuis l'icône animal dédiée (oui : 131, non : 16), secteur (« QUARTIER SAINTE-FOY »), disponibilité (« DISPONIBLE PRÉSENTEMENT », « PRÉSENTEMENT DISPONIBLE », « DISPONIBLE EN JUILLET », « Prise de possession flexible »).12- Téléphone dans la description → contact dérivé par finalize().1314## Champs indisponibles à la source15- Superficie (pi²) : jamais publiée (ni liste, ni fiche, ni JSON).16- Meublé : non exposé.17- Adresse postale complète avec code postal : seulement dans certains titres.1819## Fragilités20- La disponibilité vit uniquement dans le texte libre de la description (MAJUSCULES, tirets variables) — regex tolérante mais un nouveau phrasé peut échapper.21- Le cache détail est calé sur titre+prix+catégorie de la carte liste : si SGIQ modifie seulement la description (ex. nouvelle date de dispo) sans toucher le prix, la fiche ne sera pas re-téléchargée avant le prochain changement de prix.22- Endpoint AJAX non documenté (`ImmeubleAct.php`) : peut changer sans préavis ; le connecteur le traite en best-effort (try/except, aucun champ obligatoire n'en dépend).2324## Améliorations apportées25- **Cache BD des fiches** via `self.detail()` (clé = hash titre|prix|catégorie) + plafond `max_fetch_per_sync=160` de vraies requêtes (exception `_FetchBudget` pour ne jamais mettre en cache un payload vide) : sync passe de ~83 s (147 GET) à ~4 s quand rien n'a changé.26- **lat/lng** (0 % → 88 %) et type d'unité structuré via l'endpoint carte getMarkers (1 seul POST).27- **pets** (0 % → 100 %) depuis l'icône « Chiens permis » (img icon_animal), avec négation (« non/refusé/interdit ») → "non".28- **Disponibilité** 31 % → 99 % : ajout de « PRÉSENTEMENT », ordre inversé (« PRÉSENTEMENT DISPONIBLE »), « EN <mois> » sans année (alternation de mois FR).29- Description plus propre : bloc gauche de « Description et remarques » seulement (les items « Chauffé : Oui » restent dans amenities).3031## Échantillon avant/après32- 751-C avenue Myrand (3½, 948 $) — avant : dispo « », availability_date NULL, pets NULL, lat NULL. Après : dispo « Disponible présentement » → `now`, pets `oui`, lat 46.79107/-71.27273.33- 905-1G rue Liénard (4½, 1148 $) — avant : dispo vide ; après : « Disponible présentement » → `now`, pets `oui`, coordonnées présentes.34- Studios Limoilou « DISPONIBLE EN JUILLET » — avant non capté ; après dispo « Disponible en juillet » → date ISO du 1er juillet à venir.3536## Lacune générique de normalisation (à traiter dans normalize.py, non contournée ici)37- `_PETS_YES_RE` ne reconnaît pas « Chiens permis » / « CHIEN ACCEPTÉ » (singulier + « permis » non couverts) — ici compensé par l'icône structurée de la source, mais d'autres sources texte-seulement en profiteraient.38