goon/app/extractors/tubes/fpoxxx.py
goon-foss d521e6379d fix: porndish gral cudze filmy, zwiastuny i zastepcze filmy jako scena, reklama fpoxxx
porndish: cache serwisu oddawal dla kazdego adresu ten sam wpis, wiec ~40 tys.
scen gralo jeden z dwoch filmow. Strona z ?nc=<godzina> omija cache, kanoniczny
adres musi miec ten sam slug, inaczej 502.
sxyland: zwiastuny z kafelkow "podobne" (data-trailer) byly brane za film;
skasowany plik nowplay podstawial wspolny zastepczy film, teraz HosterDead.
fpoxxx: strona skasowanego filmu (no-player) to HosterDead, nie strona z
reklama w WebView.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:21:22 +02:00

31 lines
1.4 KiB
Python

"""fpo.xxx: kontrola usunietego filmu przed oddaniem strony do WebView.
Odtwarzanie idzie na telefonie (`fpoxxxResolver.ts`, KVS license_code z IP telefonu). Gdy
telefon nic nie znajdzie, backend oddawal sama strone jako hoster. Na stronie skasowanego
filmu (`<div class="no-player">`, "Deleted by the owner request", bez license_code) jedynym
wideo jest reklama tsyndicate, ktora WebView wylapywal i puszczal jako scene (zgloszenie
1ee12943, 2026-10-12: "fpoxxx daje reklamy zamiast scen"; ok. 10% zrodel fpoxxx to takie
strony). Tu taka strona to HosterDead, wiec zrodlo znika zamiast grac reklame.
"""
from __future__ import annotations
import logging
from app.extractors._fetch import fetch_tube_html
from app.extractors._models import HosterDead, StreamSource, TubePageError
from app.extractors.tubes import _vps_blocked_fallback
log = logging.getLogger(__name__)
def extract(page_url: str, *, timeout: float = 60.0) -> list[StreamSource]:
try:
html = fetch_tube_html(page_url, timeout=min(timeout, 20.0))
except TubePageError:
raise
except Exception as e:
log.info("fpoxxx: strona %s niepobrana (%s), oddaje do WebView", page_url, e)
return _vps_blocked_fallback.extract(page_url, timeout=timeout)
if 'class="no-player"' in html and "license_code" not in html:
raise HosterDead(f"fpoxxx {page_url}: film usuniety (no-player)")
return _vps_blocked_fallback.extract(page_url, timeout=timeout)