diff --git a/app/extractors/__init__.py b/app/extractors/__init__.py index 0438e5f..bbba4af 100644 --- a/app/extractors/__init__.py +++ b/app/extractors/__init__.py @@ -34,6 +34,7 @@ from app.extractors.tubes import ( paradisehill, porn00, pornhat, + porntrex, pornxp, sxyprn, ) @@ -69,11 +70,10 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = { "xvideoscom": _ytdlp.extract, "xnxxcom": _ytdlp.extract, "youporncom": _ytdlp.extract, - # porntrex KVS get_file — `kt_ips=` cookie + single-use token (410 po reuse). - # CDN IP-bound do VPS, mobile direct = 403. Switch na _vps_blocked_fallback: - # mobile WebView z phone IP → KVS player JS dekoduje video.src → INJECTED_JS scrape. - # 137k scen oszczędzone z VPS bandwidth (largest single saving). - "porntrexcom": _vps_blocked_fallback.extract, + # porntrex KVS — 2026-05-22 VPS znów dociera (HTTP 200). Dedykowany extractor: + # flashvars `video_url` → `get_file` 302 → CDN time-bound signed URL + # (`expires`+`md5`, NIE IP-bound) → mobile gra direct, zero VPS bandwidth. + "porntrexcom": porntrex.extract, # VPS-blocked tubes — KVS / Cloudflare blokuje Hetzner IP, ale działają z residential # IP (potwierdzone Chrome DevTools MCP 2026-05-15). Mobile WebView + INJECTED_JS # (PlayerScreen.tsx:805) skanuje