SPB Git forge

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

232commits 1branches 0releases
172.9 MBsize
maindefault branch
2 days agolast push
HTML 98.9% Python 0.6%

[ka2] fix connecteur res_cogir: retry (3 essais, backoff 5/10 s) du sitemap via Scrapfly — un raté transitoire (contenu vide, vu 2026-08-29 ~18:05) produisait un faux « 0 trouvé ok » (médiane 256); après 3 essais infructueux le connecteur lève une erreur franche, idem si 0 annonce extraite des fiches. Testé: 250 annonces (médiane 256), sitemap et parsing des fiches intacts

Simon-Pierre Boucher committed 26 days ago (Aug 29, 2026) parent 0aa82cd

1 changed file +19 −3

modified louka/connectors/res_cogir.py +19 −3
@@ -19,6 +19,7 @@ from __future__ import annotations
19 19
20 20 import html as _html
21 21 import re
22 +import time
22 23
23 24 from bs4 import BeautifulSoup
24 25
@@ -160,10 +161,22 @@ class ResidencesCogirConnector(BaseConnector):
160 161 return out
161 162
162 163 def fetch(self) -> list[Listing]:
164 + # Un raté transitoire Scrapfly sur le sitemap (contenu vide, vu
165 + # 2026-08-29) produisait un faux « 0 trouvé ok » : retry court, puis
166 + # erreur franche plutôt qu'un zéro silencieux.
167 + urls: list[str] = []
168 + for attempt in range(3):
169 + xml = self._get_html(SITEMAP)
170 + urls = sorted({u for u in re.findall(r"<loc>([^<]+)</loc>", xml)
171 + if _RES_URL_RE.match(u) and "-ontario/" not in u})
172 + if urls:
173 + break
174 + if attempt < 2:
175 + time.sleep(5 * (attempt + 1))
176 + else:
177 + raise RuntimeError(
178 + "sitemap sans URL de résidence après 3 essais Scrapfly")
163 179 out: list[Listing] = []
164 − xml = self._get_html(SITEMAP)
165 − urls = sorted({u for u in re.findall(r"<loc>([^<]+)</loc>", xml)
166 − if _RES_URL_RE.match(u) and "-ontario/" not in u})
167 180 for url in urls:
168 181 try:
169 182 html = self._get_html(url)
@@ -171,4 +184,7 @@ class ResidencesCogirConnector(BaseConnector):
171 184 out.extend(self._parse_residence(url, html))
172 185 except Exception:
173 186 continue
187 + if not out:
188 + raise RuntimeError(
189 + f"0 annonce extraite des {len(urls)} fiches du sitemap")
174 190 return out
175 191