Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【BUG】直播间相关请求数据被限制 #372

Closed
Huzxiao opened this issue Jul 3, 2023 · 42 comments
Closed

【BUG】直播间相关请求数据被限制 #372

Huzxiao opened this issue Jul 3, 2023 · 42 comments
Labels
bug 漏洞

Comments

@Huzxiao
Copy link

Huzxiao commented Jul 3, 2023

@main_room.on('DANMU_MSG') # 弹幕消息事件回调函数
user_name = event["data"]["info"][2][1] # 获取用户昵称

经过一段时间后 user_name获取到的都是不完整的 以*号填充的名字

另外通过user.User.get_user_info()请求不到数据

@Huzxiao Huzxiao added the need 我要这个 label Jul 3, 2023
@Drelf2018
Copy link
Collaborator

库版本?

pip show bilibili-api-python

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

Version: 15.3.1

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

同样获取的
user_uid = event["data"]["info"][2][0] # 获取uid
在一段时间后都会请求为0

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

库版本?

pip show bilibili-api-python

15.3.1

@Drelf2018
Copy link
Collaborator

user.User.get_user_info() 的问题可以更新库解决

pip install bilibili-api-python --upgrade

直播间相关问题还在研究

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

user.User.get_user_info() 的问题可以更新库解决

pip install bilibili-api-python --upgrade

直播间相关问题还在研究

收到 如果需要相关数据我这里都可以提供

@Drelf2018
Copy link
Collaborator

Drelf2018 commented Jul 3, 2023

为保护用户隐私,未注册登陆用户将无法查看他人昵称

是b站搞的新机制,解决办法是使用 LiveDanmaku 时填写 credential

cred = Credential(sessdata="", bili_jct="")
room = live.LiveDanmaku(21452505, credential=cred)

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

好高的效率!我试一下还会不会出现类似情况

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

为保护用户隐私,未注册登陆用户将无法查看他人昵称

是b站搞得新机制,解决办法是使用 LiveDanmaku 时填写 credential

cred = Credential(sessdata="", bili_jct="")
room = live.LiveDanmaku(21452505, credential=cred)

好像没用呀 还是会被限制

@Drelf2018
Copy link
Collaborator

为保护用户隐私,未注册登陆用户将无法查看他人昵称
是b站搞得新机制,解决办法是使用 LiveDanmaku 时填写 credential

cred = Credential(sessdata="", bili_jct="")
room = live.LiveDanmaku(21452505, credential=cred)

好像没用呀 还是会被限制

确实不行,我再研究下

@Huzxiao
Copy link
Author

Huzxiao commented Jul 3, 2023

为保护用户隐私,未注册登陆用户将无法查看他人昵称
是b站搞得新机制,解决办法是使用 LiveDanmaku 时填写 credential

cred = Credential(sessdata="", bili_jct="")
room = live.LiveDanmaku(21452505, credential=cred)

好像没用呀 还是会被限制

确实不行,我再研究下

加油!

@MisakaAI
Copy link

MisakaAI commented Jul 3, 2023

也许可以参考 SocialSisterYi/bilibili-API-collect#732
auth 包仅包含 roomid 和 protover 时不受影响。
所以,可以试一下仅传入 roomid 和 protover ?

@Drelf2018
Copy link
Collaborator

也许可以参考 SocialSisterYi/bilibili-API-collect#732 auth 包仅包含 roomid 和 protover 时不受影响。 所以,可以试一下仅传入 roomid 和 protover ?

与现在的方案冲突了 #373

@MisakaAI
Copy link

MisakaAI commented Jul 3, 2023

说起来,这应该是对未登录用户的限制,为什么使用 credential 模拟登录后的用户不能解决问题呢……

@Drelf2018
Copy link
Collaborator

说起来,这应该是对未登录用户的限制,为什么使用 credential 模拟登录后的用户不能解决问题呢……

因为现在的认证包中并未发送 buvid 相关信息

async def __send_verify_data(self, ws: ClientWebSocketResponse, token: str) -> None:
verifyData = {
"uid": 0,
"roomid": self.__room_real_id,
"protover": 3,
"platform": "web",
"type": 2,
"key": token,
}
data = json.dumps(verifyData).encode()
await self.__send(
data, self.PROTOCOL_VERSION_HEARTBEAT, self.DATAPACK_TYPE_VERIFY, ws
)

#373 修改后加上了

@Huzxiao
Copy link
Author

Huzxiao commented Jul 4, 2023

说起来,这应该是对未登录用户的限制,为什么使用 credential 模拟登录后的用户不能解决问题呢……

因为现在的认证包中并未发送 buvid 相关信息

async def __send_verify_data(self, ws: ClientWebSocketResponse, token: str) -> None:
verifyData = {
"uid": 0,
"roomid": self.__room_real_id,
"protover": 3,
"platform": "web",
"type": 2,
"key": token,
}
data = json.dumps(verifyData).encode()
await self.__send(
data, self.PROTOCOL_VERSION_HEARTBEAT, self.DATAPACK_TYPE_VERIFY, ws
)

#373 修改后加上了

说起来,这应该是对未登录用户的限制,为什么使用 credential 模拟登录后的用户不能解决问题呢……

因为现在的认证包中并未发送 buvid 相关信息

async def __send_verify_data(self, ws: ClientWebSocketResponse, token: str) -> None:
verifyData = {
"uid": 0,
"roomid": self.__room_real_id,
"protover": 3,
"platform": "web",
"type": 2,
"key": token,
}
data = json.dumps(verifyData).encode()
await self.__send(
data, self.PROTOCOL_VERSION_HEARTBEAT, self.DATAPACK_TYPE_VERIFY, ws
)

#373 修改后加上了

所以现在更新版本就可以了嘛

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 4, 2023

等release

@jhzgjhzg
Copy link

jhzgjhzg commented Jul 6, 2023

需要登录任意账号还是需要登录主播账号

@zerowuxian
Copy link

测试对未登录申请,5分钟后会模糊uid和弹幕信息,可否添加定时申请弹幕流,但是又会有丢失弹幕的风险

@Drelf2018
Copy link
Collaborator

测试对未登录申请,5分钟后会模糊uid和弹幕信息,可否添加定时申请弹幕流,但是又会有丢失弹幕的风险

不是 #373 已经修复了,只要等新release就行了

@JiaLeDe
Copy link

JiaLeDe commented Jul 7, 2023

测试对未登录申请,5分钟后会模糊uid和弹幕信息,可否添加定时申请弹幕流,但是又会有丢失弹幕的风险

不是 #373 已经修复了,只要等新release就行了

大概需要多久呢大佬

@Erekilu
Copy link

Erekilu commented Jul 7, 2023

今天发现直播弹幕的获取会漏掉一部分,我启动两个程序监听同一个直播间,都存在漏弹幕,而且漏的内容不同。不知道是不是有频率限制。15.3.1版本的

@Drelf2018
Copy link
Collaborator

今天发现直播弹幕的获取会漏掉一部分,我启动两个程序监听同一个直播间,都存在漏弹幕,而且漏的内容不同。不知道是不是有频率限制。15.3.1版本的

确定是漏了弹幕吗,有没有可能是两个程序打印弹幕的顺序不一样误以为遗漏?或者是真的有遗漏,这种情况通常发生于每秒弹幕量超过20条时。

@Erekilu
Copy link

Erekilu commented Jul 7, 2023

今天发现直播弹幕的获取会漏掉一部分,我启动两个程序监听同一个直播间,都存在漏弹幕,而且漏的内容不同。不知道是不是有频率限制。15.3.1版本的

确定是漏了弹幕吗,有没有可能是两个程序打印弹幕的顺序不一样误以为遗漏?或者是真的有遗漏,这种情况通常发生于每秒弹幕量超过20条时。

确实是遗漏,而且某个机器遗漏80%,加不加cre都会漏,没有明显的用户等级/粉丝牌特征。程序唯一的改动就是昨天加了每5分钟重连。
`async def refresh_bilibili_room():
while True:
await asyncio.sleep(250)

    config.BLIBILI_ROOM.remove_all_event_listener()
    await config.BLIBILI_ROOM.disconnect()
    config.BLIBILI_ROOM = LiveDanmaku(CONFIG_DATA["room_display_id"], credential=credential)
    config.BLIBILI_ROOM.add_event_listener('DANMU_MSG', _on_danmu_msg)
    config.BLIBILI_ROOM.add_event_listener('SEND_GIFT', _on_gift)
    config.BLIBILI_ROOM.add_event_listener('SUPER_CHAT_MESSAGE', _on_sc)
    asyncio.create_task(config.BLIBILI_ROOM.connect())
    print("已刷新BILIBILI房间并更新事件")`

@Drelf2018
Copy link
Collaborator

你是说在断开和重新连接的过程中会丢失弹幕吗,这个过程就是应该丢失的呀。

@Erekilu
Copy link

Erekilu commented Jul 7, 2023

不是,是整个过程都会漏。我连其他直播间也是这样。

@Erekilu
Copy link

Erekilu commented Jul 7, 2023

不是,是整个过程都会漏。我连其他直播间也是这样。

刚一直在测试,用不同的账号的cre,访问不同分区的直播间,都有漏弹幕的情况。然后等到5分钟后用户信息失效后,弹幕就都不漏了。(15.3.1)

测试代码:

import asyncio
from bilibili_api import live, Credential, Danmaku, sync
from bilibili_api.live import LiveRoom, LiveDanmaku

credential = Credential(
    sessdata="xxx",
    bili_jct="xxx"
)
BLIBILI_ROOM = LiveDanmaku('xxx', credential=credential)

@BLIBILI_ROOM.on('DANMU_MSG')
async def _on_danmu_msg(event):
    content: str = event["data"]["info"][1].strip().replace(" ", "").lower()  # 获取弹幕内容
    user_name = event["data"]["info"][2][1]  # 获取发送弹幕的用户昵称
    uid = event["data"]["info"][2][0]  # 获取发送弹幕的用户UID
    print(f"接受消息{user_name} {uid} {content}")

async def main():
    await asyncio.gather(BLIBILI_ROOM.connect())

if __name__ == '__main__':
    asyncio.run(main())

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

emmm,这下好像不是一会儿能发 release 的了...

今天发现直播弹幕的获取会漏掉一部分,我启动两个程序监听同一个直播间,都存在漏弹幕,而且漏的内容不同。不知道是不是有频率限制。15.3.1版本的

@z0z0r4 z0z0r4 changed the title 【需求】{直播间相关请求数据被限制} 【需求】直播间相关请求数据被限制 Jul 8, 2023
@z0z0r4 z0z0r4 changed the title 【需求】直播间相关请求数据被限制 【BUG】直播间相关请求数据被限制 Jul 8, 2023
@z0z0r4 z0z0r4 added bug 漏洞 and removed need 我要这个 labels Jul 8, 2023
@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

刚一直在测试,用不同的账号的cre,访问不同分区的直播间,都有漏弹幕的情况。然后等到5分钟后用户信息失效后,弹幕就都不漏了。(15.3.1)

测试代码:

import asyncio
from bilibili_api import live, Credential, Danmaku, sync
from bilibili_api.live import LiveRoom, LiveDanmaku

credential = Credential(
    sessdata="xxx",
    bili_jct="xxx"
)
BLIBILI_ROOM = LiveDanmaku('xxx', credential=credential)

@BLIBILI_ROOM.on('DANMU_MSG')
async def _on_danmu_msg(event):
    content: str = event["data"]["info"][1].strip().replace(" ", "").lower()  # 获取弹幕内容
    user_name = event["data"]["info"][2][1]  # 获取发送弹幕的用户昵称
    uid = event["data"]["info"][2][0]  # 获取发送弹幕的用户UID
    print(f"接受消息{user_name} {uid} {content}")

async def main():
    await asyncio.gather(BLIBILI_ROOM.connect())

if __name__ == '__main__':
    asyncio.run(main())

不是,是整个过程都会漏。我连其他直播间也是这样。

无论登录状态都会在前五分钟漏弹幕?而且后五分钟就不会?

漏弹幕是两个程序相互对照的话,有可能是B站自身接口超过一定阈值后随机漏点弹幕

建议考虑对照 WEB 端看下会不会漏 =。=

总算放假了,我今晚试试看

@Erekilu
Copy link

Erekilu commented Jul 8, 2023

刚一直在测试,用不同的账号的cre,访问不同分区的直播间,都有漏弹幕的情况。然后等到5分钟后用户信息失效后,弹幕就都不漏了。(15.3.1)
测试代码:

import asyncio
from bilibili_api import live, Credential, Danmaku, sync
from bilibili_api.live import LiveRoom, LiveDanmaku

credential = Credential(
    sessdata="xxx",
    bili_jct="xxx"
)
BLIBILI_ROOM = LiveDanmaku('xxx', credential=credential)

@BLIBILI_ROOM.on('DANMU_MSG')
async def _on_danmu_msg(event):
    content: str = event["data"]["info"][1].strip().replace(" ", "").lower()  # 获取弹幕内容
    user_name = event["data"]["info"][2][1]  # 获取发送弹幕的用户昵称
    uid = event["data"]["info"][2][0]  # 获取发送弹幕的用户UID
    print(f"接受消息{user_name} {uid} {content}")

async def main():
    await asyncio.gather(BLIBILI_ROOM.connect())

if __name__ == '__main__':
    asyncio.run(main())

不是,是整个过程都会漏。我连其他直播间也是这样。

无论登录状态都会在前五分钟漏弹幕?而且后五分钟就不会?

漏弹幕是两个程序相互对照的话,有可能是B站自身接口超过一定阈值后随机漏点弹幕

建议考虑对照 WEB 端看下会不会漏 =。=

总算放假了,我今晚试试看

无论登不登陆都漏,随机漏,过了5分钟之后就不会了。我目前换成了blivedm没有漏和星号的问题。

@Drelf2018
Copy link
Collaborator

Drelf2018 commented Jul 8, 2023

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

不明真相 现在应该发 release 吗 @Drelf2018

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

pip install git+https://github.com/Nemo2011/bilibili-api.git@dev

@Huzxiao
Copy link
Author

Huzxiao commented Jul 8, 2023

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

不明真相 现在应该发 release 吗?.jpg

pip install git+https://github.com/Nemo2011/bilibili-api.git@dev

快发!等不及了!

@Drelf2018
Copy link
Collaborator

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

不明真相 现在应该发 release 吗 @Drelf2018

发呗,要是不确定能不能正确解决问题你版本号就写 v15.5.1.b0 也行。b0 = beta0

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

不明真相 现在应该发 release 吗 @Drelf2018

发呗,要是不确定能不能正确解决问题你版本号就写 v15.5.1.b0 也行。b0 = beta0

在改 login,改完莫名其妙地手机确认后拿 events 字段会显示过期…我改完一并发

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

不明真相 现在应该发 release 吗 @Drelf2018

发呗,要是不确定能不能正确解决问题你版本号就写 v15.5.1.b0 也行。b0 = beta0

草你确定是 v15.5.1.b0 而不是 v15.5.2.b0 吗?(半恼
image

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 8, 2023

不管了,我没 pypi 权限去删了重发,就这样吧

pip install bilibili-api-python==15.5.1b0 可以试试看了,看看有没有效果

什么叫登不登录都漏,现在的LiveDanmaku压根就没有登录,就算你传了cred进去也是没登。你参考 #373 中对 live.py 的修改,改下你本地的bilibili-api库再试试漏不漏

不明真相 现在应该发 release 吗?.jpg

pip install git+https://github.com/Nemo2011/bilibili-api.git@dev

快发!等不及了!

@Drelf2018
Copy link
Collaborator

Drelf2018 commented Jul 9, 2023

草你确定是 v15.5.1.b0 而不是 v15.5.2.b0 吗?(半恼 image

我看了看 https://semver.org/lang/zh-CN

可能 v15.5.2-beta.0 更合适

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 9, 2023

草你确定是 v15.5.1.b0 而不是 v15.5.2.b0 吗?(半恼 image

我看了看 https://semver.org/lang/zh-CN

可能 v15.5.2-beta.0 更合适

两天内没别的毛病我去发 v15.5.2

@zerowuxian
Copy link

草你确定是 v15.5.1.b0 而不是 v15.5.2.b0 吗?(半恼 image

我看了看 https://semver.org/lang/zh-CN
可能 v15.5.2-beta.0 更合适

两天内没别的毛病我去发 v15.5.2

还有多久发release捏,这个b站限制功能是真的离谱

@z0z0r4
Copy link
Collaborator

z0z0r4 commented Jul 12, 2023

草你确定是 v15.5.1.b0 而不是 v15.5.2.b0 吗?(半恼 image

我看了看 https://semver.org/lang/zh-CN
可能 v15.5.2-beta.0 更合适

两天内没别的毛病我去发 v15.5.2

还有多久发release捏,这个b站限制功能是真的离谱

发了啊…15.5.1b0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 漏洞
Projects
None yet
Development

No branches or pull requests

8 participants