DYRoomCheckIn icon indicating copy to clipboard operation
DYRoomCheckIn copied to clipboard

斗鱼tv房间签到脚本,关注列表批量签到,90%抢占签到手速榜

DYRoomCheckIn

HitCount

斗鱼tv房间签到脚本,关注列表批量签到,90%抢占签到手速榜

声明

此脚本只用于教育研究用途,其他用途后果自负

使用方法

环境要求 python3.7
1.下载并解压
2.pip3 install -r ../requirement.txt
3.将自己的cookie复制到douyu_roomcheckin.py的cookie处(cookie的获取方法不会请百度)

cookies=''

4.python3 douyu_roomcheckin.py

设计思路

这个脚本最初的目的只是为了学习反混淆,结果自己太菜,只能换了思路解决了问题,但js的反混淆还是没有进步,如有大佬有空,可以指点一下
最初是看到鱼吧很多人在秀自己的签到手速榜,在想可不可以做个脚本自己动,于是开始了学习之旅。

1.0 油猴脚本

最初想法是在web端利用油猴脚本来签到,检测主播直播状态利用了官方的接口 open.douyucdn.cn/api/RoomApi/room/{roomid} ,脚本模拟点击签到。

所遇问题:

1.官方接口延时较大,不能实时获取到开播状态
2.资源利用太多,无法时刻挂着浏览器

结果确实如此,签到速度很慢,基本排名在50名开外,主要原因是官方接口延时太大,可能是我选的接口问题。

2.0 web签到接口

pass掉油猴脚本后,开始解决前面遇到的2个问题:

1.~~重新寻找实时显示主播直播状态的接口,后来发现官方的关注列表接口延时很小,基本做到了一开播,关注列表就会显示开播,第一个问题已解决。~~
2.~~为了解决资源占用问题,只好采用找到签到接口,模拟请求来解决。接口很容易就可以找到,但是存在一个请求参数ctn,试着对js反混淆,可惜自己水平太菜,最后也没有结果,这个过程耗时最久,学到了一些,但是却没有结果。~~

~~由于第二个问题到现在也没解决,2.0的思路也凉凉了。~~
web签到的问题已经解决
感谢油猴脚本斗鱼自动搜火力+发AI弹幕+极速签到=抢鱼丸红包沙发神器(日进2W丸子,有图为证)带来的关于ctn参数的解决方案:
ctn的value是cookie中的一个参数acf_ccn,由于我在自己cookie中没有发现这个ccn,油猴脚本中acf_ccn同样是构造得来。
当然web端签到需要加上cookie,同时cookie中也要包含acf_ccn,具体实现代码我也没写,相比于手机端签到构造token确实少了很多,有兴趣的可以自己写一下。

3.0 手机端签到

因为第二个问题实在没有结果,心有不甘,开始尝试对手机端进行抓包分析,很幸运的是在房间签到这块斗鱼并没有做到二次证书加密,顺利找到了签到接口,最开始觉得希望不大,后来发现接口和web端并不一样。
手机端的接口在请求参数中只存在一个简单的房间参数rid,但是在请求头header中多了一个token
token的样子大概是这样

token=669xxx_x_xxxxxxx_x_xxxxxx

分成了5个部分,之间用_连接。
刚遇到这个问题我以为要对app进行逆向,后来对照请求包发现自己的cookie中有的参数和token中相同,但是token后面的几段没有找到对应的。心灰意冷之下开始查看其他的包,在弹幕的包里幸运找到了和token相同的value,成功解析了token的构造方式

token={acf_uid}_{acf_biz}_{acf_stk}_{acf_ct}_{acf_ltkid}

事实上,确实都是cookie的一些值,可惜手机端有些值无法找到,参照web的cookie,发现web的cookie这几个value都可以看到,尝试利用web的cookie构造token,成功。
token这个参数在app端很多地方都用到了,理论上都可以实现自动化,有兴趣可以自己实现。
至此,所有问题都已经解决,只差编写脚本了。

脚本编写

最开始没想着公开脚本,毕竟所需要的接口,参数的解决思路都公开了,理论上每个人自己就可以编写脚本,想了想还是公开算了,直接做了批量的签到,自己抢单一房间可以自己改改,代码很丑,请见谅。

cookie的选择

这里复制自己的cookie,我在脚本里注释好了使用方法,这里再说一次。
正常登录后的cookie是很多的,但是时效性好像很短,具体时间我记不大清了,好像是一周左右,这会导致脚本要隔段时间重新复制下cookie,其实也足够使用。
所以我尝试研究了下他的authlogin,发现在登录过程中会有一个LTP0的cookie,这个类似于百度的BDUSS,可以用它来获取登录后完整的cookie,时效是半年,但是获取方式我自己也没分析,只是抓包过程看到的。有兴趣的可以自己尝试一下。

测试结果

现在的脚本还有很多瑕疵,通过一天的测试,不断改进,签到的效果见下图

基本上最次都是前10,大部分是第一,当然总有单身多年的手速惊人,我真的服。

改进空间

后来,我想到的改进的方案采用多线程,可能会更快,由于我水平有限,大概率不会更新,希望有能力的可以试试。