Skip to content
斗鱼tv房间签到脚本,关注列表批量签到,90%抢占签到手速榜
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
img Add files via upload Oct 15, 2019
README.md
douyu_authlogin.py Update douyu_authlogin.py Oct 15, 2019
douyu_roomcheckin.py 重构了代码,支持token过期后利用ltp0自动获取 Jan 20, 2020
requirements.txt Add files via upload Oct 15, 2019

README.md

DYRoomCheckIn

斗鱼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,大部分是第一,当然总有单身多年的手速惊人,我真的服。

改进空间

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

You can’t perform that action at this time.