[ka6] fix connecteur boutiquesoha.com: le repli Scrapfly échouait en 422 ERR::SCRAPE::COUNTRY_NOT_AVAILABLE_FOR_TARGET (cible restreinte aux proxys us, transport forçait country=ca) — retry avec le pays permis extrait du message d'erreur; 464 produits en direct ET via Scrapfly (médiane 464)
1 changed file +16 −0
modified
fabrika/connectors/scrapfly.py
+16 −0
@@ -10,6 +10,7 @@ from __future__ import annotations | ||
| 10 | 10 | |
| 11 | 11 | import json |
| 12 | 12 | import os |
| 13 | +import re | |
| 13 | 14 | import threading |
| 14 | 15 | import time |
| 15 | 16 | |
@@ -39,6 +40,21 @@ def scrapfly_get(url: str, render_js: bool = False, timeout: int = 150) -> tuple | ||
| 39 | 40 | if render_js: |
| 40 | 41 | params["render_js"] = "true" |
| 41 | 42 | r = requests.get(API, params=params, timeout=timeout) |
| 43 | + if r.status_code == 422: | |
| 44 | + # certaines cibles restreignent les pays de proxy Scrapfly (ex. | |
| 45 | + # boutiquesoha.com → us seulement) : l'erreur 422 | |
| 46 | + # ERR::SCRAPE::COUNTRY_NOT_AVAILABLE_FOR_TARGET liste les pays permis, | |
| 47 | + # on réessaie avec le premier au lieu d'échouer. | |
| 48 | + try: | |
| 49 | + err = r.json().get("result", {}).get("error") or {} | |
| 50 | + except ValueError: | |
| 51 | + err = {} | |
| 52 | + if err.get("code") == "ERR::SCRAPE::COUNTRY_NOT_AVAILABLE_FOR_TARGET": | |
| 53 | + m = re.search(r"restricted to following countries:\s*([a-zA-Z, ]+)", | |
| 54 | + err.get("message", "")) | |
| 55 | + if m: | |
| 56 | + params["country"] = m.group(1).split(",")[0].strip().lower() | |
| 57 | + r = requests.get(API, params=params, timeout=timeout) | |
| 42 | 58 | r.raise_for_status() |
| 43 | 59 | res = r.json().get("result", {}) |
| 44 | 60 | content = res.get("content") or "" |
| 45 | 61 | |