From 4033ffeb15d26d4b5ebce881fdfe665a71b63ced Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 28 Apr 2024 12:03:48 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=81=9A=E5=90=88=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/media.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/app/api/endpoints/media.py b/app/api/endpoints/media.py index f9593af4..20a48d8d 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 +from typing import List, Any, Union from fastapi import APIRouter, Depends @@ -72,15 +72,29 @@ def search(title: str, """ 模糊搜索媒体/人物信息列表 media:媒体信息,person:人物信息 """ + def __get_source(obj: Union[dict, schemas.MediaPerson]): + """ + 获取对象属性 + """ + if isinstance(obj, dict): + return obj.get("source") + return obj.source + + result = [] if type == "media": _, medias = MediaChain().search(title=title) if medias: - return [media.to_dict() for media in medias[(page - 1) * count: page * count]] + result = [media.to_dict() for media in medias] else: - persons = MediaChain().search_persons(name=title) - if persons: - return persons[(page - 1) * count: page * count] - return [] + result = MediaChain().search_persons(name=title) + if result: + # 按设置的顺序对结果进行排序 + setting_order = settings.SEARCH_SOURCE.split(',') or [] + sort_order = {} + for index, source in enumerate(setting_order): + sort_order[source] = index + result = sorted(result, key=lambda x: sort_order.get(__get_source(x), 4)) + return result[(page - 1) * count:page * count] @router.get("/scrape", summary="刮削媒体信息", response_model=schemas.Response)