Dawnnnnnn / bilibili-live-tools

python实现的bilibili直播助手
MIT License
793 stars 172 forks source link

对近期直播改版后的“小心心”获取方法的一个猜想 #324

Closed Hitiko closed 4 years ago

Hitiko commented 4 years ago

“叔叔我啊,是真的想赚钱了啊”

近期你B又改直播,砍上船箱子,改亲密度上限,新增21~40级(必须靠氪金)等等等等 不过还好留了一丁点能让大家白嫖的机会,那就是“小心心”

根据官方介绍,当你在你拥有粉丝勋章的房间观看直播(必须是直播,未直播或录播都不行)时,每五分钟可获取一个小心心 小心心可用于点亮勋章,并且每一个相当于50点亲密度,每天可获得24个 虽然最多也就等价于1200包辣条的亲密度,但总比没有好

然后我花了两天时间探究其获取方式,目前发现两个最可疑的: https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/E https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/X

打开正在直播且拥有勋章的直播间时,网页会POST一个E请求,而结果类似这样: E1P.png 其中经过图中heartbeat_interval中的“180(秒)”之后 会发送第一个X请求,其返回结果如下: X1P.png 在此之后1~5秒内用户包裹里会多出一个小心心 并且主播未开播,或是小心心已获取至每日上限时,不会再发送X请求

但是由于我能力有限,只能抓出这两个比较可以的,并不能对其Body等进行更加详细的分析,所以如果作者有空的话希望能研究一下我的猜想是否正确

附一张 其中一个X请求的完整信息: X1R.png 其中Form Data中,id: [1,199,2,4895312] 中的1和199没有发现有变化,而变化的数值是第三个,每次创建一个X请求时会i + 1,而最后是观看的房间ID ets的值是请求E的结果中的timestamp(若是打开直播间第一次发送),或是第一次请求X的结果中的timestamp(若已发送过一次或多次X请求) ts是上一次请求的timestamp加了300之后在这段timestamp加了三位“随机数字”(?)

顺便唠叨一句,我记得我上一次看到这两个请求的时候,域名是“api.live.bilibili.com”

可能说的有点乱,因为我真的只是一个普通高一学生.......希望各位大佬能谅解.........

superexboom commented 4 years ago

前排支持下,不过作者好像都有一阵子没维护了吧,这看起来近期是更不出东西了

andywang425 commented 4 years ago

我也认为是这两个请求决定了用户是否能获得小心心。我前几天写脚本把其它几个心跳都发了,但还是无法获得小心心。而且https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/X这个请求似乎总是在获得小心心之前被发出。
但我没搞明白请求参数中的sbenchmark是怎么生成的,如果有大佬知道的话希望能讲一下。

andywang425 commented 4 years ago

原来已经有大佬把算法开源了https://github.com/lkeme/bilibili-pcheartbeat

Hitiko commented 4 years ago

原来已经有大佬把算法开源了https://github.com/lkeme/bilibili-pcheartbeat

怎么说呢( 鄙人只会抓抓包就没了(

Dawnnnnnn commented 4 years ago

小心心获取依赖 https://github.com/lkeme/bilibili-pcheartbeat 需自行搭建