feat(media): support iqiyi discover source

This commit is contained in:
jxxghp
2026-08-13 15:34:58 +08:00
parent 626e6cb472
commit eebd81a0e4
4 changed files with 29 additions and 1 deletions
+2
View File
@@ -59,6 +59,7 @@ _MEDIA_SOURCE_VALUE_ALIASES = {
"mango_tv": "mangguodiscover", "mango_tv": "mangguodiscover",
"migu_video": "migu", "migu_video": "migu",
"tencent_video": "tencentvideodiscover", "tencent_video": "tencentvideodiscover",
"iqiyi": "iqiyidiscover",
} }
@@ -78,6 +79,7 @@ class MediaSource(str, Enum):
MangoTV = "mangguodiscover" MangoTV = "mangguodiscover"
MiguVideo = "migu" MiguVideo = "migu"
TencentVideo = "tencentvideodiscover" TencentVideo = "tencentvideodiscover"
Iqiyi = "iqiyidiscover"
def __str__(self) -> str: def __str__(self) -> str:
"""返回可直接用于 API 和数据库的规范值。""" """返回可直接用于 API 和数据库的规范值。"""
+3
View File
@@ -28,6 +28,8 @@ MEDIA_SOURCE_ALIASES = {
"migu_video": MediaSource.MiguVideo, "migu_video": MediaSource.MiguVideo,
"tencentvideodiscover": MediaSource.TencentVideo, "tencentvideodiscover": MediaSource.TencentVideo,
"tencent_video": MediaSource.TencentVideo, "tencent_video": MediaSource.TencentVideo,
"iqiyi": MediaSource.Iqiyi,
"iqiyidiscover": MediaSource.Iqiyi,
} }
MEDIA_SOURCE_PREFIXES = { MEDIA_SOURCE_PREFIXES = {
@@ -44,6 +46,7 @@ MEDIA_SOURCE_PREFIXES = {
MediaSource.MangoTV: "mangguodiscover", MediaSource.MangoTV: "mangguodiscover",
MediaSource.MiguVideo: "migu", MediaSource.MiguVideo: "migu",
MediaSource.TencentVideo: "tencentvideodiscover", MediaSource.TencentVideo: "tencentvideodiscover",
MediaSource.Iqiyi: "iqiyidiscover",
} }
MUSIC_MEDIA_SOURCE_ORDER = ( MUSIC_MEDIA_SOURCE_ORDER = (
+17 -1
View File
@@ -4,7 +4,11 @@ from app.chain import ChainBase
from app.core.context import MediaInfo from app.core.context import MediaInfo
from app.core.meta import MetaBase from app.core.meta import MetaBase
from app.schemas.types import MediaSource, MediaType from app.schemas.types import MediaSource, MediaType
from app.utils.media import resolve_media_identity from app.utils.media import (
build_media_key,
parse_media_source_selection,
resolve_media_identity,
)
def _chain_without_init() -> ChainBase: def _chain_without_init() -> ChainBase:
@@ -22,6 +26,18 @@ def test_generic_source_id_resolves_as_fixed_enum() -> None:
) == (MediaSource.AniList, "154587") ) == (MediaSource.AniList, "154587")
def test_iqiyi_source_routes_through_unified_identity() -> None:
"""爱奇艺探索来源应支持选择解析、身份解析和媒体键构造。"""
assert parse_media_source_selection("iqiyi,iqiyidiscover") == (
MediaSource.Iqiyi,
)
assert resolve_media_identity(
media_source="iqiyi",
media_id="album-1",
) == (MediaSource.Iqiyi, "album-1")
assert build_media_key("iqiyi", "album-1") == "iqiyidiscover:album-1"
def test_plugin_source_is_preserved_as_dynamic_enum() -> None: def test_plugin_source_is_preserved_as_dynamic_enum() -> None:
"""格式合法的插件来源应作为动态枚举成员进入通用识别链。""" """格式合法的插件来源应作为动态枚举成员进入通用识别链。"""
assert resolve_media_identity( assert resolve_media_identity(
+7
View File
@@ -20,6 +20,13 @@ def test_media_source_normalization_accepts_plugin_source() -> None:
assert normalize_media_source("plugin source:invalid") is None assert normalize_media_source("plugin source:invalid") is None
def test_iqiyi_media_source_aliases_are_normalized() -> None:
"""爱奇艺探索来源的历史前缀和规范前缀应归一到同一媒体来源。"""
assert normalize_media_source("iqiyi") is MediaSource.Iqiyi
assert normalize_media_source("iqiyidiscover") is MediaSource.Iqiyi
assert MediaSource("iqiyi") is MediaSource.Iqiyi
def test_resolve_anilist_search_params_preserves_identity() -> None: def test_resolve_anilist_search_params_preserves_identity() -> None:
"""精确搜索参数应保留枚举来源和原生 ID。""" """精确搜索参数应保留枚举来源和原生 ID。"""
params, message = asyncio.run( params, message = asyncio.run(