From 6a71bed8219dc8e040544fdd66e0c866e73bda0e Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 27 Apr 2024 21:17:32 +0800 Subject: [PATCH] fix douban api --- app/api/endpoints/media.py | 24 +++++++------ app/chain/media.py | 65 ++++++++++++++-------------------- app/modules/douban/__init__.py | 2 +- app/modules/douban/apiv2.py | 2 +- 4 files changed, 41 insertions(+), 52 deletions(-) diff --git a/app/api/endpoints/media.py b/app/api/endpoints/media.py index f4921269..f9593af4 100644 --- a/app/api/endpoints/media.py +++ b/app/api/endpoints/media.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import List, Any, Union +from typing import List, Any from fastapi import APIRouter, Depends @@ -64,20 +64,22 @@ def recognize_file2(path: str, @router.get("/search", summary="搜索媒体/人物信息", response_model=List[dict]) -def search_by_title(title: str, - type: str = "media", - page: int = 1, - count: int = 8, - _: schemas.TokenPayload = Depends(verify_token)) -> Any: +def search(title: str, + type: str = "media", + page: int = 1, + count: int = 8, + _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 模糊搜索媒体/人物信息列表 media:媒体信息,person:人物信息 """ - _, medias = MediaChain().search(title=title, stype=type) - if medias: - if type == "media": + if type == "media": + _, medias = MediaChain().search(title=title) + if medias: return [media.to_dict() for media in medias[(page - 1) * count: page * count]] - else: - return medias[(page - 1) * count: page * count] + else: + persons = MediaChain().search_persons(name=title) + if persons: + return persons[(page - 1) * count: page * count] return [] diff --git a/app/chain/media.py b/app/chain/media.py index ad2cfd51..08a1596f 100644 --- a/app/chain/media.py +++ b/app/chain/media.py @@ -2,7 +2,7 @@ import copy import time from pathlib import Path from threading import Lock -from typing import Optional, List, Tuple, Union +from typing import Optional, List, Tuple from app.chain import ChainBase from app.core.context import Context, MediaInfo @@ -10,7 +10,6 @@ from app.core.event import eventmanager, Event from app.core.meta import MetaBase from app.core.metainfo import MetaInfo, MetaInfoPath from app.log import logger -from app.schemas import MediaPerson from app.schemas.types import EventType, MediaType from app.utils.singleton import Singleton from app.utils.string import StringUtils @@ -157,48 +156,36 @@ class MediaChain(ChainBase, metaclass=Singleton): # 返回上下文 return Context(meta_info=file_meta, media_info=mediainfo) - def search(self, title: str, - stype: str = "media") -> Tuple[Optional[MetaBase], List[Union[MediaInfo, MediaPerson]]]: + def search(self, title: str) -> Tuple[Optional[MetaBase], List[MediaInfo]]: """ 搜索媒体/人物信息 :param title: 搜索内容 - :param stype: 搜索类型 media:媒体信息,person:人物信息 :return: 识别元数据,媒体信息列表 """ - if stype == "media": - # 提取要素 - mtype, key_word, season_num, episode_num, year, content = StringUtils.get_keyword(title) - # 识别 - meta = MetaInfo(content) - if not meta.name: - meta.cn_name = content - # 合并信息 - if mtype: - meta.type = mtype - if season_num: - meta.begin_season = season_num - if episode_num: - meta.begin_episode = episode_num - if year: - meta.year = year - # 开始搜索 - logger.info(f"开始搜索媒体信息:{meta.name}") - medias: Optional[List[MediaInfo]] = self.search_medias(meta=meta) - if not medias: - logger.warn(f"{meta.name} 没有找到对应的媒体信息!") - return meta, [] - logger.info(f"{content} 搜索到 {len(medias)} 条相关媒体信息") - # 识别的元数据,媒体信息列表 - return meta, medias - else: - # 搜索人物信息 - logger.info(f"开始搜索人物信息:{title}") - persons = self.search_persons(name=title) - if not persons: - logger.warn(f"{title} 没有找到对应的人物信息!") - return None, [] - logger.info(f"{title} 搜索到 {len(persons)} 条相关人物信息") - return None, persons + # 提取要素 + mtype, key_word, season_num, episode_num, year, content = StringUtils.get_keyword(title) + # 识别 + meta = MetaInfo(content) + if not meta.name: + meta.cn_name = content + # 合并信息 + if mtype: + meta.type = mtype + if season_num: + meta.begin_season = season_num + if episode_num: + meta.begin_episode = episode_num + if year: + meta.year = year + # 开始搜索 + logger.info(f"开始搜索媒体信息:{meta.name}") + medias: Optional[List[MediaInfo]] = self.search_medias(meta=meta) + if not medias: + logger.warn(f"{meta.name} 没有找到对应的媒体信息!") + return meta, [] + logger.info(f"{content} 搜索到 {len(medias)} 条相关媒体信息") + # 识别的元数据,媒体信息列表 + return meta, medias def get_tmdbinfo_by_doubanid(self, doubanid: str, mtype: MediaType = None) -> Optional[dict]: """ diff --git a/app/modules/douban/__init__.py b/app/modules/douban/__init__.py index 73238357..633ebc2c 100644 --- a/app/modules/douban/__init__.py +++ b/app/modules/douban/__init__.py @@ -574,7 +574,7 @@ class DoubanModule(_ModuleBase): 'url': item.get('target', {}).get('url'), 'images': item.get('target', {}).get('cover', {}), 'avatar': item.get('target', {}).get('cover_img', {}).get('url'), - }) for item in result.get('items')] + }) for item in result.get('items') if name in item.get('target', {}).get('title')] return [] @retry(Exception, 5, 3, 3, logger=logger) diff --git a/app/modules/douban/apiv2.py b/app/modules/douban/apiv2.py index 5471f24d..c7ffa984 100644 --- a/app/modules/douban/apiv2.py +++ b/app/modules/douban/apiv2.py @@ -181,7 +181,7 @@ class DoubanApi(metaclass=Singleton): """ req_url = self._base_url + url - params = {'apiKey': self._api_key} + params: dict = {'apiKey': self._api_key} if kwargs: params.update(kwargs)