From fbfe2b2bf4d80f6c9bf54a8ca7be1790bda61f7c Mon Sep 17 00:00:00 2001 From: jtrzupek Date: Sun, 31 May 2026 22:33:10 +0200 Subject: [PATCH] fix(yespornvip): server-side KVS resolve to portable CDN, drop WebView fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit yespornvip was on the WebView fallback, which loaded the ad-heavy host page; the INJECTED_JS scrape grabbed the preroll ad video (bkcdn.net, ~30s) instead of the content, so the native player showed a 30s ad. The get_file content url is also session/cookie-bound (410 for a cookieless ExoPlayer request). Key finding: the VPS now reaches yesporn.vip (HTTP 200 — unblocked, same as porntrex got 2026-05-22), so we can resolve server-side like porntrex instead of relying on the browser. KVS flashvars carry function/0/-obfuscated get_file urls + license_code; decode the hash with the kt_player algorithm (yt-dlp KVS algo, verified to reproduce kt_player's output), then follow each quality's get_file 302 in the same curl_cffi session → final cdn5 url. That url is time-bound signed but NOT IP/cookie-bound — verified portable cross-IP (VPS-resolved url fetched from a different IP → 206 video/mp4). New app/extractors/tubes/yespornvip.py returns 480p/720p/1080p portable CDN urls; registry switched from _vps_blocked_fallback → yespornvip.extract. Mobile plays direct natively with a working quality picker — zero WebView, zero ads, zero proxy. Verified on prod (3 cdn5 sources) and emulator (quality picker → 1080p native decode at 1920px, no WebView, no ad). Backend-only; no OTA needed. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/extractors/__init__.py | 19 +-- app/extractors/tubes/yespornvip.py | 201 +++++++++++++++++++++-------- 2 files changed, 155 insertions(+), 65 deletions(-) diff --git a/app/extractors/__init__.py b/app/extractors/__init__.py index 4a0c340..15ae652 100644 --- a/app/extractors/__init__.py +++ b/app/extractors/__init__.py @@ -116,18 +116,13 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = { # mobile dostaje proxy URL od razu, ExoPlayer gra bez WebView. "porn00org": porn00.extract, "pornxpph": _vps_blocked_fallback.extract, - # yesporn.vip — KVS engine. Initial extractor probował dwóch ścieżek z - # flashvars, oba okazały się ślepe (2026-05-30 verify): - # - `video_url` (`/get_file/7/`) wymaga PHPSESSID z embed page session; - # mobile fetch bez cookies → 404. - # - `event_reporting2` (`/get_file/1/`) zwraca 200 OK ale `Content-Type: - # image/gif` — to 1px analytics tracker, NIE video. - # Switch na WebView fallback: mobile loaduje embed w WebView z phone IP, - # kt_player JS decoduje URL inside browser context (cookies + session set - # properly), INJECTED_JS scrapuje `