From aac6b10d77b3f58d8c5c976e4fcbfaaead7d9b00 Mon Sep 17 00:00:00 2001 From: jtrzupek Date: Wed, 27 May 2026 15:10:47 +0200 Subject: [PATCH] fix(extractor/hqporner): wire dedicated extractor + reject ad iframes/CDNs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registry mapowanie `hqpornercom` -> `_vps_blocked_fallback.extract` zwracało scene page URL do mobile WebView. Page ma 3 ad-iframes (adtng/goaserv/ mavrtracktor) + pop-under triggery -> user widział reklame zamiast video. Powrot do `hqporner.extract` (multi-quality bigcdn.cc mp4 + force_proxy=True). Plus hardening: iframe regex bound do `
...
`, whitelist hostow embed (mydaddy.cc/hqwo.cc) i CDN mp4 (bigcdn/hqwo/flyflv). --- app/extractors/__init__.py | 19 +++++++----- app/extractors/tubes/hqporner.py | 53 ++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/app/extractors/__init__.py b/app/extractors/__init__.py index 5ff41d1..f0d1dc5 100644 --- a/app/extractors/__init__.py +++ b/app/extractors/__init__.py @@ -51,14 +51,17 @@ log = logging.getLogger(__name__) # embed-iframe extractor (page → /e/ iframe → P.A.C.K.E.R. unpack). Custom kod # tylko tam gdzie tube ma niestandardowy schemat (eporner XHR, sxyprn URL transform). _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = { - # hqporner — CDN URLs IP-bound do VPS, force_proxy wymusza ruch przez VPS proxy. - # 2026-05-20 (pre-public): bandwidth + anonimowość VPS > UX. Switch na WebView - # fallback — mobile pobiera embed iframe z phone IP, FluidPlayer JS decoduje - # mp4, ExoPlayer odtwarza direct z phone CDN session. **0 VPS bandwidth + VPS - # IP nie ujawniony** (mobile nie łączy się z VPS proxy URL). - # Trade-off: WebView ma 1 extra step (page → player JS) ale bez popup-ads jak - # hqporner.com bo INJECTED_JS w PlayerScreen.tsx blokuje + scrape `.src`. - "hqpornercom": _vps_blocked_fallback.extract, + # hqporner — dedicated extractor zwraca multi-quality `` mp4 URLs + # (bigcdn.cc / hqwo.cc / flyflv) z `force_proxy=True`. CDN URLs IP-bound do + # VPS, więc playback.py routuje przez proxy — mobile dostaje quality picker + # + natywny ExoPlayer, bez WebView. + # Bug-report e8ddd8d4: WebView fallback (`_vps_blocked_fallback`) ładował + # hqporner.com scene page w WebView, ale ta strona ma ad-iframes (adtng, + # goaserv, mavrtracktor) + pop-under-triggery → user klikał i widział + # reklamę zamiast video. INJECTED_JS w PlayerScreen.tsx nie chwytał + # popupów dośc szybko. Powrót do natywnego = `` mp4 picker omija + # tę ścieżkę całkowicie. + "hqpornercom": hqporner.extract, "epornercom": eporner.extract, "sxyprncom": sxyprn.extract, # Mainstream tubes — yt-dlp diff --git a/app/extractors/tubes/hqporner.py b/app/extractors/tubes/hqporner.py index 94f9061..49fb227 100644 --- a/app/extractors/tubes/hqporner.py +++ b/app/extractors/tubes/hqporner.py @@ -32,10 +32,25 @@ from app.extractors.hoster import extract_stream_from_hoster log = logging.getLogger(__name__) -_IFRAME_RE = re.compile( - r']+id=["\']?playerWrapper["\']?[^>]*>.*?]+src=["\']([^"\']+)', +# Wyciągamy zawartość `
` osobno, potem szukamy +# `