add media/seasons api

This commit is contained in:
jxxghp
2025-02-08 12:44:47 +08:00
parent 6fcf2c2f1f
commit c2a0d9d657
2 changed files with 60 additions and 2 deletions
+46 -1
View File
@@ -5,6 +5,7 @@ from fastapi import APIRouter, Depends
from app import schemas from app import schemas
from app.chain.media import MediaChain from app.chain.media import MediaChain
from app.chain.tmdb import TmdbChain
from app.core.config import settings from app.core.config import settings
from app.core.context import Context from app.core.context import Context
from app.core.event import eventmanager from app.core.event import eventmanager
@@ -74,6 +75,7 @@ def search(title: str,
""" """
模糊搜索媒体/人物信息列表 media:媒体信息,person:人物信息 模糊搜索媒体/人物信息列表 media:媒体信息,person:人物信息
""" """
def __get_source(obj: Union[schemas.MediaInfo, schemas.MediaPerson, dict]): def __get_source(obj: Union[schemas.MediaInfo, schemas.MediaPerson, dict]):
""" """
获取对象属性 获取对象属性
@@ -133,8 +135,51 @@ def category(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
return MediaChain().media_category() or {} return MediaChain().media_category() or {}
@router.get("/seasons", summary="查询媒体季信息", response_model=List[schemas.MediaSeason])
def seasons(mediaid: str = None,
title: str = None,
year: int = None,
season: int = None,
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
查询媒体季信息
"""
if mediaid:
if mediaid.startswith("tmdb:"):
tmdbid = int(mediaid[5:])
seasons_info = TmdbChain().tmdb_seasons(tmdbid=tmdbid)
if seasons_info:
if season:
return [sea for sea in seasons_info if sea.season_number == season]
return seasons_info
if title:
meta = MetaInfo(title)
if year:
meta.year = year
mediainfo = MediaChain().recognize_media(meta, mtype=MediaType.TV)
if mediainfo:
if settings.RECOGNIZE_SOURCE == "themoviedb":
seasons_info = TmdbChain().tmdb_seasons(tmdbid=mediainfo.tmdb_id)
if seasons_info:
if season:
return [sea for sea in seasons_info if sea.season_number == season]
return seasons_info
else:
sea = season or 1
return schemas.MediaSeason(
season_number=sea,
poster_path=mediainfo.poster_path,
name=f"{sea}",
air_date=mediainfo.release_date,
overview=mediainfo.overview,
vote_average=mediainfo.vote_average,
episode_count=mediainfo.number_of_episodes
)
return []
@router.get("/{mediaid}", summary="查询媒体详情", response_model=schemas.MediaInfo) @router.get("/{mediaid}", summary="查询媒体详情", response_model=schemas.MediaInfo)
def media_info(mediaid: str, type_name: str, title: str = None, year: int = None, def detail(mediaid: str, type_name: str, title: str = None, year: int = None,
_: schemas.TokenPayload = Depends(verify_token)) -> Any: _: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
根据媒体ID查询themoviedb或豆瓣媒体信息,type_name: 电影/电视剧 根据媒体ID查询themoviedb或豆瓣媒体信息,type_name: 电影/电视剧
+13
View File
@@ -242,6 +242,19 @@ class Context(BaseModel):
torrent_info: Optional[TorrentInfo] = None torrent_info: Optional[TorrentInfo] = None
class MediaSeason(BaseModel):
"""
季信息
"""
air_date: Optional[str] = None
episode_count: Optional[int] = None
name: Optional[str] = None
overview: Optional[str] = None
poster_path: Optional[str] = None
season_number: Optional[int] = None
vote_average: Optional[float] = None
class MediaPerson(BaseModel): class MediaPerson(BaseModel):
""" """
媒体人物信息 媒体人物信息