timeslover 发表于 2022-9-13 08:56

(web端)抖音直播间弹幕消息获取

本帖最后由 timeslover 于 2023-3-13 09:23 编辑

(破图修复,因为CSDN图片403了)

**效果演示**
内容包含"用户主页链接,礼物,消息,点赞,直播间人数,直播间粉丝数"

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7ba5ca0810b04a0dad785a54b6db3cb7~tplv-k3u1fbpfcp-zoom-1.image)
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/93f2dc7e2d7b4200a5d6a5ddbef943f1~tplv-k3u1fbpfcp-zoom-1.image)

**寻找参数**
打开直播,在控制台网络可以看到,会有加载一堆的个性化图片
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2382531f855f48a2add745fa56179e01~tplv-k3u1fbpfcp-zoom-1.image)
可以先从这些加载的图片调用栈入手,往回分析,至于为什么从这些图片下手??因为这些个性化图片的加载是伴随danmu消息一起出现的,按照正向的思路去反推,消息和图片一般是会在一个共同的响应体里面
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c4283de4a62b4eaead35996b5efd51cb~tplv-k3u1fbpfcp-zoom-1.image)

随便选择一张图片,进到调用栈里面

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f2e265fbc8dd43b2a9101e9b0a45b37a~tplv-k3u1fbpfcp-zoom-1.image)

F8运行,多运行几次之后,会发现这里会有消息内容出来,这也就验证了我们之前的想法

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ce0584c68ba7461da091b93d795f90e7~tplv-k3u1fbpfcp-zoom-1.image)

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c539b24445c46cca8cd83204c40b6c3~tplv-k3u1fbpfcp-zoom-1.image)

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a131fb3117124f1f88b6ffd5d11a0fae~tplv-k3u1fbpfcp-zoom-1.image)

这里显示的消息,是经过解析之后的内容,可以直接到调用栈最开始的位置,然后往回找线索,下图可以看到,它是一个**setInterval定时器**

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a633b1a82bd54994bb9445ff83efefb3~tplv-k3u1fbpfcp-zoom-1.image)

在上面,可以看到key名称为**sdkinit初始化**

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5850afb554a743faa0b60a4b66cc38fb~tplv-k3u1fbpfcp-zoom-1.image)

通过分析,他的消息处理顺序如下

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/84b526589bd24e3d947317e4b60971f5~tplv-k3u1fbpfcp-zoom-1.image)

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/65f0c902c7f547ac83ad6aa1273b1541~tplv-k3u1fbpfcp-zoom-1.image)

到了这一步,可以直接hook这个this,然后重写publishSync
```js
window._a_ = a;

var publishSync_ = window._a_.publishSync;

window.__a__.publishSync = (i) => {// 这里用箭头函数,不要用function
    let obj = i.payload;
    console.log(obj);
}
```

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1b464f2ad6804d60b44fe6a68ae6a2c7~tplv-k3u1fbpfcp-zoom-1.image)

成功之后,就会有下面的效果

![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c728022e9426483280b0908a9ff193fc~tplv-k3u1fbpfcp-zoom-1.image)

到了这一步,写一个wss服务端,将获取到的消息共享出去

```js

function hookFunc (o) {
    if (_WSS_.readyState === _WSS_.OPEN) {
      _WSS_.send(JSON.stringify(o))
    };
};

var _WSS_ = new WebSocket('wss://x.x.x.x:10086');

window._a_ = a

var publishSync_ = window._a_.publishSync;
window._a_.publishSync = (i) => {// 这里用箭头函数,不要用传统function
    if (_WSS_.readyState === _WSS_.OPEN) {
      _WSS_.send(JSON.stringify(i)) // WSS服务端和数据解析可自行编写,或后台私我获取,此处不做演示
    };
}
```


![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0a0eb3f859284ec7b28cd79a2686c5c7~tplv-k3u1fbpfcp-zoom-1.image)

v3685741 发表于 2022-9-23 23:19

kzy 发表于 2022-9-23 10:54
刚刚好需要,太感谢了,另外大佬GitHub上面可以更新下自动检测嘛

您好。能不能教下怎么HOOK吗?

hamalaya 发表于 2022-9-26 17:24

抖音怎么统计礼物,00

梦回凉亭的她 发表于 2022-9-13 16:01

使用箭头函数,不要用传统function
二者有什么区别吗,或者是优点吗

tk345497747 发表于 2022-9-13 09:09

多谢分享!!!!!!!!!!!!!!!

huansheng 发表于 2022-9-15 22:58

梦回凉亭的她 发表于 2022-9-13 16:01
使用箭头函数,不要用传统function
二者有什么区别吗,或者是优点吗

两种最大的区别是 this指针问题,反正遇事不决最好用箭头函数,具体可以百度两者的区别

thisxzs 发表于 2022-9-13 09:16

厉害了,这样也可以

fengshengshou 发表于 2022-9-13 09:23

感觉好厉害啊,学习了

等到烟火也清凉 发表于 2022-9-13 09:24

这个好 我要学习这个

ljh15 发表于 2022-9-13 09:25

思路可以哦…

一大杯奶茶呀 发表于 2022-9-13 09:37

经常看到那些直播的显示弹幕 哈哈哈哈 原来是这么回事啊

rinima 发表于 2022-9-13 09:40

感谢楼主分享

移情√似水 发表于 2022-9-13 09:43

直接源环境开搞,学习了

icodeme 发表于 2022-9-13 09:48

干货,感谢分享
,,,
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: (web端)抖音直播间弹幕消息获取