Nowy wertykal krotkich pionowych klipow tworcow, osobno od scen: inne kolumny (tworca, audio, lajki, nisze), inny cykl zycia, inna taksonomia, brak filtra 60 s. Tabele `clips` (unikalne source+source_id) i `clip_tags` z indeksem (tag, clip_id) pod skan po tagu od losowego uuid w przyszlym feedzie. Zrodlo nr 1: RedGifs, oficjalne API v2 z tokenem tymczasowym (zwiazany z IP i UA, na 401 odnowienie). Globalne `order=latest` bez search_text daje ~100 na strone, kazde zapytanie widzi maks. 10 000 wynikow, wiec katalog chodzi sie po niszach (skrypt backfillu). Pliki media.redgifs.com sa publiczne i bez podpisu (206 z VPS-a i z telefonu), do bazy wchodzi gotowy adres. Scheduler: job clips-latest co godzine (5 stron), zatrzymuje sie na stronie bez nowych. Reaper (HEAD, 403/404/410 -> dead_at) jako skrypt, upsert odzywia klip, ktory zrodlo znow podaje. API: GET /clips i /clips/stats do pilota; wlasciwy feed, pamiec widzianych i telemetria to etap 3. Sprawdzone tego dnia i odlozone: nsfwswipe (lustro v.redd.it, bez audio, stoi od 19.08), Pornhub Shorties (zrodlo nr 2, HLS z tokenem 2 h, Referer na segmentach, 0/110 performerow z kanonu).
81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
from app.models.base import Base
|
|
from app.models.blacklist import BlacklistedPerformer, BlacklistedStudio, BlacklistedTag
|
|
from app.models.bug_report import BugReport
|
|
from app.models.clip import Clip, ClipTag
|
|
from app.models.external_record import ExternalRecord
|
|
from app.models.favorite_movie import FavoriteMovie
|
|
from app.models.favorite_performer import FavoritePerformer
|
|
from app.models.favorite_scene import FavoriteScene
|
|
from app.models.favorite_site import FavoriteSite
|
|
from app.models.favorite_studio import FavoriteStudio
|
|
from app.models.ingest_run import IngestRun
|
|
from app.models.merge_candidate import MergeCandidate
|
|
from app.models.movie import (
|
|
Movie,
|
|
MovieChapter,
|
|
MovieExternalRef,
|
|
MoviePerformer,
|
|
MovieTag,
|
|
)
|
|
from app.models.movie_playback_source import MoviePlaybackSource
|
|
from app.models.performer import Performer, PerformerAlias, PerformerExternalRef
|
|
from app.models.play_progress import MoviePlayProgress, ScenePlayProgress
|
|
from app.models.playback_event import PlaybackEvent
|
|
from app.models.playback_source import PlaybackSource
|
|
from app.models.duration_backfill_queue import DurationBackfillQueue
|
|
from app.models.phash_backfill_queue import PhashBackfillQueue
|
|
from app.models.phash_blacklist import PhashBlacklist
|
|
from app.models.saved_search import SavedSearch
|
|
from app.models.source_stats import SourceStats
|
|
from app.models.scene import (
|
|
Scene,
|
|
SceneExternalRef,
|
|
SceneFingerprint,
|
|
ScenePerformer,
|
|
SceneTag,
|
|
)
|
|
from app.models.source import Source
|
|
from app.models.studio import Studio, StudioAlias, StudioExternalRef
|
|
from app.models.tag import Tag
|
|
|
|
__all__ = [
|
|
"Base",
|
|
"BlacklistedPerformer",
|
|
"BlacklistedStudio",
|
|
"BlacklistedTag",
|
|
"BugReport",
|
|
"Clip",
|
|
"ClipTag",
|
|
"ExternalRecord",
|
|
"FavoriteMovie",
|
|
"FavoritePerformer",
|
|
"FavoriteScene",
|
|
"FavoriteSite",
|
|
"FavoriteStudio",
|
|
"IngestRun",
|
|
"MergeCandidate",
|
|
"Movie",
|
|
"MovieChapter",
|
|
"MovieExternalRef",
|
|
"MoviePerformer",
|
|
"MoviePlaybackSource",
|
|
"MovieTag",
|
|
"Performer",
|
|
"PerformerAlias",
|
|
"PerformerExternalRef",
|
|
"MoviePlayProgress",
|
|
"ScenePlayProgress",
|
|
"PlaybackSource",
|
|
"PhashBlacklist",
|
|
"SavedSearch",
|
|
"Scene",
|
|
"SceneExternalRef",
|
|
"SceneFingerprint",
|
|
"ScenePerformer",
|
|
"SceneTag",
|
|
"Source",
|
|
"Studio",
|
|
"StudioAlias",
|
|
"StudioExternalRef",
|
|
"Tag",
|
|
]
|