From 3e8a2219810c37b4432f3cbe4d523f49bc030eec Mon Sep 17 00:00:00 2001 From: jtrzupek Date: Tue, 9 Jun 2026 09:35:58 +0200 Subject: [PATCH] feat(extractors): native HLS for xhamster; hqporner flyflv player xhamster: move from WebView fallback to server-side native HLS. The scene page is fetchable server-side and the xhcdn master m3u8 (variants + segments) is time-bound, not IP-bound (verified cross-IP), so mobile plays the HLS direct with zero proxy bandwidth. New tubes/xhamster.py pulls the master m3u8 from SSR HTML and returns type='m3u8' mobile_direct; registry remaps xhamstercom off _vps_blocked_fallback. hqporner: add flyflv to the player-iframe host whitelist. hqporner rotated some players to flyflv.com; the CDN host was already whitelisted but the iframe host was not, so those scenes returned no stream. Co-Authored-By: Claude Opus 4.8 --- app/extractors/__init__.py | 12 +++-- app/extractors/tubes/hqporner.py | 2 +- app/extractors/tubes/xhamster.py | 87 ++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 app/extractors/tubes/xhamster.py diff --git a/app/extractors/__init__.py b/app/extractors/__init__.py index 7ee6df4..f7604dc 100644 --- a/app/extractors/__init__.py +++ b/app/extractors/__init__.py @@ -39,6 +39,7 @@ from app.extractors.tubes import ( pornhat, porntrex, sxyprn, + xhamster, yespornvip, ) @@ -84,10 +85,6 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = { # 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