mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-06 07:09:09 +08:00
fix(types): preserve Douban module response fallbacks
This commit is contained in:
@@ -808,7 +808,10 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
continue
|
||||
if meta.name not in item_obj.get("target", {}).get("title"):
|
||||
continue
|
||||
ret_medias.append(MediaInfo(douban_info=item_obj.get("target")))
|
||||
target = item_obj.get("target")
|
||||
if not isinstance(target, dict):
|
||||
continue
|
||||
ret_medias.append(MediaInfo(douban_info=target))
|
||||
# 将搜索词中的季写入标题中
|
||||
if ret_medias and meta.begin_season is not None:
|
||||
# 小写数据转大写
|
||||
@@ -1732,7 +1735,9 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
return persons
|
||||
|
||||
@staticmethod
|
||||
def _process_imdbid_result(result: dict, imdbid: str) -> Optional[dict]:
|
||||
def _process_imdbid_result(
|
||||
result: Optional[dict[str, Any]], imdbid: str,
|
||||
) -> Optional[dict[str, Any]]:
|
||||
"""
|
||||
处理IMDBID查询结果
|
||||
:param result: IMDBID查询返回的结果
|
||||
@@ -1743,7 +1748,10 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
doubanid = result.get("id")
|
||||
if doubanid:
|
||||
if not str(doubanid).isdigit():
|
||||
doubanid = re.search(r"\d+", doubanid).group(0)
|
||||
match = re.search(r"\d+", str(doubanid))
|
||||
if not match:
|
||||
return None
|
||||
doubanid = match.group(0)
|
||||
result["id"] = doubanid
|
||||
logger.info(f"{imdbid} 查询到豆瓣信息:{result.get('title')}")
|
||||
return result
|
||||
@@ -1751,8 +1759,11 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _process_search_results(result: dict, name: str, mtype: MediaType = None,
|
||||
year: str = None, season: int = None) -> dict:
|
||||
def _process_search_results(
|
||||
result: Optional[dict[str, Any]], name: str,
|
||||
mtype: Optional[MediaType] = None, year: Optional[str] = None,
|
||||
season: Optional[int] = None,
|
||||
) -> dict[str, Any]:
|
||||
"""
|
||||
处理搜索结果并进行匹配
|
||||
:param result: 搜索返回的结果
|
||||
@@ -1776,7 +1787,7 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
logger.warn(f"未找到 {name} 的豆瓣信息")
|
||||
return {}
|
||||
|
||||
for item_obj in result.get("items"):
|
||||
for item_obj in result.get("items") or []:
|
||||
type_name = item_obj.get("type_name")
|
||||
if type_name not in [MediaType.TV.value, MediaType.MOVIE.value]:
|
||||
continue
|
||||
@@ -1907,7 +1918,9 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _process_douban_images(mediainfo: MediaInfo, info: dict) -> MediaInfo:
|
||||
def _process_douban_images(
|
||||
mediainfo: MediaInfo, info: Optional[dict[str, Any]],
|
||||
) -> MediaInfo:
|
||||
"""
|
||||
处理豆瓣图片数据
|
||||
:param mediainfo: 媒体信息
|
||||
@@ -1995,7 +2008,8 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
"""
|
||||
recommend = self.doubanapi.movie_recommendations(subject_id=doubanid)
|
||||
if recommend:
|
||||
return [MediaInfo(douban_info=info) for info in recommend]
|
||||
items = recommend.get("items") or []
|
||||
return [MediaInfo(douban_info=info) for info in items if isinstance(info, dict)]
|
||||
return []
|
||||
|
||||
def douban_tv_recommend(self, doubanid: str) -> List[MediaInfo]:
|
||||
@@ -2005,7 +2019,8 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
"""
|
||||
recommend = self.doubanapi.tv_recommendations(subject_id=doubanid)
|
||||
if recommend:
|
||||
return [MediaInfo(douban_info=info) for info in recommend]
|
||||
items = recommend.get("items") or []
|
||||
return [MediaInfo(douban_info=info) for info in items if isinstance(info, dict)]
|
||||
return []
|
||||
|
||||
@staticmethod
|
||||
@@ -2166,19 +2181,21 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
if not personinfo:
|
||||
return []
|
||||
collection_id = None
|
||||
for module in personinfo.get("modules"):
|
||||
for module in personinfo.get("modules") or []:
|
||||
if module.get("type") == "work_collections":
|
||||
collection_id = module.get("payload", {}).get("id")
|
||||
# 查询作品集内容
|
||||
if collection_id:
|
||||
collections = self.doubanapi.person_work(subject_id=collection_id, start=(page - 1) * 20, count=20)
|
||||
if collections:
|
||||
works = collections.get("works")
|
||||
works = collections.get("works") or []
|
||||
return [MediaInfo(douban_info=work.get("subject")) for work in works]
|
||||
return []
|
||||
|
||||
@staticmethod
|
||||
def _process_celebrity_data(result: dict) -> List[_SchemaMediaPerson]:
|
||||
def _process_celebrity_data(
|
||||
result: Optional[dict[str, Any]],
|
||||
) -> List[_SchemaMediaPerson]:
|
||||
"""
|
||||
处理演职员表数据的公共方法
|
||||
:param result: API返回的演职员表数据
|
||||
@@ -2217,7 +2234,8 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
"""
|
||||
recommend = await self.doubanapi.async_movie_recommendations(subject_id=doubanid)
|
||||
if recommend:
|
||||
return [MediaInfo(douban_info=info) for info in recommend]
|
||||
items = recommend.get("items") or []
|
||||
return [MediaInfo(douban_info=info) for info in items if isinstance(info, dict)]
|
||||
return []
|
||||
|
||||
async def async_douban_tv_recommend(self, doubanid: str) -> List[MediaInfo]:
|
||||
@@ -2227,7 +2245,8 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
"""
|
||||
recommend = await self.doubanapi.async_tv_recommendations(subject_id=doubanid)
|
||||
if recommend:
|
||||
return [MediaInfo(douban_info=info) for info in recommend]
|
||||
items = recommend.get("items") or []
|
||||
return [MediaInfo(douban_info=info) for info in items if isinstance(info, dict)]
|
||||
return []
|
||||
|
||||
async def async_douban_movie_interests(self, doubanid: str, start: int = 0,
|
||||
@@ -2308,7 +2327,7 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
if not personinfo:
|
||||
return []
|
||||
collection_id = None
|
||||
for module in personinfo.get("modules"):
|
||||
for module in personinfo.get("modules") or []:
|
||||
if module.get("type") == "work_collections":
|
||||
collection_id = module.get("payload", {}).get("id")
|
||||
# 查询作品集内容
|
||||
@@ -2316,6 +2335,6 @@ class DoubanModule(MediaAuxiliaryProviderMixin, _ModuleBase):
|
||||
collections = await self.doubanapi.async_person_work(subject_id=collection_id, start=(page - 1) * 20,
|
||||
count=20)
|
||||
if collections:
|
||||
works = collections.get("works")
|
||||
works = collections.get("works") or []
|
||||
return [MediaInfo(douban_info=work.get("subject")) for work in works]
|
||||
return []
|
||||
|
||||
Reference in New Issue
Block a user