Files
archived-MoviePilot-Plugins/docs/faq/09-extend-discovery-source.md
2026-04-20 21:43:30 +08:00

3.6 KiB
Raw Blame History

如何扩展探索功能的媒体数据源?

返回 README | FAQ 索引

(仅支持 v2.2.7+ 版本)

  • 探索功能仅内置TheMovieDb豆瓣Bangumi数据源,可通过插件扩展探索功能的数据源范围,按以下方法开发插件(参考TheTVDB探索插件):

    1. 实现ChainEventType.DiscoverSource链式事件响应,将额外的媒体数据源塞入事件数据extra_sources数组中(注意:如果事件中已经有其它数据源,需要叠加而不是替换,避免影响其它插件塞入的数据)
    • name:数据源名称
    • mediaid_prefix数据源的唯一ID
    • api_path数据获取API相对路径需要在插件中实现API接口功能GET模式接收过滤参数注意page参数默认需要有返回List[schemas.MediaInfo])格式数据注意mediaid_prefix和media_id需要赋值用于唯一索引媒体详细信息和转换媒体数据
    • filter_params数据源过滤参数名的字典相关参数会传入插件API的GET请求中
    • filter_ui数据过滤选项的UI配置json与插件配置表单方式一致
    • depends: UI依赖关系字典Dict[str, list],关过滤条件存在依赖关系时需要设置,以便上级条件变化时清空下级条件值
class DiscoverMediaSource(BaseModel):
    """
    探索媒体数据源的基类
    """
    name: str = Field(..., description="数据源名称")
    mediaid_prefix: str = Field(..., description="媒体ID的前缀不含:")
    api_path: str = Field(..., description="媒体数据源API地址")
    filter_params: Optional[Dict[str, Any]] = Field(default=None, description="过滤参数")
    filter_ui: Optional[List[dict]] = Field(default=[], description="过滤参数UI配置")

class DiscoverSourceEventData(ChainEventData):
    """
    DiscoverSource 事件的数据模型
    Attributes:
        # 输出参数
        extra_sources (List[DiscoverMediaSource]): 额外媒体数据源
    """
    # 输出参数
    extra_sources: List[DiscoverMediaSource] = Field(default_factory=list, description="额外媒体数据源")
    1. 实现ChainEventType.MediaRecognizeConvert链式事件响应(可选如不实现则默认按标题重新识别媒体信息根据媒体ID和转换类型返回TheMovieDb或豆瓣的媒体数据将转换后的数据注入事件数据media_dict中,可参考app/chain/media.py中的get_tmdbinfo_by_bangumiid
    • mediaid媒体ID格式为mediaid_prefix:media_id,如 tmdb:12345、douban:1234567
    • convert_type转换类型仅支持themoviedb/douban需要转换为对应的媒体数据并返回
    • media_dict:转换后的媒体数据,格式为TheMovieDb/豆瓣的媒体数据
class MediaRecognizeConvertEventData(ChainEventData):
    """
    MediaRecognizeConvert 事件的数据模型
    Attributes:
        # 输入参数
        mediaid (str): 媒体ID格式为`前缀:ID值`,如 tmdb:12345、douban:1234567
        convert_type (str): 转换类型 仅支持themoviedb/douban需要转换为对应的媒体数据并返回
        # 输出参数
        media_dict (dict): TheMovieDb/豆瓣的媒体数据
    """
    # 输入参数
    mediaid: str = Field(..., description="媒体ID")
    convert_type: str = Field(..., description="转换类型themoviedb/douban")
    # 输出参数
    media_dict: dict = Field(default=dict, description="转换后的媒体信息TheMovieDb/豆瓣)")
    1. 启用插件后点击探索功能将自动生成额外的数据源标签及页面页面中选择不同的过滤条件时会重新触发API请求。