为Bangumi和Douban模块添加异步API支持

This commit is contained in:
jxxghp
2025-07-30 22:18:11 +08:00
parent 71f7bc7b1b
commit 232759829e
4 changed files with 755 additions and 2 deletions
+116
View File
@@ -82,6 +82,29 @@ class BangumiModule(_ModuleBase):
return None
async def async_recognize_media(self, bangumiid: int = None,
**kwargs) -> Optional[MediaInfo]:
"""
识别媒体信息(异步版本)
:param bangumiid: 识别的Bangumi ID
:return: 识别的媒体信息,包括剧集信息
"""
if not bangumiid:
return None
# 直接查询详情
info = await self.async_bangumi_info(bangumiid=bangumiid)
if info:
# 赋值TMDB信息并返回
mediainfo = MediaInfo(bangumi_info=info)
logger.info(f"{bangumiid} Bangumi识别结果:{mediainfo.type.value} "
f"{mediainfo.title_year}")
return mediainfo
else:
logger.info(f"{bangumiid} 未匹配到Bangumi媒体信息")
return None
def search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]:
"""
搜索媒体信息
@@ -99,6 +122,23 @@ class BangumiModule(_ModuleBase):
or meta.name.lower() in str(info.get("name_cn")).lower()]
return []
async def async_search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]:
"""
搜索媒体信息(异步版本)
:param meta: 识别的元数据
:reutrn: 媒体信息
"""
if settings.SEARCH_SOURCE and "bangumi" not in settings.SEARCH_SOURCE:
return None
if not meta.name:
return []
infos = await self.bangumiapi.async_search(meta.name)
if infos:
return [MediaInfo(bangumi_info=info) for info in infos
if meta.name.lower() in str(info.get("name")).lower()
or meta.name.lower() in str(info.get("name_cn")).lower()]
return []
def bangumi_info(self, bangumiid: int) -> Optional[dict]:
"""
获取Bangumi信息
@@ -110,6 +150,17 @@ class BangumiModule(_ModuleBase):
logger.info(f"开始获取Bangumi信息:{bangumiid} ...")
return self.bangumiapi.detail(bangumiid)
async def async_bangumi_info(self, bangumiid: int) -> Optional[dict]:
"""
获取Bangumi信息(异步版本)
:param bangumiid: BangumiID
:return: Bangumi信息
"""
if not bangumiid:
return None
logger.info(f"开始获取Bangumi信息:{bangumiid} ...")
return await self.bangumiapi.async_detail(bangumiid)
def bangumi_calendar(self) -> Optional[List[MediaInfo]]:
"""
获取Bangumi每日放送
@@ -119,6 +170,15 @@ class BangumiModule(_ModuleBase):
return [MediaInfo(bangumi_info=info) for info in infos]
return []
async def async_bangumi_calendar(self) -> Optional[List[MediaInfo]]:
"""
获取Bangumi每日放送(异步版本)
"""
infos = await self.bangumiapi.async_calendar()
if infos:
return [MediaInfo(bangumi_info=info) for info in infos]
return []
def bangumi_credits(self, bangumiid: int) -> List[schemas.MediaPerson]:
"""
根据TMDBID查询电影演职员表
@@ -129,6 +189,16 @@ class BangumiModule(_ModuleBase):
return [schemas.MediaPerson(source='bangumi', **person) for person in persons]
return []
async def async_bangumi_credits(self, bangumiid: int) -> List[schemas.MediaPerson]:
"""
根据TMDBID查询电影演职员表(异步版本)
:param bangumiid: BangumiID
"""
persons = await self.bangumiapi.async_credits(bangumiid)
if persons:
return [schemas.MediaPerson(source='bangumi', **person) for person in persons]
return []
def bangumi_recommend(self, bangumiid: int) -> List[MediaInfo]:
"""
根据BangumiID查询推荐电影
@@ -139,6 +209,16 @@ class BangumiModule(_ModuleBase):
return [MediaInfo(bangumi_info=subject) for subject in subjects]
return []
async def async_bangumi_recommend(self, bangumiid: int) -> List[MediaInfo]:
"""
根据BangumiID查询推荐电影(异步版本)
:param bangumiid: BangumiID
"""
subjects = await self.bangumiapi.async_subjects(bangumiid)
if subjects:
return [MediaInfo(bangumi_info=subject) for subject in subjects]
return []
def bangumi_person_detail(self, person_id: int) -> Optional[schemas.MediaPerson]:
"""
获取人物详细信息
@@ -156,6 +236,23 @@ class BangumiModule(_ModuleBase):
})
return None
async def async_bangumi_person_detail(self, person_id: int) -> Optional[schemas.MediaPerson]:
"""
获取人物详细信息(异步版本)
:param person_id: 豆瓣人物ID
"""
personinfo = await self.bangumiapi.async_person_detail(person_id)
if personinfo:
return schemas.MediaPerson(source='bangumi', **{
"id": personinfo.get("id"),
"name": personinfo.get("name"),
"images": personinfo.get("images"),
"biography": personinfo.get("summary"),
"birthday": personinfo.get("birth_day"),
"gender": personinfo.get("gender")
})
return None
def bangumi_person_credits(self, person_id: int) -> List[MediaInfo]:
"""
根据TMDBID查询人物参演作品
@@ -166,6 +263,16 @@ class BangumiModule(_ModuleBase):
return [MediaInfo(bangumi_info=credit) for credit in credits_info]
return []
async def async_bangumi_person_credits(self, person_id: int) -> List[MediaInfo]:
"""
根据TMDBID查询人物参演作品(异步版本)
:param person_id: 人物ID
"""
credits_info = await self.bangumiapi.async_person_credits(person_id=person_id)
if credits_info:
return [MediaInfo(bangumi_info=credit) for credit in credits_info]
return []
def bangumi_discover(self, **kwargs) -> Optional[List[MediaInfo]]:
"""
发现Bangumi番剧
@@ -174,3 +281,12 @@ class BangumiModule(_ModuleBase):
if infos:
return [MediaInfo(bangumi_info=info) for info in infos]
return []
async def async_bangumi_discover(self, **kwargs) -> Optional[List[MediaInfo]]:
"""
发现Bangumi番剧(异步版本)
"""
infos = await self.bangumiapi.async_discover(**kwargs)
if infos:
return [MediaInfo(bangumi_info=info) for info in infos]
return []