fix(perverzija): powrot na natywny HLS + passthrough manifestu
Zmiana z 18.08 przestawila perverzije na embed-iframe na podstawie jednej strony, ktora akurat miala mixdrop. Probka 30 stron: 90% dalej stoi na xtremestream, a xs1.php oddaje poprawny #EXTM3U (8/8 na szesciu rotujacych subdomenach). Bledy "Input does not start with #EXTM3U" braly sie ze zlego Referera, ktory zwraca 403 z HTML-em, nie ze zmiany protokolu. - registry: perverzijacom wraca na natywny ekstraktor - brak xtremestream -> fallback na embed-iframe (mixdrop, playhydrax) - mobile_direct_ok: przez VPS idzie sam manifest, segmenty telefon ciagnie prosto z CDN (zweryfikowane cross-IP: 200, sync 0x47 z domowego lacza) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
ae3c4ac9bb
commit
cddf60acc2
2 changed files with 31 additions and 10 deletions
|
|
@ -219,13 +219,14 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = {
|
||||||
# 0dayxx + pornditt + pornhat, USUNIĘTE CAŁKOWICIE 2026-06-22 (user request): orphan
|
# 0dayxx + pornditt + pornhat, USUNIĘTE CAŁKOWICIE 2026-06-22 (user request): orphan
|
||||||
# factories (0-0.2% canonical match), zastępujemy lepszymi źródłami. Dane skasowane.
|
# factories (0-0.2% canonical match), zastępujemy lepszymi źródłami. Dane skasowane.
|
||||||
# CF-protected tube, curl_cffi w fetch_tube_html bypassa JA3, embed-iframe pattern.
|
# CF-protected tube, curl_cffi w fetch_tube_html bypassa JA3, embed-iframe pattern.
|
||||||
# perverzija: BYŁ natywny HLS przez xtremestream/xs1.php (2026-07-28), ale strona
|
# perverzija: natywny HLS przez xtremestream/xs1.php. Uwaga na regresję z 2026-08-18:
|
||||||
# przeszła na mixdrop (2026-08-18: 520 błędów "Input does not start with #EXTM3U",
|
# przestawiliśmy to wtedy na embed-iframe/mixdrop na podstawie JEDNEJ strony, która
|
||||||
# zero sukcesów, bo xs1.php oddaje już HTML zamiast manifestu). Teraz embed-iframe
|
# akurat miała mixdrop. Sprawdzenie 8 losowych stron (2026-08-20) daje 8/8 działających
|
||||||
# wyłuskuje mixdrop i oddaje type='hoster' → telefon resolwuje w WebView (mixdrop
|
# manifestów xs1.php, na SZEŚCIU różnych subdomenach (perv, j2, moviekh, pervl1,
|
||||||
# gejtuje reCAPTCHA v3 na IP datacenter, przechodzi dopiero z residential). Natywny
|
# pervl3, pervm1) — host rotuje, regex w `perverzija.py` to obejmuje. Warunkiem 200 jest
|
||||||
# ekstraktor `perverzija.py` zostaje w drzewie, gdyby xtremestream wrócił.
|
# Referer równy URL-owi playera; zły Referer daje 403 z HTML-em i to on wyglądał jak
|
||||||
"perverzijacom": _embed_iframe.extract,
|
# "Input does not start with #EXTM3U". Zanim to znowu przełączysz: sprawdź PRÓBKĘ stron.
|
||||||
|
"perverzijacom": perverzija.extract,
|
||||||
# Special: WebView-only (Yii2 session-bound player).
|
# Special: WebView-only (Yii2 session-bound player).
|
||||||
"paradisehillcc": paradisehill.extract,
|
"paradisehillcc": paradisehill.extract,
|
||||||
# PornDoe, dołączony 2026-05-21 (theporndude audit). Stream URL nie inline w
|
# PornDoe, dołączony 2026-05-21 (theporndude audit). Stream URL nie inline w
|
||||||
|
|
|
||||||
|
|
@ -52,8 +52,18 @@ def extract(page_url: str, *, timeout: float = 60.0) -> list[StreamSource] | Non
|
||||||
|
|
||||||
m = _PLAYER_IFRAME_RE.search(html)
|
m = _PLAYER_IFRAME_RE.search(html)
|
||||||
if not m:
|
if not m:
|
||||||
log.info("perverzija: brak iframe xtremestream na %s", page_url)
|
# ~10% katalogu siedzi na innym playerze niż xtremestream (próbka 30 stron
|
||||||
return None
|
# 2026-08-20: 27 xtremestream, 1 mixdrop, 1 playhydrax, 1 nie do pobrania).
|
||||||
|
# Oddajemy je generycznemu embed-iframe: wychodzi type='hoster', czyli telefon
|
||||||
|
# resolwuje je po swojej stronie, zamiast żeby scena wyglądała na martwą.
|
||||||
|
log.info("perverzija: brak xtremestream na %s, probuje embed-iframe", page_url)
|
||||||
|
from app.extractors.tubes import _embed_iframe
|
||||||
|
|
||||||
|
try:
|
||||||
|
return _embed_iframe.extract(page_url, timeout=timeout)
|
||||||
|
except Exception as e:
|
||||||
|
log.info("perverzija: embed-iframe fallback tez padl %s: %s", page_url, e)
|
||||||
|
return None
|
||||||
|
|
||||||
host, vid = m.group("host"), m.group("id")
|
host, vid = m.group("host"), m.group("id")
|
||||||
player_url = f"https://{host}/player/index.php?data={vid}"
|
player_url = f"https://{host}/player/index.php?data={vid}"
|
||||||
|
|
@ -66,7 +76,17 @@ def extract(page_url: str, *, timeout: float = 60.0) -> list[StreamSource] | Non
|
||||||
quality=f"{q}p",
|
quality=f"{q}p",
|
||||||
type="m3u8",
|
type="m3u8",
|
||||||
referer=player_url,
|
referer=player_url,
|
||||||
raw={"extractor": "perverzija", "player": player_url, "q": q},
|
raw={
|
||||||
|
"extractor": "perverzija",
|
||||||
|
"player": player_url,
|
||||||
|
"q": q,
|
||||||
|
# Segmenty NIE są IP-bound i nie potrzebują Referera: segment pobrany
|
||||||
|
# z domowego łącza po manifeście wziętym na VPS oddał 200 i 76 kB
|
||||||
|
# zaczynające się od 0x47 (sync MPEG-TS), test 2026-08-20. Dzięki temu
|
||||||
|
# przez VPS idzie sam manifest (~16 kB) przez /proxy/hls, a segmenty
|
||||||
|
# telefon ciągnie prosto z xspcdn. Bez tej flagi całe wideo szło proxy.
|
||||||
|
"mobile_direct_ok": True,
|
||||||
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return out or None
|
return out or None
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue