From 920740b76fad2ec6d648d813bdfb0fd22c117905 Mon Sep 17 00:00:00 2001 From: jtrzupek Date: Mon, 1 Jun 2026 10:36:33 +0200 Subject: [PATCH] fix(pornditt): server-side KVS resolve; extract shared _kvs helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pornditt is the same kt_player KVS engine as yespornvip: flashvars carry function/0/-obfuscated get_file urls + license_code, and the VPS reaches it (HTTP 200). It was on _vps_blocked_fallback (WebView), where the scrape grabbed the VAST preroll ad (trafostatic) instead of content (user bug "pornditt łapie reklamę zamiast video"). Extracted the verified yespornvip logic into app/extractors/tubes/_kvs.py (resolve_kvs: fetch page → decode function/0 get_file via kt_player algo → follow 302 in-session → portable CDN, multi-quality). yespornvip.py and new pornditt.py are now thin wrappers. Registry: porndittcom _vps_blocked_fallback → pornditt.extract. Verified on prod: pornditt → 720p/480p on twa.tgprn.com (portable, fresh-session 206 video/mp4); yespornvip still → 1080/720/480p on cdn5 (refactor intact). Backend-only, no OTA — mobile plays mp4+mobile_direct_ok natively with quality picker, zero WebView/ads. Note: a real-browser residential load shows MEDIA_ERR on the content (the page's own player flow / ad gating); server-side decode+follow sidesteps the player entirely, which is why it resolves cleanly. The original bug scene (40f118e1) has its video deleted on pornditt — verified on a live scene (156091). Co-Authored-By: Claude Opus 4.8 (1M context) --- app/extractors/__init__.py | 6 +- app/extractors/tubes/_kvs.py | 163 ++++++++++++++++++++++++++++ app/extractors/tubes/pornditt.py | 23 ++++ app/extractors/tubes/yespornvip.py | 168 ++--------------------------- 4 files changed, 198 insertions(+), 162 deletions(-) create mode 100644 app/extractors/tubes/_kvs.py create mode 100644 app/extractors/tubes/pornditt.py diff --git a/app/extractors/__init__.py b/app/extractors/__init__.py index 15ae652..6e93a17 100644 --- a/app/extractors/__init__.py +++ b/app/extractors/__init__.py @@ -33,6 +33,7 @@ from app.extractors.tubes import ( latestpornvideo, paradisehill, porn00, + pornditt, pornhat, porntrex, pornxp, @@ -82,7 +83,10 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = { # IP (potwierdzone Chrome DevTools MCP 2026-05-15). Mobile WebView + INJECTED_JS # (PlayerScreen.tsx:805) skanuje