因为 GF 有的时候让我给她提取微博上某个视频的文件,然后再发布到她们的网站上去,所以一开始考虑的是做一个 weibo 的 app ,通过 at 某个号就可以得到视频文件的地址,这样用起来也很方便,然而 weibo 的开放平台真的很不开放, API 也不那么好用:
- at 的评论数据有时有有时没有
- at 的微博数据直接没有,但能给你显示有多少条记录,邮件沟通无果
最终做出来了,由于上面的原因,又删掉了代码,现在是主动提交地址解析,访问地址: https://lab.youth2009.org,提交视频地址后等几秒就可以了,支持直接写 t.cn 那样的短网址。
解决方法
微博上的视频主要是秒拍
主要出现在
- video.weibo.com
- ent.v.sina.cn
- www.miaopai.com/show/
后两种提取方法一样,得到的都是在 gslb ( global server load balance)上的地址,当你请求的时候可以得到最快的 cdn 上的地址。这个地址可以自己拼也可以模拟秒拍调用他们 api 获取,我是模拟获取的。
第一种的视频地址来自 m3u8 文件, m3u8 文件的地址在页面中有,很容易找到,只是从一个视频页面到提取出视频文件链接需要经过几次请求,在 nodejs 中不好写,改成 promise 的写法可能会好。
部署
目前部署在树莓派上,由于最近在搞前端的工作所以就学了点 nodejs 来做做熟悉熟悉,大约用了 express , kue , redis 等。
坑
树莓派上官方库的 redis 是 2.4 版本的, kue 这个 job queue 要求最少需要 2.6 ,因为用了 script load 这个命令,所以最好自己在树莓派上编译最新的 redis ,稍微有点慢,但可以用。
虽然知道 js 中的异步无处不在,但写 nodejs 才体会到,用 kue 常遇到某个 job 卡在那里不动,主要原因就是 job handler 没有正确运行 done 来标记任务做完。
