add tmdb person api
This commit is contained in:
parent
d308a3d9de
commit
f6978b916b
@ -25,7 +25,7 @@ def tmdb_seasons(tmdbid: int, _: schemas.TokenPayload = Depends(verify_token)) -
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/similar/{tmdbid}/{type_name}", summary="类似电影/电视剧", response_model=List[schemas.MediaInfo])
|
@router.get("/similar/{tmdbid}/{type_name}", summary="类似电影/电视剧", response_model=List[schemas.MediaInfo])
|
||||||
def similar(tmdbid: int,
|
def tmdb_similar(tmdbid: int,
|
||||||
type_name: str,
|
type_name: str,
|
||||||
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
"""
|
"""
|
||||||
@ -45,7 +45,7 @@ def similar(tmdbid: int,
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/recommend/{tmdbid}/{type_name}", summary="推荐电影/电视剧", response_model=List[schemas.MediaInfo])
|
@router.get("/recommend/{tmdbid}/{type_name}", summary="推荐电影/电视剧", response_model=List[schemas.MediaInfo])
|
||||||
def recommend(tmdbid: int,
|
def tmdb_recommend(tmdbid: int,
|
||||||
type_name: str,
|
type_name: str,
|
||||||
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
"""
|
"""
|
||||||
@ -64,8 +64,8 @@ def recommend(tmdbid: int,
|
|||||||
return [MediaInfo(tmdb_info=tmdbinfo).to_dict() for tmdbinfo in tmdbinfos]
|
return [MediaInfo(tmdb_info=tmdbinfo).to_dict() for tmdbinfo in tmdbinfos]
|
||||||
|
|
||||||
|
|
||||||
@router.get("/credits/{tmdbid}/{type_name}", summary="演员阵容", response_model=List[schemas.TmdbCast])
|
@router.get("/credits/{tmdbid}/{type_name}", summary="演员阵容", response_model=List[schemas.TmdbPerson])
|
||||||
def movie_similar(tmdbid: int,
|
def tmdb_credits(tmdbid: int,
|
||||||
type_name: str,
|
type_name: str,
|
||||||
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
"""
|
"""
|
||||||
@ -81,7 +81,33 @@ def movie_similar(tmdbid: int,
|
|||||||
if not tmdbinfos:
|
if not tmdbinfos:
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
return [schemas.TmdbCast(**tmdbinfo) for tmdbinfo in tmdbinfos]
|
return [schemas.TmdbPerson(**tmdbinfo) for tmdbinfo in tmdbinfos]
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/credit/details/{credit_id}", summary="演员参演作品", response_model=List[schemas.MediaInfo])
|
||||||
|
def tmdb_credit_details(credit_id: str,
|
||||||
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
|
"""
|
||||||
|
根据演员ID查询演员参演作品
|
||||||
|
"""
|
||||||
|
tmdbinfos = TmdbChain().credit_details(credit_id=credit_id)
|
||||||
|
if not tmdbinfos:
|
||||||
|
return []
|
||||||
|
else:
|
||||||
|
return [MediaInfo(tmdb_info=tmdbinfo).to_dict() for tmdbinfo in tmdbinfos]
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/person/{person_id}", summary="人物详情", response_model=schemas.TmdbPerson)
|
||||||
|
def tmdb_person(person_id: int,
|
||||||
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
|
"""
|
||||||
|
根据人物ID查询人物详情
|
||||||
|
"""
|
||||||
|
tmdbinfo = TmdbChain().person_detail(person_id=person_id)
|
||||||
|
if not tmdbinfo:
|
||||||
|
return schemas.TmdbPerson()
|
||||||
|
else:
|
||||||
|
return schemas.TmdbPerson(**tmdbinfo)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/movies", summary="TMDB电影", response_model=List[schemas.MediaInfo])
|
@router.get("/movies", summary="TMDB电影", response_model=List[schemas.MediaInfo])
|
||||||
|
@ -89,3 +89,17 @@ class TmdbChain(ChainBase):
|
|||||||
:param tmdbid: TMDBID
|
:param tmdbid: TMDBID
|
||||||
"""
|
"""
|
||||||
return self.run_module("tv_credits", tmdbid=tmdbid)
|
return self.run_module("tv_credits", tmdbid=tmdbid)
|
||||||
|
|
||||||
|
def credit_details(self, credit_id: str) -> List[dict]:
|
||||||
|
"""
|
||||||
|
根据TMDBID查询演职员详情
|
||||||
|
:param credit_id: 人物ID
|
||||||
|
"""
|
||||||
|
return self.run_module("credit_details", credit_id=credit_id)
|
||||||
|
|
||||||
|
def person_detail(self, person_id: int) -> dict:
|
||||||
|
"""
|
||||||
|
根据TMDBID查询演职员详情
|
||||||
|
:param person_id: 人物ID
|
||||||
|
"""
|
||||||
|
return self.run_module("person_detail", person_id=person_id)
|
||||||
|
@ -372,3 +372,17 @@ class TheMovieDbModule(_ModuleBase):
|
|||||||
:param tmdbid: TMDBID
|
:param tmdbid: TMDBID
|
||||||
"""
|
"""
|
||||||
return self.tmdb.get_tv_credits(tmdbid=tmdbid)
|
return self.tmdb.get_tv_credits(tmdbid=tmdbid)
|
||||||
|
|
||||||
|
def credit_details(self, credit_id: str) -> List[dict]:
|
||||||
|
"""
|
||||||
|
根据TMDBID查询演职员详情
|
||||||
|
:param credit_id: 人物ID
|
||||||
|
"""
|
||||||
|
return self.tmdb.get_credit_details(credit_id=credit_id)
|
||||||
|
|
||||||
|
def person_detail(self, person_id: int) -> dict:
|
||||||
|
"""
|
||||||
|
根据TMDBID查询人物详情
|
||||||
|
:param person_id: 人物ID
|
||||||
|
"""
|
||||||
|
return self.tmdb.get_person_detail(person_id=person_id)
|
||||||
|
@ -5,7 +5,7 @@ from urllib.parse import quote
|
|||||||
|
|
||||||
import zhconv
|
import zhconv
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
from .tmdbv3api import TMDb, Search, Movie, TV, Season, Episode, Discover, Trending
|
from .tmdbv3api import TMDb, Search, Movie, TV, Season, Episode, Discover, Trending, Credit, Person
|
||||||
from .tmdbv3api.exceptions import TMDbException
|
from .tmdbv3api.exceptions import TMDbException
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
@ -20,11 +20,6 @@ class TmdbHelper:
|
|||||||
TMDB识别匹配
|
TMDB识别匹配
|
||||||
"""
|
"""
|
||||||
|
|
||||||
tmdb: TMDb = None
|
|
||||||
search: Search = None
|
|
||||||
movie: Movie = None
|
|
||||||
tv: TV = None
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# TMDB主体
|
# TMDB主体
|
||||||
self.tmdb = TMDb()
|
self.tmdb = TMDb()
|
||||||
@ -50,6 +45,8 @@ class TmdbHelper:
|
|||||||
self.episode = Episode()
|
self.episode = Episode()
|
||||||
self.discover = Discover()
|
self.discover = Discover()
|
||||||
self.trending = Trending()
|
self.trending = Trending()
|
||||||
|
self.credit = Credit()
|
||||||
|
self.person = Person()
|
||||||
|
|
||||||
def search_multiis(self, title: str) -> List[dict]:
|
def search_multiis(self, title: str) -> List[dict]:
|
||||||
"""
|
"""
|
||||||
@ -1125,3 +1122,31 @@ class TmdbHelper:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(str(e))
|
print(str(e))
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def get_credit_details(self, credit_id: str) -> List[dict]:
|
||||||
|
"""
|
||||||
|
获取演职员的详情
|
||||||
|
"""
|
||||||
|
if not self.credit:
|
||||||
|
return []
|
||||||
|
try:
|
||||||
|
logger.info(f"正在获取演职员参演作品:{credit_id}...")
|
||||||
|
info = self.credit.details(credit_id=credit_id) or {}
|
||||||
|
return info
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
return []
|
||||||
|
|
||||||
|
def get_person_detail(self, person_id: int) -> dict:
|
||||||
|
"""
|
||||||
|
获取人物详情
|
||||||
|
"""
|
||||||
|
if not self.person:
|
||||||
|
return {}
|
||||||
|
try:
|
||||||
|
logger.info(f"正在获取人物详情:{person_id}...")
|
||||||
|
info = self.person.details(person_id=person_id) or {}
|
||||||
|
return info
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
return {}
|
||||||
|
@ -32,10 +32,18 @@ class TmdbEpisode(BaseModel):
|
|||||||
guest_stars: Optional[list] = []
|
guest_stars: Optional[list] = []
|
||||||
|
|
||||||
|
|
||||||
class TmdbCast(BaseModel):
|
class TmdbPerson(BaseModel):
|
||||||
id: Optional[int] = None
|
id: Optional[int] = None
|
||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
character: Optional[str] = None
|
character: Optional[str] = None
|
||||||
profile_path: Optional[str] = None
|
profile_path: Optional[str] = None
|
||||||
gender: Optional[int] = None
|
gender: Optional[int] = None
|
||||||
original_name: Optional[str] = None
|
original_name: Optional[str] = None
|
||||||
|
credit_id: Optional[str] = None
|
||||||
|
also_known_as: Optional[list] = []
|
||||||
|
birthday: Optional[str] = None
|
||||||
|
deathday: Optional[str] = None
|
||||||
|
imdb_id: Optional[str] = None
|
||||||
|
known_for_department: Optional[str] = None
|
||||||
|
place_of_birth: Optional[str] = None
|
||||||
|
popularity: Optional[float] = None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user