开启辅助访问
 找回密码
 立即注册

如何获取熊猫tv的弹幕?

EFLwCYCj 回答数6 浏览数135357
因为是计算机小白。所以自己做有些困难。自己的直播间需要用弹幕。不过不是弹幕助手那种显示出来的。而是我需要各个用户说的文字。我要把它应用到别的软件上。有没有办法?
dgd78 | 未知
(一)抓包分析


        这个比斗鱼的简单多了,最开始只有两个要发送的包,只要把这两个发过去,就可以接收到弹幕了。
现在的问题是第一次发送的那些数据从哪来。
分两步:
(1)从http://www.panda.tv/ajax_chatroom?roomid=10255&_=1454038739756
得到
{
    "errno": 0,
    "data": {
        "sign": "e629e9eca8b561e0dbc2fbf2681e79f7",
        "roomid": 10255,
        "rid": -35304032,
        "ts": 1454038744994
    },
    "errmsg": ""
}
(2)使用上面得到的参数构造如下url
http://api.homer.panda.tv/chatroom/getinfo?rid=-35304032&roomid=10255&retry=0&sign=e629e9eca8b561e0dbc2fbf2681e79f7&ts=1454038744994&_=1454038740461
得到
{
    "errno": 0,
    "errmsg": "",
    "data": {
        "rid": -35304032,
        "appid": "18421055",
        "chat_addr_list": [
            "180.163.220.15:80",
            "180.163.220.15:80"
        ],
        "ts": 1454038745481,
        "sign": "fb4039b64439298bd6869cbec1bb1d0c",
        "authType": "3"
    }
}
上面两个url中的最后一个参数“_”都是13位unix时间戳
这就是所有需要的数据了。其中还有弹幕服务器的地址,每次返回两个,有时候两个一样,有时候不一样,都可以用。

(二)发送数据的格式是什么?


前面4个字节00 06 00 02是固定的,00 60代表后面参数的长度(感谢 @图微 的提醒)。注意的是后面参数之间都由回车符隔开。

第二个包其实是呼吸包,格式固定是00 06 00 00

(三)接收到的数据格式是什么?


每一条弹幕数据都是由 00 06 00 03这四个字节开头的,然后后面第8个字节开始4个字节是此次接收到的数据长度,00 00 03 38的计算方法如下:


然后从41开始接收824个字节,就是这次的所有数据,这一次的数据里面可能有好几条弹幕信息,必须依次取出,每条弹幕开头的4个字节在单次数据中都是一样的,例如本次是01 15 5c 1f,这4个字节第一次出现位置是固定的,可以每次取出,然后比照着识别出每条弹幕信息的开头,这四个字节后面4个字节就是弹幕信息的长度了,计算方法同上,然后就可以得到一条弹幕信息了,类似下面这样的json串:
{
    "type": "1",
    "time": 1454078535,
    "data": {
        "from": {
            "identity": "30",
            "rid": "3604228",
            "__plat": "pc_web",
            "nickName": "翌江别鹤",
            "level": "4",
            "userName": "PandaTv3604228"
        },
        "to": {
            "toqid": 1,
            "toroom": "10015"
        },
        "content": "这图作者心理太阴暗了"
    }
}

这就很明了了。

(四)呼吸包
维持socket连接用的,我抓包发现熊猫tv的呼吸包间隔时间很长,好像有5分钟,没精确计算过,我程序中用的是1分钟发一次呼吸包。呼吸包就4个字节:00 06 00 00

这是今天一天的研究成果,分享之。
代码在:Java/CrawlPandaDanmu at master · gaopu/Java · GitHub
包含idea的工程文件,可在idea中直接打开
用Deepseek满血版问问看
回复
使用道具 举报
rzgjudj | 未知
计算机小白的话直接学python用写好的第三方包呀
用pip安装一下danmu,然后具体的使用是这样的:
[code][/code]画风和上面的都不一样,不要问我为什么学python
第三方包的源码:这里
回复
使用道具 举报
TejUKCJa | 未知
哇哈,原来有人回答过了,写之前没来搜搜真是可惜了。。。。
我也写了一个,顺便学学抓包,JAVA写的,带GUI的:

使用方法及源码:https://github.com/Neutree/PandaTvDanMu
仅供学习交流使用
回复
使用道具 举报
zylsnn | 未知
在做课程设计要爬直播间弹幕的时候发现这个问题,楼上各位的答案都有些久远了。现在熊猫tv已经采用WebSocket连接来传输弹幕信息且采用zlib压缩数据,能找到最近的方法是:hr3lxphr6j/PandaTvDanmakuClient,但数据的解压似乎有些问题,于是自己通过分析前端代码和抓包写了这个repo:whxru/PandaTvDanmaku
回复
使用道具 举报
sniper1980t | 未知
楼上 @啊快睡觉已经说得很透彻了,我在这做一些细节的补充。在与熊猫弹幕服务器建立连接之后,服务器给客户端发送弹幕信息的帧格式如下:

而弹幕消息中type对应的信息为:
回复
使用道具 举报
bgby789 | 未知
这是什么软件抓的包呢?
回复
使用道具 举报
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影