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.
27 lines
870 B
Python
27 lines
870 B
Python
"""BaseDirectTubeScraper — kontrakt dla bezpośrednich scraperów tube'ów."""
|
|
from __future__ import annotations
|
|
|
|
import abc
|
|
from collections.abc import Iterator
|
|
|
|
from app.connectors.base import RawScene
|
|
|
|
|
|
class BaseDirectTubeScraper(abc.ABC):
|
|
"""Kontrakt direct scrapera. Wszystkie scrapery feedują do `Source(name='pornapp')`
|
|
żeby dziedziczyć logikę resolvera + idempotent merge per external_id."""
|
|
|
|
sitetag: str
|
|
"""Stabilny ID tube'a — używany w external_id `f"{sitetag}:{url}"`. Zgodny
|
|
z porn-app sitetag (hqpornercom, sxylandcom, itp.)."""
|
|
|
|
@abc.abstractmethod
|
|
def search(
|
|
self,
|
|
query: str,
|
|
*,
|
|
page: int = 1,
|
|
limit: int | None = None,
|
|
) -> Iterator[RawScene]:
|
|
"""Search tube po query (zwykle: nazwa performera). Yield RawScene per wynik."""
|
|
raise NotImplementedError
|