前阵子刷视频,看到有人在讨论《365dni》这部电影,说百度网盘里存着资源,西瓜视频上有剪辑,我脑子一抽:能不能用Go写个小工具,把这三者串起来?不是真去下载盗版啊,就是技术练手——从百度网盘拉取文件清单,用Go做个简单服务,然后推送到本地播放器,你别说,折腾完感觉挺有意思的。
为啥选Go?没别的原因,就是省心
我自己是个懒人,Python写脚本快,但部署老缺环境,Go不一样,编译成一个二进制文件,丢服务器上就跑了,处理百度网盘的API请求、解析返回的JSON、再搭个本地Web界面——Go标准库里的net/http、encoding/json完全够用,不用装第三方包。
当时想的是:先写个命令行工具,把百度网盘里某个文件夹的列表拎出来,然后本地起个服务,响应西瓜视频那种播放请求(其实是对应本地文件)。听着复杂,拆开就三步:

- 调用百度网盘Open API(先得申请个应用,拿access_token)
- 把返回的列表用Go结构体接住
- 起个HTTP服务,让用户能像搜西瓜视频一样搜本地文件
踩坑记录:百度网盘的授权真是“人间值得”
第一步就被绊了,百度网盘的API授权流程:你得先让用户在浏览器里点个链接,授权后拿到code,再用code换token,Go代码里怎么自动开浏览器?我用exec.Command调了系统默认浏览器,但是用户授权完,回调地址需要自己写个本地服务器接收code。
那段时间我每天都和API返回的“invalid_grant”斗智斗勇,最后发现是token过期了,网盘API的access_token有效期只有30天,解决方案?写个定时任务,每天凌晨四点刷新一下,代码里就一个函数:
func refreshToken(refreshToken string) (string, error) {
// 用百度文档里的POST请求,拿新token
}
写到这我想吐槽:百度网盘的文件列表接口,默认一页只返回20个文件,我存了上千个电影文件,得写循环翻页,后来用Go的goroutine并发去拉,速度提升了一倍,但得注意频率限制——百度API单日调用限制很高,但每秒有阈值,我加了time.Sleep(100 * time.Millisecond)。
西瓜视频的“灵感”:搜索逻辑换到本地
西瓜视频的推荐算法我学不来,但它的搜索框交互我偷过来了,在本地Web页面上做个输入框,敲关键词,后端就模糊匹配文件名,用的Go标准库strings.Contains,不区分大小写,搜索结果用表格展示:
| 文件名 | 文件大小 | 修改日期 | 操作 |
|---|---|---|---|
| 365dni.mp4 | 2GB | 2023-05-01 | 播放 |
| 365dni_2.mp4 | 5GB | 2023-06-15 | 播放 |
点击“播放”按钮,服务端响应时设置Content-Disposition: inline,浏览器直接能打开播放。VLC播放器支持网络流,我直接把地址丢进去就能放了,西瓜视频那种“点击即播”的感觉,算是有个九成像。
做完了有什么用?
说实话,对大部分人没用,但对像我这样存了一堆电影在网盘、又喜欢在本地看的人来说,省了每次手动搜文件,而且Go编译出来的文件才10MB,放一台老树莓派上跑,全天挂着,百度网盘数据同步一次之后,本地搜索响应在毫秒级。
有朋友问我:“那你直接下载到硬盘不就行了?”我白了他一眼:“你不懂囤积癖。”网盘里存着不看,但得有搜索功能,就像西瓜视频那样搜“365dni”,一秒出结果,虽然文件可能永远不点开,但那种“想找就能找到”的安全感,值回编码时间了。
最后这堆代码没分享到GitHub,因为API Key硬编码在代码里需要抽离,还得写配置文件解析,嫌麻烦,但你要也有这个需求——搜网盘文件、本地播放——用Go撸一个,半天搞定,核心逻辑真不长,就百来行,配个简单的HTML页面,字体调大点,家里老人也能用。
好啦,我要去继续看《365dni》第三部能不能用我这个工具播了,希望百度网盘API别又改……
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/nengyuan/1565.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《365dni、百度网盘和西瓜视频,我居然用Go语言把它们串起来了》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:前阵子刷视频,看到有人在讨论《365dni》这部电影,说百度网盘里存着资源,西瓜视频上有剪辑,我脑子一抽:能不能用Go写个小工具,把这三...