goon/app/connectors/__init__.py
goon-foss 37f8eb1762
Some checks are pending
Backend tests / test (push) Waiting to run
fix(movies): obsada i studio z motywu "vid", pandamovies z powrotem
Mangoporn, streamporn.li i pandamovies przeszly w pazdzierniku na nowy motyw:
obsada tylko w JSON-LD, studio, rok i gatunki w chipach bez rel="tag" (czasem
bez koncowego ukosnika). Parser po cichu przestal czytac obsade i studio, a
mangoporn dostawal jedynie tag "Porn Movies". Pandamovies dziala znowu pod
pandamovies.org, wiec wraca do ingestu. Skrypty: pelne zaciagniecie zrodla
po przerwie i uzupelnienie metadanych filmow z pazdziernika.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 10:57:32 +02:00

78 lines
4.3 KiB
Python

"""Connector registry helpers.
Lazy factories, importy connectorów wykonują się dopiero w `get_movie_connectors()`
żeby uniknąć circular imports (modeles/db). Każdy entry: `(name, class)` w porządku
ingestu (primary FIRST, mirrory potem, `resolve_movie` wtedy ma do czego dokleić
mirror playback sources).
## Jak dodać nowe movie site
1. Napisz subclass `DooplayConnector` w `app/connectors/dooplay.py` (jeśli site używa
dooplay/PsyPlay WP theme), wystarczy `name` + `base_url`. Jeśli inny theme,
napisz osobny connector implementujący `BaseMovieConnector.fetch_movies()`.
2. Dodaj entry do `_MOVIE_CONNECTORS` poniżej.
3. Backend job `_job_movie_ingest` w `app/scheduler/jobs.py` automatycznie weźmie
nowy connector przy następnym tick (24h domyślnie).
4. Do ad-hoc backfillu: `python -m app.scheduler.worker --once --strategy=movies
--performers=<nowa_nazwa>`.
## Czemu paradisehill first
Paradisehill jest jedynym sourcem z chapter markerami i pełnym metadata (director,
rating, country) → idealnie kanoniczny. Dooplay mirrory rzadko mają chaptery i
release_year zwykle pusty. Resolver `resolve_movie` po title-similarity matchuje
mirror → primary paradisehill, dodając tylko playback sources (mangoporn:luluvid,
:voe, …) które rozpakowują się na bezpośredni stream URL przez
`extract_stream_from_hoster`.
"""
from __future__ import annotations
def get_movie_connectors() -> list[tuple[str, type]]:
"""Zwraca listę (name, ConnectorCls) tuples w kolejności ingestu.
Lazy import, uniknięcie circular import bo connectory zaczepiają db/models.
"""
from app.connectors.dooplay import (
MangopornConnector,
PandamoviesConnector,
StreampornVipConnector,
)
from app.connectors.freeomovie import FreeoMovieConnector
from app.connectors.paradisehill import ParadisehillConnector
from app.connectors.xtapes import XtapesConnector
from app.connectors.yourdailypornmovies import YourDailyPornMoviesConnector
# Kolejność ingestu: paradisehill FIRST (canonical primary, mirrory się do
# niego przyklejają), potem mangoporn (jedyny mirror z realnym new-content,
# 72 nowych 2026-05-28; streamporn/pandamovies zwracają stale 0 new), na końcu
# streamporn + pandamovies. Powód reorderu (2026-05-30): gdy streamporn wiesza
# się intermittentnie, mangoporn musi zdążyć przed nim, patrz per-connector
# timeout w _job_movie_ingest.
# streamporn.nl padł (0 new od 2026-05-23) → zastąpiony żywym streamporn.vip
# (StreampornVipConnector, ocena 2026-07-02). Stara klasa .nl zostaje w dooplay.py
# dla backref istniejących origins `streamporn:*`, ale nie ingestujemy jej dalej.
return [
("paradisehill", ParadisehillConnector),
("mangoporn", MangopornConnector),
("streampornvip", StreampornVipConnector),
# pandamovies: wylaczony 2026-08-20 (serwis padl, kazda sciezka poza strona
# glowna dawala 404), wlaczony z powrotem 2026-10-16 po przeprowadzce na
# pandamovies.org: listing /movies/ 27 filmow na strone, 7 hosterow na film,
# dziala wprost z VPS bez proxy. Ten sam motyw "vid" co mangoporn i streamporn.li.
("pandamovies", PandamoviesConnector),
# freeomovie.to (bestia theme, nie dooplay), mirror: świeże filmy DVD,
# title-trigram attach do canonical + playback z TABS. Ocena 2026-07-02.
("freeomovie", FreeoMovieConnector),
# yourdailypornmovies.ws (własny motyw WP, nie dooplay), ocena 2026-07-28.
# SPRAWDZONY NA DUPLIKAT: 18/40 filmów ze strony głównej było nowych, bo to inna
# pula treści (okładki DVD z adultempire, nie re-hosty z pandanetwork.club, na
# których siedzą mangoporn/pandamovies/speedporn). Katalog min. 8000, do 2003.
# Metadane: obsada, studio (kryje się pod `/director/`), tagi, rok, synopsis,
# id produktu Adult Empire. Bez długości. Playback: voe + mixdrop (oba mają
# gotowe moduły hosterów), vidara.to nieznana, leci jako zwykły embed.
("yourdailypornmovies", YourDailyPornMoviesConnector),
# xtapes.la (WordPress, REST API), kategoria Full Movies: 3-5 filmow dziennie,
# czesto w dniu premiery. Ocena 2026-10-15, szczegoly w app/connectors/xtapes.py.
("xtapes", XtapesConnector),
]