feat(music): 支持多源识别与元数据刮削

This commit is contained in:
jxxghp
2026-08-11 23:33:14 +08:00
parent 1197ece12b
commit 3f1b0cdb05
38 changed files with 3764 additions and 284 deletions

View File

@@ -44,6 +44,8 @@ class SystemConfModel(BaseModel):
fanart: int = 0
# MusicBrainz请求缓存数量
musicbrainz: int = 0
# TheAudioDB请求缓存数量
theaudiodb: int = 0
# ListenBrainz请求缓存数量
listenbrainz: int = 0
# 元数据缓存过期时间(秒)
@@ -205,11 +207,11 @@ class ConfigModel(BaseModel):
DOH_RESOLVERS: str = "1.0.0.1,1.1.1.1,9.9.9.9,149.112.112.112"
# ==================== 媒体元数据配置 ====================
# 媒体搜索来源 themoviedb/douban/bangumi/anilist多个用,分隔
# 媒体搜索来源 themoviedb/douban/bangumi/anilist/musicbrainz/theaudiodb/doubanmusic,多个用,分隔
SEARCH_SOURCE: str = "themoviedb"
# 媒体识别来源 themoviedb/douban/bangumi/anilist
# 媒体识别来源 themoviedb/douban/bangumi/anilist/musicbrainz/theaudiodb/doubanmusic
RECOGNIZE_SOURCE: str = "themoviedb"
# 刮削来源 themoviedb/douban/bangumi/anilist
# 刮削来源 themoviedb/douban/bangumi/anilist/musicbrainz/theaudiodb/doubanmusic
SCRAP_SOURCE: str = "themoviedb"
# 电视剧动漫的分类genre_ids
ANIME_GENREIDS: List[int] = Field(default=[16])
@@ -229,6 +231,8 @@ class ConfigModel(BaseModel):
# ==================== 音乐配置 ====================
# 音乐封面代理地址(用于解决 coverartarchive.org 无法访问导致的封面不显示问题,留空则使用官方地址)
MUSIC_COVER_PROXY: str = ""
# TheAudioDB API Key默认使用官方公开的免费 V1 Key可通过环境变量覆盖
THEAUDIODB_API_KEY: str = "123"
# ==================== TVDB配置 ====================
# TVDB API Key
@@ -527,6 +531,7 @@ class ConfigModel(BaseModel):
"anilist.co",
"coverartarchive.org",
"archive.org",
"theaudiodb.com",
"commons.wikimedia.org",
"upload.wikimedia.org",
]
@@ -999,6 +1004,7 @@ class Settings(BaseSettings, ConfigModel, LogConfigModel):
bangumi=512,
fanart=512,
musicbrainz=512,
theaudiodb=512,
listenbrainz=256,
meta=(self.META_CACHE_EXPIRE or 72) * 3600,
scheduler=100,
@@ -1012,6 +1018,7 @@ class Settings(BaseSettings, ConfigModel, LogConfigModel):
bangumi=256,
fanart=128,
musicbrainz=256,
theaudiodb=256,
listenbrainz=128,
meta=(self.META_CACHE_EXPIRE or 24) * 3600,
scheduler=50,

View File

@@ -212,9 +212,14 @@ class MusicInfo:
return None
@property
def douban_id(self) -> None:
"""音乐不使用豆瓣 ID兼容现有下载历史字段"""
return None
def douban_id(self) -> str | None:
"""豆瓣音乐来源返回原生条目 ID其它音乐源保持兼容空值"""
return self.media_id if self.source == "doubanmusic" else None
@property
def theaudiodb_id(self) -> str | None:
"""TheAudioDB 来源返回原生条目 ID供通用身份解析复用。"""
return self.media_id if self.source == "theaudiodb" else None
@property
def bangumi_id(self) -> None:

View File

@@ -1,4 +1,12 @@
from .metabase import MetaBase
from .metavideo import MetaVideo
from .metaanime import MetaAnime
from .metamusic import MetaMusic
from .metamusic import (
MetaMusic,
MusicNameContext,
MusicNameParseResult,
MusicNameParser,
MusicNamePattern,
MusicNamePatternMatch,
MusicNameRegistry,
)

File diff suppressed because it is too large Load Diff