Ajout de la source French-Stream (french-stream.lat) : séries et films

- Scraper DataLife Engine : recherche AJAX, fiches par saison, épisodes via
  ep-data.php (VF/VOSTFR), films via film_api.php, nouveautés /series/
- Config YAML externalisée (sélecteurs réparables sans coder)
- Domaines étendus : uqload.vc, vidzy.cc/.live
- 11 tests (126 au total)
This commit is contained in:
Roman
2026-09-25 14:08:10 +00:00
parent 89d9a98f80
commit 79a44297fd
7 changed files with 629 additions and 9 deletions
+6 -2
View File
@@ -42,15 +42,19 @@ async def fetch(
referer: str | None = None,
retries: int = 2,
headers: dict[str, str] | None = None,
data: dict[str, str] | None = None,
) -> str:
"""GET d'une page avec retries ; lève ScrapeError en cas d'échec définitif."""
"""GET (ou POST si `data` est fourni) avec retries ; lève ScrapeError en cas d'échec définitif."""
request_headers = dict(headers) if headers else {}
if referer:
request_headers.setdefault("Referer", referer)
last_error: Exception | None = None
for attempt in range(retries + 1):
try:
response = await get_client().get(url, headers=request_headers)
if data is None:
response = await get_client().get(url, headers=request_headers)
else:
response = await get_client().post(url, headers=request_headers, data=data)
response.raise_for_status()
return response.text
except httpx.HTTPStatusError as exc: