2025-11-26
昨天遗留的 fail 任务标签问题,不打算修复了,反正现在发布任务也不区分渠道了,无所谓的。最后把昨天修复的问题都整合做一个干净的 commit
2025-11-25
修改完成,主要完成了以下内容:
- 增加redis配置,记录各个平台args配置以及默认配置
- 增加定时读取redis平台配置任务
- download时根据url主机名初步识别一下平台,再根据平台获取对应的args参数
- 整合genCommandArgs的逻辑,metadata/download使用group区分
- 增加定时任务,依次读取cookie列表下的file,并依次更新
- 删除多余的cron任务、http路径
- fix execJQ 时参数没有实际利用到的问题
改是改完了,但是遇到了加载配置文件报错
panic: reflect.Value.Interface: cannot return value obtained from unexported field or method [recovered]
panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
goroutine 18 [running]:
testing.tRunner.func1.2({0x1028ddd20, 0x1029765c0})
/Users/daydaylw3/.gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.darwin-arm64/src/testing/testing.go:1734 +0x1ac
testing.tRunner.func1()
/Users/daydaylw3/.gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.darwin-arm64/src/testing/testing.go:1737 +0x334
panic({0x1028ddd20?, 0x1029765c0?})
/Users/daydaylw3/.gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.darwin-arm64/src/runtime/panic.go:787 +0x124
reflect.valueInterface({0x10293e900?, 0x140000e2190?, 0x14000100e60?}, 0x3?)
/Users/daydaylw3/.gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.darwin-arm64/src/reflect/value.go:1492 +0xc8
reflect.Value.Interface(...)
/Users/daydaylw3/.gopath/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.0.darwin-arm64/src/reflect/value.go:1481
daydaylw3/awesomeComm/config.printConfig({0x1028fca80?, 0x140000e20e0?})
/Users/daydaylw3/.gopath/pkg/mod/github.com/!daydaylw3/awesome!comm@v0.0.0-20250602114527-ebf5f8ed1c27/config/config.go:40 +0x2e8
daydaylw3/awesomeComm/config.Parse({0x1028fca80, 0x140000e20e0})
/Users/daydaylw3/.gopath/pkg/mod/github.com/!daydaylw3/awesome!comm@v0.0.0-20250602114527-ebf5f8ed1c27/config/config.go:17 +0xb8
yt-dlp/cfg.InitializeYtdlp(...)
/Users/daydaylw3/Documents/IdeaProjects/awesomeProj/docker/yt-dlp/cfg/config.go:54
是因为加载环境配置的时候,因为结构体中有未导出的字段所以 panic 了(相关issue),需要修改 comm 模块支持
然后又添加了一稿,顺便
- 更新comm依赖
- 更新dockerfile,使用go1.24
然后发现 cron 中的任务删不掉,发现原来是没有配置 callbackURL,只需要改配置即可
接着又发现了 fail 的任务带的标签没有 platform,定位发现是因为 platform 在发布任务时已经确定了,但是因为 cron 中获取任务已经不携带标签了,所以这个问题有点无解,打算第二天再修复
顺便给 awesome 模块更新了,毕竟现在不区分模块了嘛
2025-11-24
狠下心来重构下 yt-dlp 模块 args 逻辑,将 platform 配置上 redis 存储,args 中将尽可能多的配置都支持,并且 get_metadata 和 download 保持同一套逻辑,用 tag group 来区分二者,做到优雅(ai 问出来的),不过还没写完,预计 2、3 天时间吧
2025-11-23
震惊得发现原来 metadata 获取时一直都没有送 --cookies <cookie file path>,那我上周修复 yt 下载问题时是怎么修复的。。。
2025-11-22
由于【xx】平台老师会报错:ERROR: I/O operation on closed file.
所以又添加了一个【xx】平台的 host-cookie 识别(不知道行不行)
感觉要整合一下了,直接做一整个大的 cookie 会不会更好?
2025-11-19
下载 yt 视频报错
yt-dlp下载某些视频还是需要用到 cookie,并且就算添加了 cookie 还是会有下面的警告和报错
WARNING: [youtube] uyDegXJx9Lg: Signature solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to https://github.com/yt-dlp/yt-dlp/wiki/EJS
WARNING: [youtube] uyDegXJx9Lg: n challenge solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to https://github.com/yt-dlp/yt-dlp/wiki/EJS
WARNING: Only images are available for download. use --list-formats to see them
ERROR: [youtube] uyDegXJx9Lg: Requested format is not available. Use --list-formats for a list of available formats
当我在参数里加上了 --list-formats,发现可用的 format 只有下面这些:
[info] Available formats for uyDegXJx9Lg:
ID EXT RESOLUTION FPS │ PROTO │ VCODEC MORE INFO
────────────────────────────────────────────────────
sb3 mhtml 48x27 0 │ mhtml │ images storyboard
sb2 mhtml 80x45 0 │ mhtml │ images storyboard
sb1 mhtml 160x90 0 │ mhtml │ images storyboard
sb0 mhtml 320x180 0 │ mhtml │ images storyboard
缺少了很多的视频格式
然后根据这个警告信息:
WARNING: [youtube] uyDegXJx9Lg: Signature solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to https://github.com/yt-dlp/yt-dlp/wiki/EJS
查询 ai,如下回答:
这是 yt-dlp 在解析 YouTube 视频时签名解密(signature solving)失败的提示。
背景说明
YouTube 的视频链接通常会带有加密签名参数,yt-dlp 需要运行解密的 JavaScript 代码来 “破解” 这个签名才能拿到完整正确的视频格式列表和下载链接。
这个过程依赖于:
- JavaScript 运行环境,比如 Node.js。
- yt-dlp 维护的 “挑战求解器脚本”(challenge solver script),用来动态解析 YouTube 的签名加密算法。
你遇到这个警告说明:
- 本地未安装支持的 JavaScript 运行环境(Node.js 是最常见的)。
- 或者 yt-dlp 相关的脚本未能正常匹配网页的最新签名算法。
我该怎么做:
你警告里面给的链接 —— https://github.com/yt-dlp/yt-dlp/wiki/EJS, 这页面有详细说明如何解决签名破解失败问题,包含依赖环境和配置方法。
然后我查看了上面的 EJS 链接,在 macOS 本地安装了 node 和 deno:
brew install node
brew install deno
这时候再执行就可以看到更多的 format 了
更新到 dockerfile 中,但是失败了 deno 需要很多底层的依赖,alpine 容器都缺失,只能改为使用 Ubuntu 的镜像做一个试试
- 使用了静态编译
- 直接使用 root 用户,就不要搞什么权限管理了
- 编译耗时奔着 25mins+ 就去了啊~~(想哭)
整理一下功能
- bili,xhs 需要 cookie
- yt 有时需要 cookie 有时又不需要(直接认为需要吧)
- twi 需要,但是不需要经常变(应该是吧)
- 其他不太需要(暂时还没发现)
最终决定识别油管的 hostname,识别到了就使用 YouTube cookie file
2025-11-18
YuYuWechat 项目在我新电脑上运行不起来(主要原因是 wx 版本升级到了 4.1.4.17)而其底层依赖的 easyChat 只支持到了 3.9x 版本
2025-11-16
yt-dlp 解决了 yt 视频获取 metadata 报错
WARNING: Only images are available for download. use --list-formats to see them
ERROR: [youtube] WmteTPy_Op0: Requested format is not available. Use --list-formats for a list of available formats
发现现在在 config file 中不能配置 cookie 相关的信息,不然就会报这个错(奇了怪了,之前都是改为必须有 cookie)
所以最后就是简单的修改了下配置就好了
2025-11-17
yt-dlp 本地自测太麻烦了,测试案例里面添加了 case,指定了各种配置文件放置的目录,之后将文件放在目录下直接自测就好了(主要都会是获取 metadata 出错的问题排查吧)