糖豆网广场舞视频链接解析器(tangdou_video_downloader)

20191009:已失效,但是稍微看了看又改回了accweb,方法应该和这个差不了多少…
PHP写的,也算是真正意义上的第一个我为了解决实际问题而用起自己所学的东西…虽然仅仅解决了一小部分…

在这之前的老长一段时间(少说一年),本人陷入了剪辑广场舞视频,以此来消耗时间的奇怪境地。

家里母后在每天下班后都会跟街坊邻居的大妈们去跳广场舞,用着炸街的音箱和百十块钱的劣质视频播放器来获得健身效果和精神上的快乐。虽然说本人也讨厌广场舞,讨厌给其他人日常生活造成不便的行为(比如大妈跳广场舞占篮球场导致年轻人无法打球之类的…),但是一段时间以来并没有发生什么不正常的现象,且广场舞对健身有益,我也没说什么。

就这样,我便陷入了一个奇怪的境地。

因为听说本人电脑操作高明(所谓「会玩电脑」),以及现在手机app或小程序播放的广场舞因屏幕太小,不易于大妈群体的模仿练习,母后以及街坊们都会让我把广场舞下到那劣质播放器里播放。于是便陷入了:

从播放页上找实际视频地址->下载->用vegas剪去开头的广告以及不必要的片段->渲染->视频压缩->格式工厂再转一份mp3文件备用

…这样的境地。网站一般就是糖豆网、播视网之类的,现在因为糖豆网大而全,只有糖豆网了。可怜我几年前想当up主,为此专门下了vegas想要好好学学,到头来只会拖到轨道里点一个「分割」,还拿来干这个用了…虽然整体过程不算难,但是中间下载以及渲染的空闲时间太长,太消耗时间,还没法分神干别的(因为还没集中精力就又要回到这上面来),让我苦不堪言。尤其是放假回来一下20几个视频,一一做好,一晚上五六个小时就没了…我的笔记本就是我们家配置最高的电脑了,「i7-6700HQ」拿来做渲染…而且,因为做好了后,看我做的还不错,大妈们还会让我干点别的,比如恢复u盘、修个电脑之类的…「我是个前端码农啊喂!(虽然前端很烂…)」每次嚷嚷着额外工作要收费,但因为会惹母后生气,最后还是「真香!」便默默做好…

所以说,公众对于码农的误会还是很深的,以为其在各个方面都无所不能。要不是我还会拆个主机玩个硬件,一般的码农早就拒绝了吧…废话不多说,这次是把糖豆网的获取真实视频链接给做了出来。并不是很难(毕竟我这样的弱鸡都能做出来),原理见下。

==========

先放源码:https://github.com/StargazerSylpha/tangdou_video_downloader

试用地址:https://api.arraycats.net/app/tangdou/

主界面:

使用vid下载:

==========

vid下载原理:

现在微信分享糖豆的视频一般都是小程序分享了,但之前一直都是以「https://share.tangdou.com/play.php?vid=xxxxxxx」的页面来分享。这里便有了「vid」字段。打开页面源码会找到「videourl」字段,往下翻便很容易找到真实地址,便会知道vid和videourl与下载地址的联系。
链接会有个签名,有时间限制(或刷新更新);一次试验的时候发现链接在我博客上跳转过去会显示access denied,猜测会查http referer。
链接有两种形式,「accweb」形式和「aucshare」形式,随机使用。

链接构成:
accweb形式:「https://accweb.tangdou.com/[videourl]-10.mp4?sign=[签名]&stTime=[启用该链接时的unix时间]」。
aucshare形式:「https://aucshare.tangdou.com/[videourl]-10.mp4?k=[签名]&t=[启用该链接时的unix时间]」。

==========

url下载原理:

观察一个链接:「http://www.tangdou.com/v95/dAOQOAMjwT3D3w2.html」。
在源码里能拿到它的vid:「9478073」,但是代入vid下载却识别不出来。原因是它没有的mobile端的页面并不是「https://share.tangdou.com/play.php?vid=9478073」,而是与pc端链接一样,仅仅把「www」换成「m」,为「http://m.tangdou.com/v95/dAOQOAMjwT3D3w2.html」。
多次尝试得出结论:「<=v94及部分v95」可使用vid下载,其他的「v95」只能使用url下载。
打开mobile页面查看源码,发现链接:「https://share.tangdou.com/mp4.php?vid=9478073&img=http://images.tangdou.com/video/201808/20180805223701_8645.jpg&videourl=685E0019089F137E9C33DC5901307461&siteid=21F4A787A918F3CE」。
vid和videourl自不用说,「img」:封面banner地址;「siteid」:不知道也不需要知道。缩减参数进行访问,发现仅有「videourl」时访问也可成功。打开页面查看源代码即可获得aucshare下载地址(暂时没发现会切换到accweb)。

==========

吐槽:

显示界面的链接只有文字,很难看吧…不过我也懒得改了,先搞的这部分再搞的前端。第一次上手mdui,比materialize.css好用多了,不过功能还是有点欠缺。第一感觉还成…
至于url下载界面的地址鉴别我偷了个懒…填入的地址会有3种,处理方式分别为:
share页面->直接得到vid跳到vid下载界面;
www界面->直接将www换成m然后从新get一次(因为直接从www页面获得参数又要重新写一遍很麻烦…直接跳到m页面去了…)
m页面->正统url下载处理…
这玩意还是用curl、strpos、substr最多…

==========

更新记录:

20180807 完成vid下载和url下载部分,使用mdui搞了个简单的index.html界面
20180830
糖豆更换了视频文件服务器域名为「aqiniushare.tangdou.com」(看样子应该是从accweb改过来的,换到了七牛,不过原理与之前完全相同),不再分accweb/aucshare,更新php文件(本该吃着蛋糕安然增肥的日子搞这个真的嗦不粗话…);更新index.html(添加博客文章链接,修改部分代码)

==========

这个玩意的api接口嘛…反正肯定没人用,小众需求…就暂时不弄了。如果需要的话就联系我跟我说,我再做。如果做了的话就在这放api接口文档。

行吧,就这样吧。