尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Phlex fetchers 模块拆解:如何统一调度 Radarr、Lidarr 与 Watcher 的下载任务
Phlex fetchers 模块拆解如何统一调度 Radarr、Lidarr 与 Watcher 的下载任务【免费下载链接】PhlexA super-sexy voice interface for the Plex HTPC项目地址: https://gitcode.com/gh_mirrors/phl/PhlexPhlex 是一个面向 Plex 家庭影院HTPC的语音控制助手而它的fetchers模块正是语音一句话就能自动下载电影、剧集和音乐背后的核心。本文带你拆解fetchers模块如何把Radarr电影、Lidarr音乐与Watcher影片三大下载服务统一调度起来——从按媒体类型路由、并行抓取清单到数据归一化与统一分发下载让你彻底看懂这套开箱即用的语音下载架构。为什么需要 fetchers 模块语音下载的痛点传统家庭影院中想下载一部电影你得手动打开 Radarr 的网页搜索、添加、选质量配置。语音助手的价值就在于一句话完成但难点随之而来接口不统一Radarr 用movie端点Lidarr 用artist端点Watcher 用addmovie模式返回的 JSON 结构各不相同。配置分散每个服务的地址URL和密钥Token都要单独管理。避免重复同一部电影可能在 Radarr 和 Watcher 里都该加但不能重复添加。fetchers模块用一个调度中枢 多个服务适配器的思路把这三件事一次性解决。fetchers 模块的整体架构一张图看懂调度流程整个模块的调用链可以概括为四步流水线路由scanFetchers根据媒体类型挑出启用的下载器并行抓取multiCurl同时向各服务拉取媒体库清单归一化parseFetchers把不同格式统一成标准媒体对象分发下载downloadMedia按命名约定调用对应的下载函数。这四个阶段全部集中在 php/fetchers.php 中实现真正面向各服务的 API 调用则封装在独立的适配器里。第一步按媒体类型路由扫描任务scanFetchers 如何挑出该用哪些下载器入口函数scanFetchers($type, $id)首先根据媒体类型决定扫描哪些服务这是统一调度的第一道闸门电影movie→ CouchPotato、Radarr、Watcher剧集/单集show、episode→ SickRage、Sonarr音乐music、artist、album→ Headphones、Lidarr代码中通过$_SESSION[radarrEnabled]等开关判断服务是否启用只有启用的才会进入扫描队列。每个scanRadarr()、scanLidarr()、scanWatcher()函数职责单一从会话里读取 URL 与 Token拼出该服务的查询接口地址。长尾提示这套按类型路由的设计正是它能同时驾驭 Radarr、Lidarr 与 Watcher 的关键——你只需启用需要的服务其余自动跳过。第二步并行抓取各服务库的清单multiCurl 并行请求告别串行等待如果逐个请求各服务延迟会叠加。Phlex 用 php/multiCurl.php 中的multiCurl类基于 PHP 的curl_multi把多个请求并行发出一次性拿到全部服务的返回数据。这样做的好处很直观无论启用了几个下载器总耗时约等于最慢的那个服务而不是所有服务耗时之和。对语音交互体验而言这意味着开口问到有回应的等待时间被压到最短。第三步把异构数据统一成标准媒体对象parseFetchers 归一化让不同服务说同一种语言各服务返回的字段五花八门Radarr 有tmdbId、overviewWatcher 是tmdbid、plotSickRage 则是show_name、tvdbid。parseFetchers(array $data)用一个switch把每个服务的原始输出交给各自的解析函数parseRadarr、parseLidarr、parseWatcher…最终全部转成统一的媒体对象title、year、imdbId、tmdbId、summary、source其中source字段标记了这条数据来自哪个下载器为后续去重和来源展示打下基础。数据一旦归一化上层逻辑就再也不用关心底层是哪个服务在返回数据。第四步downloadMedia 统一调度下载命名约定分发新增服务几乎零成本真正执行添加下载的是downloadMedia(array $data, array $fetchers)。它用了一个非常优雅的命名约定$function download.ucfirst($fetcher); // 如 downloadRadarr也就是说只要有一个名为downloadRadarr的函数存在调度器就能自动找到并调用它。想接入新服务只需实现一个downloadXxx函数并让服务名进入启用列表调度中枢几乎不用改动。去重避免重复添加在api.php的实际调用中downloadMedia执行前会先比对已扫描到的媒体清单——如果某部电影已存在于某个服务库里按title匹配就把它从待下载列表里剔除并记入existing已存在名单。配合matchVideoMedia按tmdbId / imdbId / tvdbId做精确比对有效防止同一作品被重复加入多个下载器。最终返回结果是[fetched 各服务下载结果, existing 已存在来源]语音端据此播报已添加还是你的库里已经有了。三大下载器的职责分工每个下载器都是一个独立、可复用的 Composer 适配器统一放在digitalhigh命名空间下基于 Guzzle 封装 HTTP 请求Radarr 负责电影php/fetchers/digitalhigh/radarr/src/Radarr.php 封装了 Radarr 的 API。核心方法getMoviesLookup按标题搜索电影拿到完整元数据postMovie把电影加入下载队列getRootFolder、getProfiles获取根目录与质量配置。downloadRadarr会先用tmdbId精确匹配电影再带上monitored、rootFolderPath、qualityProfileId等参数提交给 Radarr并自动触发搜索该影片。Lidarr 负责音乐php/fetchers/digitalhigh/lidarr/src/Lidarr.php 面向音乐场景getArtist、postArtist、updateAlbum管理艺术家与专辑postCommand则下发ArtistSearch/AlbumSearch命令触发搜索。downloadLidarr会判断是整个艺术家还是单张专辑走不同的添加与监控逻辑。Watcher 负责影片php/fetchers/digitalhigh/watcher/src/Watcher.php 最简洁addMovie($id, $source)支持 IMDb 或 TMDB 两种 ID。downloadWatcher自动根据手头是tmdbId还是imdbId来选择参数类型一次请求即可把影片加入 Watcher。连接测试与配置testConnection 让配置更省心在用户录入服务信息时testConnection($serviceName)会主动验证连接是否通畅拉取各服务的质量配置Profile列表供用户选择获取根文件夹路径作为默认下载目录把选中的配置写回会话后续下载直接复用。对 Radarr / Sonarr / Lidarr 这类同名服务代码用统一的Uri/Token命名约定批量处理进一步降低了配置成本。如何扩展一个新的下载器得益于这套架构接入一个全新下载服务只需要三步在php/fetchers/digitalhigh/下新建一个适配器类如newsvc/src/NewSvc.php封装其 API在 php/fetchers.php 中补一个scanNewsvc()拼查询地址、parseNewsvc()归一化输出与downloadNewsvc()执行添加在scanFetchers的类型路由与listFetchers启用列表里登记服务名。调度中枢本身几乎无需改动——这正是统一调度设计带来的可维护性红利。总结Phlex 的fetchers模块用路由 → 并行抓取 → 归一化 → 命名约定分发四步流水线把 Radarr、Lidarr、Watcher 等接口各异的下载服务整合成一个对语音端透明的整体。它让说一句就下载变得又快又稳并行请求压缩等待时间统一数据模型屏蔽接口差异命名约定分发让扩展新服务几乎零成本。理解这套架构你不仅搞懂了 Phlex 的语音下载能力也收获了一套可直接复用的多服务统一调度工程范式。【免费下载链接】PhlexA super-sexy voice interface for the Plex HTPC项目地址: https://gitcode.com/gh_mirrors/phl/Phlex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

基于LLM的国家标准文档规则密集型审查与基准评测实践

基于LLM的国家标准文档规则密集型审查与基准评测实践

在标准文本质量管理工作中,人工审查一份上百页的国家标准草案,往往需要同时对照数十项编制规范、术语规则和格式要求。规则条目密集、手册分散、评审周期紧张,导致漏检率居高不下。近年来,随着大语言模型(LLM&#xff…

📅 2026/11/14 20:58:26
实时同步的幕后:mcp_excalidraw的WebSocket广播与浏览器远程渲染图片导出机制

实时同步的幕后:mcp_excalidraw的WebSocket广播与浏览器远程渲染图片导出机制

实时同步的幕后:mcp_excalidraw的WebSocket广播与浏览器远程渲染图片导出机制 【免费下载链接】mcp_excalidraw MCP server and Claude Code skill for Excalidraw — programmatic canvas toolkit to create, edit, and export diagrams via AI agents with real-t…

📅 2026/11/12 8:33:57
Transformer聊天机器人毕业设计实战:源码解析、训练调优与论文写作全攻略

Transformer聊天机器人毕业设计实战:源码解析、训练调优与论文写作全攻略

简介:自然语言处理(NLP)是人工智能领域的热门方向,而聊天机器人作为其典型应用,长期受到学习者和研究者的关注。实现一个高质量的对话系统,离不开对深度学习模型的理解与工程实践。Transformer架构凭借自注…

📅 2026/10/2 16:23:04
MORE NEWS

更多资讯

📰

电工证教考书籍值不值得考?学历不高也能报上名的全流程干货

电工证教考书籍值不值得考?学历不高也能报上名的全流程干货 你是不是也担心自己学历不高,电工证教考书籍根本报不上名?其实不然, 河南洛阳涧西区的水利工程从业者…

📰

汕头电工证上哪里考含金量高?外省证能不能转过来?真相来了

汕头电工证上哪里考含金量高?外省证能不能转过来?真相来了 之前考的证在外省能不能转过来?这个问题是很多特种作业持证人都关心的。特别是在汕头这样的城市,很多电工证是外地考的,到了本地想用,却发现流程复杂、政策模糊,甚至影响了职业发展。本文就从…

📰

台山初级电工证培训通过率揭秘:外省证怎么转过来

台山初级电工证培训通过率揭秘:外省证怎么转过来 之前考的证在外省能不能转过来?这个问题,几乎成了很多台山电工人的心头病。尤其是在现在这个跨省务工、流动性强的时代,很多人拿着外地的证书,在台山找工作却碰了壁。别急,今天咱们就来聊聊台山初级电工…

📰

张明全建筑电工证真实经历:从零基础到拿证就业全解析

张明全建筑电工证真实经历:从零基础到拿证就业全解析 你是不是也在找张明全建筑电工证,但不知道去哪报名,怕被中介坑?别急,我来给你说说我的真实经历,我是郑州金水区的一名应届工程类毕业生,去年刚拿到张明全建筑电工证,现在在工地当电工,月薪800…

📰

电工证培训学校考试:实操考试心里没底怕挂科?上岗必备这些干货

电工证培训学校考试:实操考试心里没底怕挂科?上岗必备这些干货 实操考试心里没底怕挂科?别担心,这是绝大多数第一次参加电工证培训学校考试的学员的真实写照。尤其是像低压电工证、高压电工证这类涉及强电操作的证书,不仅需要理论知识扎实,更得在实操中…

📰

盐城南洋镇电工证通过率揭秘:别被中介坑了,这几点必须知道

盐城南洋镇电工证通过率揭秘:别被中介坑了,这几点必须知道 不知道去哪报名怕被中介坑,盐城南洋镇电工证考试又快开始了,很多人还在四处打听,甚至被一些打着“包过”旗号的中介坑得血本无归。别急,这篇文章就是帮你理清思路,避开那些陷阱,顺利拿到电工…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬