尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

微信视频号下载器:`deploy sph` 视频号查询 Worker 部署指南与实现原理

发布时间:2026/9/25 2:47:52

资讯中心
01
ARTICLE

微信视频号下载器:`deploy sph` 视频号查询 Worker 部署指南与实现原理

微信视频号下载器:`deploy sph` 视频号查询 Worker 部署指南与实现原理
桌面应用视频网络MCP 服务【免费下载链接】wx_channels_download微信视频号下载器项目地址https://gitcode.com/gh_mirrors/wx/wx_channels_download点击查看免费下载导读本文围绕微信视频号下载器项目中internal/workers/sph/目录下的视频号查询 Worker展开完整讲解其功能定位、deploy sph命令行部署流程、cloudflare.sph*配置项含义以及 Worker 内部两阶段接口调用与图集 ZIP 打包的实现细节。读完本文你将掌握如何通过一条命令把视频号视频信息查询页面发布到 Cloudflare Workers理解其访问认证模型Bearer/Basic Auth与可用 API并能结合源码看懂分享链接解析、feed 信息获取和 ZIP 生成的整体调用链。一、功能定位无服务器的视频号视频信息查询服务在微信视频号下载器的整体架构中internal/workers/sph/目录承载了一个完整的 Cloudflare Worker 子项目其作用是把视频号视频信息查询能力部署为一个独立的无服务器服务。该目录包含三个核心文件worker.js视频号查询 Worker 的入口实现了全部请求路由、鉴权与上游接口调用逻辑index.htmlWorker 根路径返回的查询页面含内联样式与前端脚本deploy.go部署编排代码负责读取共享图标、上传 Worker、配置绑定并解析 workers.dev 地址。CLI 入口只负责读取cloudflare.sph*配置并调用sph.Deploygo run . deploy sph部署成功后即可通过浏览器访问worker-name.subdomain.workers.dev得到查询页面也可以通过 API 形式直接调用实现输入分享链接 → 返回视频信息的能力。按照 部署文档 的说明该服务仅供自己使用不要提供给外部因为其依赖元宝yuanbao接口解析链接存在被限制使用的风险。二、部署前的配置准备2.1 需要准备的配置项deploy sph依赖cloudflare命名空间下的 5 个配置字段模板位于 config.template.yamlcloudflare: accountId: your-cloudflare-account-id apiToken: your-cloudflare-api-token sphWorkerName: sph sphCookie: sphCredential: 各字段含义如下配置项说明cloudflare.accountIdCloudflare 账户 ID可在 Workers 页面找到cloudflare.apiTokenCloudflare API Token需 Workers 读写权限Workers Scripts:Editcloudflare.sphWorkerName视频号查询 Worker 名称部署后用于标识该 Workercloudflare.sphCookie视频号接口所需的元宝 Web 端 Cookiecloudflare.sphCredential访问页面和 API 所需的凭证部署时注入ACCESS_CREDENTIAL环境变量其中sphCookie需要登录 yuanbao.tencent.com 网站后获取。元宝 Web 端 Cookie 有效期约 1 个月失效后需要重新登录获取新 Cookie并在 Cloudflare Worker 中更新COOKIE环境变量。从部署编排源码看这两个敏感值都以plain_text绑定注入 Worker见 deploy.goBindings: []worker.Binding{ {Type: plain_text, Name: COOKIE, Text: options.Cookie}, {Type: plain_text, Name: ACCESS_CREDENTIAL, Text: options.Credential}, },2.2 配置校验逻辑deploy.go 中的normalize_deploy_options会对所有配置做 Trim 归一化并强制校验以下必填项缺少任意一项部署即失败cloudflare.accountId未配置 → 报错未配置 cloudflare.accountIdcloudflare.apiToken未配置 → 报错未配置 cloudflare.apiTokencloudflare.sphWorkerName未配置 → 报错未配置 cloudflare.sphWorkerNamecloudflare.sphCredential未配置 → 报错未配置 cloudflare.sphCredential凭证是强制项项目根目录为空 → 报错项目根目录不能为空注意sphCookie不在此处强制校验但 Cookie 为空时 Worker 调用元宝解析接口将无法完成身份认证实际使用中仍必须配置。三、部署流程与产物3.1 执行部署命令wx_video_download deploy sph命令入口位于 cmd/deploy.go其Run回调调用deploy_sph()从 Viper 配置读取上述 5 个字段后调用sph.Deploy见 cmd/deploy.go。部署过程中会显示两个进度阶段worker上传 Worker 脚本worker_subdomain启用并解析 workers.dev 地址。3.2 部署编排做了什么Deploydeploy.go的核心流程如下读取共享图标从build/icon.png读取图标字节经build_icon_module编码为 base64 并生成export default base64;形式的 ES module 字符串见 deploy.go。上传 Worker 脚本通过worker.NewClientpkg/cloudflare/worker/deploy.go调用 Cloudflare REST API默认https://api.cloudflare.com/client/v4以 multipart 方式上传metadata包含main_module worker.js、compatibility_date 2024-01-01和两个plain_text绑定COOKIE、ACCESS_CREDENTIAL主模块worker.js通过//go:embed嵌入附加文件index.html与动态生成的icon.js。部署超时 2 分钟worker_deploy_timeout。启用 workers.dev 子域调用EnableSubdomain开启路由随后GetSubdomain查询账户级子域名最终拼出完整访问地址https://worker-name.subdomain.workers.dev。若这两个步骤失败仅记录 warning不影响已上传成功的 Worker见 deploy.go。部署完成后命令行会输出摘要表格包含 Worker 名称、Worker ID 与访问 URL。四、Worker 的路由与访问认证4.1 请求路由Worker 入口worker.js在fetch处理器中按路径和方法分发请求MethodPath说明OPTIONS任意CORS 预检返回跨域头GET/favicon.ico、/icon.png返回 base64 解码后的图标 PNGGET/返回查询页面index.htmlPOST/api/fetch_video_profile通过分享链接获取视频号视频信息POST/api/download_feed_zip将图集及 BGM 打包为 ZIP其他—返回404CORS 头worker.js允许任意来源、POST, OPTIONS方法暴露Authorization, Content-Type与Content-Disposition头因此该 API 也可供前端或其他跨域服务直接调用。4.2 鉴权模型页面与静态资源是公开的只有/api/路径需要凭证见 worker.js。鉴权逻辑支持两种凭证格式Bearer TokenAuthorization: Bearer credentialworker.jsBasic Auth用户名固定为wxchannels密码为凭证本身worker.js。凭证校验使用SHA-256 摘要对比而非明文比较对客户端提供的凭证与env.ACCESS_CREDENTIAL分别计算 SHA-256再逐字节异或比对恒时比较避免时序侧信道见 worker.js。错误语义未配置ACCESS_CREDENTIAL时返回503access credential is not configured凭证不匹配时返回401unauthorized认证失败响应带Cache-Control: no-store避免缓存。浏览器访问根路径时index.html前端脚本会在本地localStorage键名wxchannels_credential保存凭证之后对同源 API 的请求自动携带Bearer头见 index.html。因此文档中的登录方式描述为浏览器访问时显示 HTTP Basic Auth 登录框用户名固定wxchannels密码填sphCredential。直接调用 API 的 curl 示例# Bearer Token curl -H Authorization: Bearer sphCredential \ -H Content-Type: application/json \ -d {url:https://weixin.qq.com/sph/example} \ https://worker-name.subdomain.workers.dev/api/fetch_video_profile # Basic Auth curl -u wxchannels:sphCredential \ -H Content-Type: application/json \ -d {url:https://weixin.qq.com/sph/example} \ https://worker-name.subdomain.workers.dev/api/fetch_video_profile五、核心 API 一fetch_video_profile的两阶段调用链POST /api/fetch_video_profile接收{url: 分享链接}缺url返回400。随后fetchVideoProfileworker.js按两个阶段顺序执行5.1 阶段一解析分享链接调用元宝接口https://yuanbao.tencent.com/api/weixin/get_parse_resultPARSE_URL见 worker.js请求体为{type: video_channel_url, url: shareUrl, scene: 1}请求携带完整的浏览器指纹头UA、sec-ch-ua、t-userid、x-agentid等见 worker.js并把部署时注入的COOKIE作为cookie头传入。响应中必须包含data.wx_export_id否则视为解析失败。随后从解析结果的playable_url查询参数中提取两样东西见 worker.jstoken→generalTokeneid→exportId这两个值将作为阶段二的入参。5.2 阶段二获取 feed 信息调用微信视频号预览接口https://channels.weixin.qq.com/finder-preview/api/feed/get_feed_infoFEED_INFO_URL见 worker.js请求体为{baseReq: {generalToken: generalToken}, exportId: exportId}请求 URL 附加_rid由时间戳十六进制 8 位随机十六进制组成见generateRidworker.js与_pageUrl参数Referer为对应的 finder-preview 页面地址含token与eid。响应错误处理较为细致feedInfoResponseErrorworker.jserrCode ! 0时抛出带errCode与 HTML 去标签化后的errMsg的错误data.errMsg中type ! 0或存在 title/content 时构造FeedInfoUnavailableErrorcode FEED_INFO_UNAVAILABLEstatus 422表示视频无法播放类业务错误HTML 实体会经过decodeHtmlEntities与plainTextFromHtml清理支持amp;、#x...;、#...;等见 worker.js。该错误会以结构化字段code与details随 HTTP 响应返回给调用方见 worker.js前端页面据此渲染错误卡片。5.3 响应结构成功时返回视频号get_feed_info的原始 JSON页面端会从中提取见 index.htmlfeedInfo视频描述、createtime、封面coverUrl、picInfo图集、bgmInfo背景音乐、h264VideoInfo/h265VideoInfo中的videoUrl等authorInfo作者昵称、头像与认证图标视频地址优先级h264VideoInfo.videoUrlh265VideoInfo.videoUrlfeedInfo.videoUrl。六、核心 API 二download_feed_zip图集打包对于图文类视频号内容页面会展示下载图集 ZIP按钮其实现为POST /api/download_feed_zip。该接口接收查询得到的 feed JSON由extractFeedZipFilesworker.js提取可下载文件feedInfo.picInfo中的每张图片命名为01.jpg、02.jpg…按索引补零bgmInfo.bgmUrl || bgmInfo.mediaStreamingUrl对应的背景音乐命名为bgmName.mp3文件命名经过sanitizeZipEntryName清洗非法字符\ / : * ? |替换为_见 worker.js。打包前还会先写入一个info.json即格式化后的完整 feed 数据。文件名兜底策略baseFilenameworker.js优先使用描述截断 160 字符无描述时使用发布时间20260101_120000格式均无则用channels_feed。值得关注的是ZIP 生成逻辑是纯 JavaScript 手写实现未依赖任何第三方库从 CRC32 表生成worker.js、ZIP 本地文件头与中央目录头写入buildZip与writeZipHeaderworker.js到最终的 DOS 时间戳、EOCD 记录拼接全部在 Worker 内完成返回application/zip并带 UTF-8 编码的Content-Disposition文件名。同时 Worker 端还会根据文件实际Content-Type或 URL 后缀补全扩展名ensureFileExtensionworker.js。若图集中没有可下载的图片或 BGM接口返回400no downloadable picture or bgm found。七、查询页面从链接到下载的一站式体验Worker 根路径返回的 index.html 是一个自包含的单页查询工具采用经典 Model-View 结构FeedProfileModelFeedProfileViewindex.html主要交互流程为粘贴视频号分享链接如https://weixin.qq.com/sph/xxx点击查询或回车触发POST /api/fetch_video_profile结果区渲染视频卡片可播放的视频预览video 封面 poster、作者昵称头像、描述、赞/爱心/转发/评论计数视频内容提供下载视频按钮图文内容提供下载图集 ZIP按钮页面底部以details折叠展示原始响应 JSON便于调试。页面还实现了完整的错误呈现凭证无效401提示凭证无效请在上方输入正确的访问凭证并保存后重试FEED_INFO_UNAVAILABLE则展示视频无法播放的具体原因index.html。八、与 MCP 的联动除 CLI 外deploy sph也暴露为 MCP 工具deploy_sph_workersph_tools.go。该工具不接收任何敏感参数而是直接读取应用配置中的cloudflare.accountId、cloudflare.apiToken、cloudflare.sphWorkerName、cloudflare.sphCookie和cloudflare.sphCredential部署或覆盖同名远端 Worker 并返回 workers.dev 地址。由于会覆盖远端 Worker调用前必须获得用户确认可用get_config先检查这些字段的configured状态详见 MCP 文档。这为通过 MCP 协议远程触发部署提供了入口。九、常见问题与注意事项Cookie 失效元宝 Web 端 Cookie 有效期约 1 个月失效后需重新登录获取新 Cookie 并在 Cloudflare Worker 中更新COOKIE环境变量否则fetch_video_profile阶段一将失败。凭证未配置cloudflare.sphCredential未配置时本地部署命令会直接拒绝即便强行部署Worker 对/api/请求也会返回503。视频无法播放接口返回FEED_INFO_UNAVAILABLEHTTP 422表示 feed 信息中的业务错误如视频已下架前端会展示具体 title/content。不要对外公开该服务依赖元宝接口解析链接公开使用存在被限制使用元宝的风险文档明确要求仅供自己使用。API Token 权限部署需要Workers Scripts:Edit权限提示信息见 cmd/deploy.go。参考资料视频号查询 Worker 说明目录结构总览与部署入口说明部署命令文档配置项、认证方式与 API 列表的权威说明部署编排实现Worker 上传、绑定注入与 workers.dev 解析Worker 入口实现路由、鉴权与两阶段接口调用查询页面实现前端交互、凭证保存与结果渲染Cloudflare Worker 客户端multipart 上传与子域解析的底层封装配置模板cloudflare.sph*字段默认值MCP 部署工具deploy_sph_worker工具定义赞分享桌面应用视频网络MCP 服务【免费下载链接】wx_channels_download微信视频号下载器项目地址https://gitcode.com/gh_mirrors/wx/wx_channels_download点击查看免费下载相关推荐一句话如何生成完整AI视频ViMax快速上手指南一句话如何生成完整AI视频ViMax快速上手指南 如果你只想要一个想法变成成片不想自己写剧本、画分镜、盯角色长相ViMax 是一个可本地运行的开源 AI桌面应用视频网络MCP 服务CopilotKit × Langroid聊天内 Human-in-the-LoopHITL演示的架构剖析与 QA 验证实践CopilotKit × Langroid聊天内 Human in the LoopHITL演示的架构剖析与 QA 验证实践 CopilotKit 的 L桌面应用视频网络MCP 服务帧率上不去显卡性能优化的实操路径从选诊断工具到温度墙调校帧率上不去显卡性能优化的实操路径从选诊断工具到温度墙调校 新卡跑老游戏帧率却卡在五六十帧从游戏里突然掉帧、风扇狂转这类真实场景出发这里给出一条完整的显桌面应用视频网络MCP 服务上一篇如何快速掌握InferCNV单细胞RNA-Seq数据分析的完整操作指南下一篇PP-OCRv6_medium_det社区贡献指南如何参与开源项目并优化文本检测模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。