Skip to content
This repository has been archived by the owner on Jun 6, 2023. It is now read-only.

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

Closed
Hitiko opened this issue Jul 18, 2020 · 7 comments
Closed

Comments

@Hitiko
Copy link

Hitiko commented Jul 18, 2020

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

近期你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
Copy link

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

@andywang425
Copy link

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

@andywang425
Copy link

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

@Hitiko
Copy link
Author

Hitiko commented Jul 23, 2020

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

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

@Dawnnnnnn
Copy link
Owner

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants
@Dawnnnnnn @Hitiko @superexboom @andywang425 and others