Nemo2011 / bilibili-api

哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api
https://nemo2011.github.io/bilibili-api/
GNU General Public License v3.0
2.19k stars 210 forks source link

[漏洞] 关于直播弹幕不出的问题 #486

Closed JiaLeDe closed 11 months ago

JiaLeDe commented 1 year ago

代码如下:

from bilibili_api import live, sync,  Credential
print(sync(Credential(sessdata=SESSDATA, bili_jct=BILI_JCT, buvid3=BUVID3, dedeuserid=DEDEUSERID).check_valid()))
roomid = sync(live.LiveRoom(room_display_id=23240489).get_room_play_info())
room = live.LiveDanmaku(roomid.get('room_id'),
                        credential=Credential(sessdata=SESSDATA, bili_jct=BILI_JCT, buvid3=BUVID3,
                                              dedeuserid=DEDEUSERID))

@room.on('ALL')
async def interact_word(event):
    print(event)

sync(room.connect())

在浏览器复制好ck填进去后,打印为True,但直播弹幕并不会出现,只会打印几个简单信息,弹幕不会获取到

JiaLeDe commented 1 year ago

仓库版本为16.0.0

Drelf2018 commented 1 year ago
pip install bilibili-api-dev==16.0.1b2

尝试更新库后测试弹幕接收是否正常

测试时确保自己的 Credential 为最新状态,最重要的两个参数 sessdatabuvid3

这里提供一份参考测试代码:

from bilibili_api import Credential, live, sync

cred = Credential(
    sessdata=xxx,
    buvid3=xxx,
)
room = live.LiveDanmaku(xxx, credential=cred)

@room.on("DANMU_MSG")
async def _(evt):
    info = evt["data"]["info"]
    name = info[2][1]
    msg = info[1]
    print(name, msg)

async def main():
    await room.connect()

sync(main())
Drelf2018 commented 1 year ago

有用吗

iAilu commented 1 year ago

没有用,跟之前反应完全一致。 并不是完全的收不到弹幕,有时只能收到第一条弹幕,有时间歇性收到一条两条的消息。 不只是弹幕,礼物、入场等消息都获取不到。

Drelf2018 commented 1 year ago

没有用,跟之前反应完全一致。 并不是完全的收不到弹幕,有时只能收到第一条弹幕,有时间歇性收到一条两条的消息。 不只是弹幕,礼物、入场等消息都获取不到。

测试代码,或者测试直播间有吗?确保cred是最新的吗?

iAilu commented 1 year ago

代码就是普通一个事件监听,没有复杂逻辑,cred是每次运行代码时候短信验证码登录获取的cred。 之前出过类似问题是通过增加header中user-agent解决的 #419

Drelf2018 commented 1 year ago

傻逼b站又换接口了,原来的 https://api.live.bilibili.com/room/v1/Danmu/getConf 已经不用了,改成 https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo

https://api.live.bilibili.com/room/v1/Danmu/getConf?room_id=213
{
    "code": 0,
    "msg": "ok",
    "message": "ok",
    "data": {
        "refresh_row_factor": 0.125,
        "refresh_rate": 100,
        "max_delay": 5000,
        "port": 2243,
        "host": "broadcastlv.chat.bilibili.com",
        "host_server_list": [
            {
                "host": "tx-gz-live-comet-03.chat.bilibili.com",
                "port": 2243,
                "wss_port": 443,
                "ws_port": 2244
            },
            {
                "host": "ali-bj-live-comet-09.chat.bilibili.com",
                "port": 2243,
                "wss_port": 443,
                "ws_port": 2244
            },
            {
                "host": "broadcastlv.chat.bilibili.com",
                "port": 2243,
                "wss_port": 443,
                "ws_port": 2244
            }
        ],
        "server_list": [
            {
                "host": "106.53.116.19",
                "port": 2243
            },
            {
                "host": "101.200.42.181",
                "port": 2243
            },
            {
                "host": "broadcastlv.chat.bilibili.com",
                "port": 2243
            },
            {
                "host": "106.53.116.19",
                "port": 80
            },
            {
                "host": "101.200.42.181",
                "port": 80
            },
            {
                "host": "broadcastlv.chat.bilibili.com",
                "port": 80
            }
        ],
        "token": "10d5ORmup5QjiqEo0L2EuVACDF-PQndGVO6SetazMIJ7UN0gHY8_-6Q3AWQ46On27a8h3TIsCcu62joc0QLczdyrq2hkvnoqHqwYOsBy6w9tUpGhMUqh_dv-vp-K6sD3KIAqMx0xkoekPtXGc3US"
    }
}
https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id=213
{
    "code": 0,
    "message": "0",
    "ttl": 1,
    "data": {
        "group": "live",
        "business_id": 0,
        "refresh_row_factor": 0.125,
        "refresh_rate": 100,
        "max_delay": 5000,
        "token": "oDmo_HXN1c716eamjPtxYhTcdQUOeMFwwoVh_E5UEwdlv2Yr-rlIzEf_ZlZaoAtLMK8d1QdAD7XLs9Y9os6DKQoWbHXh4jr8IGFEQLv6Z2Fl8osMFbWLQ5pBCGY2pS6Af7Ulf89SLTfbqObrhLA=",
        "host_list": [
            {
                "host": "tx-gz-live-comet-09.chat.bilibili.com",
                "port": 2243,
                "wss_port": 443,
                "ws_port": 2244
            },
            {
                "host": "ali-sh-live-comet-07.chat.bilibili.com",
                "port": 2243,
                "wss_port": 443,
                "ws_port": 2244
            },
            {
                "host": "broadcastlv.chat.bilibili.com",
                "port": 2243,
                "wss_port": 443,
                "ws_port": 2244
            }
        ]
    }
}
iAilu commented 1 year ago

https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo

https://api.live.bilibili.com/room/v1/Danmu

这是什么接口,是获取历史弹幕的那个接口吗

Drelf2018 commented 1 year ago

历史弹幕获取不了啊,啥意思?

iAilu commented 1 year ago

九月份以来发现代码和各项配置完全一致的情况下下午获取弹幕弹幕好像没什么问题,但是上午基本上获取不到弹幕。 不知道是否b站有新的风控策略。

iAilu commented 1 year ago

历史弹幕获取不了啊,啥意思?

我以为是那个 一进直播间能获取进直播间之前几条弹幕的那个接口

zqf0329 commented 1 year ago

大佬们,搞b站弹幕的有群吗,一起讨论一下

zqf0329 commented 1 year ago

没有用,跟之前反应完全一致。 并不是完全的收不到弹幕,有时只能收到第一条弹幕,有时间歇性收到一条两条的消息。 不只是弹幕,礼物、入场等消息都获取不到。

可能有新的风控点

Drelf2018 commented 1 year ago
pip install bilibili-api-dev==16.0.1b2

尝试更新库后测试弹幕接收是否正常

测试时确保自己的 Credential 为最新状态,最重要的两个参数 sessdatabuvid3

iAilu commented 1 year ago
pip install bilibili-api-dev==16.0.1b2

尝试更新库后测试弹幕接收是否正常

测试时确保自己的 Credential 为最新状态,最重要的两个参数 sessdatabuvid3

有用!粗浅测试了一下没有漏掉弹幕。还请问是什么原因??

Drelf2018 commented 1 year ago
iAilu commented 1 year ago
  • 首先是因为这个更新替换了获取 token 的接口,b站总是改来改去的。
  • 其次强制要求了要传入 sessdatabuvid3,也就是用登录了的账号去获取弹幕。之前是不登录的,自然会有种种限制,比如:收到用户名打码、弹幕不全等问题。

辛苦大佬

iAilu commented 1 year ago
  • 首先是因为这个更新替换了获取 token 的接口,b站总是改来改去的。
  • 其次强制要求了要传入 sessdatabuvid3,也就是用登录了的账号去获取弹幕。之前是不登录的,自然会有种种限制,比如:收到用户名打码、弹幕不全等问题。

使用验证码登录后的buvid3没有存入cred。。导致连接时报 Credential 类未提供 buvid3 或者为空。 git用的不熟不会提交代码。。

Drelf2018 commented 1 year ago

使用验证码登录后的buvid3没有存入cred。。导致连接时报 Credential 类未提供 buvid3 或者为空。 git用的不熟不会提交代码。。

验证码登录不会返回 buvid,返回数据包含:

['DedeUserID=x', 'DedeUserID__ckMd5=x', 'Expires=x', 'SESSDATA=x', 'bili_jct=x', 'gourl=x']

或许你可以在登录完成后用 uuid 生成一个

cred.buvid3 = str(uuid.uuid1())
iAilu commented 1 year ago

使用验证码登录后的buvid3没有存入cred。。导致连接时报 Credential 类未提供 buvid3 或者为空。 git用的不熟不会提交代码。。

验证码登录不会返回 buvid,返回数据包含:

['DedeUserID=x', 'DedeUserID__ckMd5=x', 'Expires=x', 'SESSDATA=x', 'bili_jct=x', 'gourl=x']

或许你可以在登录完成后用 uuid 生成一个

cred.buvid3 = str(uuid.uuid1())

大佬牛皮 我以为buvid3也是登录时换来的凭证 感谢大佬

jhzgjhzg commented 1 year ago

credential.get_cookies()可以获取所有的登录参数,适用于各种登录方式登录后获得的credential

z0z0r4 commented 1 year ago

使用验证码登录后的buvid3没有存入cred。。导致连接时报 Credential 类未提供 buvid3 或者为空。 git用的不熟不会提交代码。。

验证码登录不会返回 buvid,返回数据包含:

['DedeUserID=x', 'DedeUserID__ckMd5=x', 'Expires=x', 'SESSDATA=x', 'bili_jct=x', 'gourl=x']

或许你可以在登录完成后用 uuid 生成一个

cred.buvid3 = str(uuid.uuid1())

uuid 生成的用不了,用spi接口thx,以及实际上未提供的时候 network 会自动缓存个

jhzgjhzg commented 1 year ago

pip install bilibili-api-dev==16.0.1b2 尝试更新库后测试弹幕接收是否正常 测试时确保自己的 Credential 为最新状态,最重要的两个参数 sessdata 和 buvid3

dev版和正式版的python导入都是import bilibili_api吗,如果是的话,如何分别导入这两个库

z0z0r4 commented 1 year ago

没辙吧?

Drelf2018 commented 1 year ago

dev版和正式版的python导入都是import bilibili_api吗,如果是的话,如何分别导入这两个库

为什么要分别导入,bilibili-api-devbilibili-api-python 的超集,是包含关系。也就是说你如果用 dev 版就是用了 python

z0z0r4 commented 1 year ago

建议直接在 pip 切换,这不适合交给代码吧,切换一次要改的太多了

jhzgjhzg commented 1 year ago

dev版和正式版的python导入都是import bilibili_api吗,如果是的话,如何分别导入这两个库

为什么要分别导入,bilibili-api-devbilibili-api-python 的超集,是包含关系。也就是说你如果用 dev 版就是用了 python

这样的吗,彳亍,顺便问一句,会有在dev实现的功能但是不在正式版实装的吗

Drelf2018 commented 1 year ago

暂时没有,因为 dev 分支总归是会提交到 main 分支的

jhzgjhzg commented 1 year ago

乂,对了,还有一个问题,如果在一个环境里同时安装dev和正式版,import bilibili_api导入的是哪个

Drelf2018 commented 1 year ago

乂,对了,还有一个问题,如果在一个环境里同时安装dev和正式版,import bilibili_api导入的是哪个

他们的安装是覆盖关系,取决于你后安装哪个。

Ayayaxw commented 1 year ago
pip install bilibili-api-dev==16.0.1b2

尝试更新库后测试弹幕接收是否正常

测试时确保自己的 Credential 为最新状态,最重要的两个参数 sessdatabuvid3

这里提供一份参考测试代码:

from bilibili_api import Credential, live, sync

cred = Credential(
    sessdata=xxx,
    buvid3=xxx,
)
room = live.LiveDanmaku(xxx, credential=cred)

@room.on("DANMU_MSG")
async def _(evt):
    info = evt["data"]["info"]
    name = info[2][1]
    msg = info[1]
    print(name, msg)

async def main():
    await room.connect()

sync(main())

是不是又改了,现在还要多加一个dedeuserid

Drelf2018 commented 1 year ago

填了sessdata不是会自动获取吗我记得

Ayayaxw commented 1 year ago

填了sessdata不是会自动获取吗我记得

嗯… 前两天用这个测试代码能直接过, 今天报了这个提示: [2023-09-10 18:35:03,888][WARNING] Credential 类未提供 DedeUserID 或者为空。 然后加上dedeuserid就好了,不知道是不是又改了

z0z0r4 commented 1 year ago

填了sessdata不是会自动获取吗我记得

是,可能没更新

Ikaros-521 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0

bilibili-api-dev==16.0.1b2可用

z0z0r4 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0

bilibili-api-dev==16.0.1b2可用

dev 能用的不用 comment 了,迟早发正式版的...

Ikaros-521 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0 bilibili-api-dev==16.0.1b2可用

dev 能用的不用 comment 了,迟早发正式版的...

据说正式版已经更新了

z0z0r4 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0 bilibili-api-dev==16.0.1b2可用

dev 能用的不用 comment 了,迟早发正式版的...

据说正式版已经更新了

这种情况直接等 16.0.1

Ikaros-521 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0 bilibili-api-dev==16.0.1b2可用

dev 能用的不用 comment 了,迟早发正式版的...

据说正式版已经更新了

这种情况直接等 16.0.1

据说已经发布16.1.0

z0z0r4 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0

抱歉没看 release,误触 close issue 了...

16.0.1已发,那为啥提 16.0.0 获取不全,我无语了

Ikaros-521 commented 1 year ago

扫码登录后,用户昵称还是获取不全 bilibili-api-python 16.0.0

抱歉没看 release,误触 close issue 了...

16.0.1已发,那为啥提 16.0.0 获取不全,我无语了

因为没升级的时候的问题,来看了才知道有新版

z0z0r4 commented 11 months ago

一个月没动静了...再有改动再说吧