SPB Git forge

spb/immo-ka

Public

Immo-Ka — agrégateur des propriétés à vendre au Québec (73 connecteurs, ~40 000 annonces, React+FastAPI)

112commits 1branches 0releases
125.4 MBsize
maindefault branch
13 days agolast push
Python 47.5% HTML 27.9% TypeScript 15.5% CSS 7.2% JavaScript 2%

[ka2] fix connecteur realtor_ag_ca: coupures réseau transitoires vers api.scrapfly.io (ConnectTimeout 180 s, 2 syncs de suite) — un seul raté tuait les ~11 appels du fetch (0 fiche). Retry ×3 avec pause (20/40 s) sur ConnectionError/Timeout dans scrapfly(). Test réel : 2168 fiches (médiane 2160)

Simon-Pierre Boucher committed 13 days ago (Sep 13, 2026) parent e708452

1 changed file +18 −0

modified immoka/connectors/realtor_ca.py +18 −0
@@ -36,6 +36,9 @@ from __future__ import annotations
36 36
37 37 import json
38 38 import os
39 +import time
40 +
41 +import requests
39 42
40 43 from . import _detailutil as du
41 44 from .base import BaseConnector
@@ -81,6 +84,21 @@ class RealtorCaConnector(BaseConnector):
81 84 # external_id -> Id interne Realtor (PropertyID requis par l'API détail)
82 85 self._prop_ids: dict[str, str] = {}
83 86
87 + def scrapfly(self, url: str, **kw) -> dict:
88 + # Coupures réseau transitoires vers api.scrapfly.io (ConnectTimeout
89 + # 180 s observé 2×, 2026-09-13) : sans retentative, un seul raté tue
90 + # les ~11 appels du sync → 0 fiche. On retente avec pause avant
91 + # de laisser l'exception remonter.
92 + last: Exception | None = None
93 + for attempt in range(3):
94 + try:
95 + return super().scrapfly(url, **kw)
96 + except (requests.ConnectionError, requests.Timeout) as exc:
97 + last = exc
98 + if attempt < 2:
99 + time.sleep(20 * (attempt + 1))
100 + raise last # type: ignore[misc]
101 +
84 102 def _search(self, shard: tuple, page: int) -> dict:
85 103 _, south, west, north, east = shard
86 104 body = "&".join(f"{k}={v}" for k, v in {
87 105