"""yesporn.vip — latest-vids browse scraper.
Dołączony 2026-05-27. Identyfikowany przez user audit jako "scraper-of-paysites"
(DogFart / HardX / TeamSkeet / Vixen / Brazzers content). Wcześniejszy theporndude
audit pomylił domeny: `yespornvip.com` (z theporndude rankingu) redirectuje przez
pdude.link do `porndudecams.com` affiliate spam — kanoniczna domena ma TLD `.vip`.
Czemu wart (parity z porndoe):
- **JSON-LD VideoObject** w każdym scene page: name, description, uploadDate
(ISO `YYYY-MM-DDTHH:MM:SS`), duration (ISO `PT0H39M00S`), thumbnailUrl
(BunnyCDN: `yesnn.b-cdn.net/contents/videos_screenshots/...`).
- **``** — durations już w sekundach
(fallback gdy ISO-duration parse fail).
- **``** — ISO 8601 z timezone, redundant z
JSON-LD uploadDate ale czystszy format.
- **``** (multiple) — kanoniczna lista tagów (np.
"Big Ass", "Threesome"). Główne źródło tagów; alternatywnie DOM ma `btn gold`
linki ale te miksują performerów/studio z tagami.
- **Studio + Performers**: oba w sekcji ``
(studio, singular) i `` (performerzy,
multiple). Slugi mają stable per-type salt (`*-i459s7` dla modeli, `*-7p72tp`
dla channels) — zachowują się jak hash z site-version, ale stabilne przez
sesje.
External_id strategia: `yespornvip:` (`/video/69841/...` → `69841`).
Slug w URL ma `*-npu57w` suffix który wygląda na stałe-per-page-type, ale id
numeryczne jest bezpieczniejsze gdyby site zmienił salt.
URL patterns:
- Listing: `/latest-updates/` (page 1) / `/latest-updates/N/` (page>1)
- Scene: `/video///` (id numeryczny, slug = title slug + 6-char salt)
- Studio: `/channels//`
- Performer: `/models//`
- Search: `/search//` (nie używane w browse-mode — można dorobić jako
osobny tryb dla performer-driven backfill jeśli będzie potrzeba)
Playback: download endpoint `/view_video_download.php?id=&format=<480|720|1080>`
z `data-attach-session="PHPSESSID"` — wymaga session cookie, więc nie direct mp4
z server-side. Plus jest `embedUrl: /embed/` w JSON-LD. Extractor →
`_vps_blocked_fallback.extract` (zgodne z pre-public bandwidth/anonymity policy):
mobile WebView fetcha embed z phone IP, INJECTED_JS scrape'uje `