SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
38 min agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%

[ka6] connecteur cgi: maintenance planifiée de la plateforme Njoyn (2026-09-05 ~22h30 EDT, tous les tenants *.njoyn.com ET domaines personnalisés redirigés vers maintenance.njoyn.com/platform-maintenance, page ~29 ko) — détection explicite de la page de maintenance dans _fetch_listing de la plateforme njoyn: échec immédiat sans retry ni crédit Scrapfly gaspillé, message 'plateforme Njoyn en maintenance planifiée' dans sync_log, offres conservées (292 actives cgi); le volume reviendra de lui-même à la fin de la fenêtre (retour prévu type: dimanche ~21h)

Simon-Pierre Boucher committed 18 days ago (Sep 6, 2026) parent a3f3550

1 changed file +15 −1

modified jobka/connectors/njoyn.py +15 −1
@@ -5,7 +5,7 @@
5 5 # Fichier : jobka/connectors/njoyn.py
6 6 # Rôle : Classe de plateforme Njoyn (CGI) — très répandu au secteur public
7 7 # québécois (santé, villes, sociétés d'État). HTML serveur + jeton.
8 −# Créé : 2026-08-18 Modifié : 2026-09-04
8 +# Créé : 2026-08-18 Modifié : 2026-09-06
9 9 # =============================================================================
10 10 """Plateforme Njoyn (CGI).
11 11
@@ -51,6 +51,12 @@ _TR_RE = re.compile(r"<tr[^>]*>(.*?)</tr>", re.S | re.I)
51 51 _TD_RE = re.compile(r"<td[^>]*>(.*?)</td>", re.S | re.I)
52 52 _TOTAL_RE = re.compile(
53 53 r"(?:R[ée]sultats de (?:la )?recherche|Search results)\s*\((\d+)\)", re.I)
54 +# Maintenance planifiée de la plateforme entière (constatée 2026-09-05 ~22h30
55 +# EDT, typiquement vendredi soir → dimanche ~21h) : TOUS les tenants — domaines
56 +# *.njoyn.com ET personnalisés — redirigent vers
57 +# maintenance.njoyn.com/.../platform-maintenance.html (~29 ko).
58 +_MAINT_RE = re.compile(
59 + r"Platform maintenance \| Njoyn|platform-maintenance", re.I)
54 60
55 61
56 62 def _txt(s: str) -> str:
@@ -268,6 +274,14 @@ class NjoynConnector(BaseConnector):
268 274 une fois puis on lève une erreur (sync en échec, pas « 0 trouvé »)."""
269 275 for attempt in range(2):
270 276 page = self._html(self._url("joblisting"))
277 + if _MAINT_RE.search(page):
278 + # Maintenance plateforme : inutile de retenter dans 10 s (la
279 + # fenêtre dure des heures) — échec immédiat et explicite, les
280 + # offres en base restent actives.
281 + raise RuntimeError(
282 + f"njoyn {self.source_id}: plateforme Njoyn en maintenance "
283 + f"planifiée (redirection maintenance.njoyn.com) — sync "
284 + f"avorté, offres conservées")
271 285 items = (self._parse_articles(page) or self._parse_table(page)
272 286 or self._parse_rows(page))
273 287 if items or re.search(r"xweb\.asp", page, re.I):
274 288