Goon — self-hosted aggregator for adult-content scene metadata. Indexes scenes from TPDB, StashDB, and 30+ public adult tube sites. Cross-source deduplication via perceptual hash + Levenshtein distance. FastAPI backend + APScheduler worker + React Native (Expo) mobile client. FOSS, ad-free, donation-funded. See README for details.
34 lines
1.4 KiB
Python
34 lines
1.4 KiB
Python
"""Hoster fallback dla tubes które blokują VPS IP ale działają z residential IP.
|
|
|
|
Wzorzec (potwierdzony 2026-05-15 przez Chrome DevTools MCP live debug):
|
|
- xhamster.com: HLS via xplayer.js + obfuscated URLs w window.initials JSON
|
|
- pornditt: KVS kt_player + license_code decoder client-side → <video.src>
|
|
- fpo.xxx: KVS kt_player jak pornditt — identyczny pattern
|
|
- sxylandcom → xtapes.porn → reelshdd.com: iframe redirect chain do direct mp4
|
|
|
|
WSZYSTKIE działają z desktop/mobile residential IP. Tylko Hetzner Cloud VPS IP
|
|
blocked (Cloudflare-level dla xhamster, CDN token IP-bound dla KVS hostów).
|
|
|
|
Strategia: extractor zwraca `type='hoster'` z scene URL jako embed → mobile
|
|
WebView fallback. WebView ma residential ISP IP, INJECTED_JS w PlayerScreen.tsx
|
|
skanuje DOM co 1s (linia 805) wyciągając `<video>.src` + XHR/fetch m3u8 — to
|
|
łapie URL po decode-ie player JS i posyła do RN przez postMessage. ExoPlayer
|
|
swap do native player z prawdziwym URL.
|
|
|
|
Bez tego fallbacku użytkownik widzi błąd "chwilowy problem z hosterem" (503)
|
|
zamiast działającego playera.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from app.extractors._models import StreamSource
|
|
|
|
|
|
def extract(page_url: str, *, timeout: float = 60.0) -> list[StreamSource]:
|
|
return [
|
|
StreamSource(
|
|
link=page_url,
|
|
quality=None,
|
|
type="hoster",
|
|
referer=page_url,
|
|
)
|
|
]
|