bili-notice-hoshino
bili-notice-hoshino copied to clipboard
关于近期插件无法获取新动态的说明
近期B站彻底停用了获取用户空间历史动态的API(既现在插件使用的API,以下称为旧API),而启用了新的获取用户动态列表的API(以下称为新API)。目前旧API获取到的数据大概率是
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"has_more": 0,
"cards": null,
"next_offset": 0
}
}
由于"code"
的值为0,通过了插件的条件判断,因此插件解析实际内容为Null的"card"
字段时发生TypeError: 'NoneType' object is not iterable
错误。这也是#38 和#39 所提及的问题的原因之一。
今天尝试新API时,添加真实浏览器UA和访客Cookies,都无法正常获取用户动态,获取到的返回结果{"code":-352,"message":"-352","ttl":1}
。但是使用无痕浏览器,在访问b站主页获取访客Cookies后,可以轻易获取到正常结果。
根据该Issue提及的问题:用户主页获取投稿列表 -352 新增校验 #868进行分析,也根据另一个Issue:Web 风控相关问题: buvid3, buvid4 获取及激活(ExClimbWuzhi 上传设备指纹消息) #933 进行了尝试,都无法正常获取某个用户的动态列表。
目前还没有找到解决方法,在解决该问题之前插件将处于不可用且不可开发调试状态。
如果您有合适的解决办法,欢迎在此Issus下交流!
附: 关于新API的信息
新API相关信息页面:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/dynamic/space.md
新API示例:
requests.get("https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid=1")
旧API示例:
requests.get("https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid=1")
已经尝试过的方法
- 通过主站获取访客cookies(bvid3)
- 更换各种浏览器UA,及其他headers信息
- 通过
https://api.bilibili.com/x/frontend/finger/spi
获取bvid3和bvid4的值,并通过https://api.bilibili.com/x/internal/gaia-gateway/ExClimbWuzhi
激活 - 添加wbi校验
可能有用但是没有尝试的方法
- 使用dm_img校验方法 https://github.com/SocialSisterYi/bilibili-API-collect/issues/868#issuecomment-2013187848
请求的时候带已登录用户ck倒是能正常返回数据,算是下策但是能用,不过因为api返回的内容变化比较大我也没更进一步测试
请求的时候带已登录用户ck倒是能正常返回数据,算是下策但是能用,不过因为api返回的内容变化比较大我也没更进一步测试
没错,带上登录信息后可以稳定获取。
但是作为机器人,访问频率很高,b站很容易就发现爬虫然后封号,给使用者带来的风险太大了。我还是想以访客的身份进行操作。
我找到了一个云崽框架下的B站动态推送,用的是js写的,作者可以参考下:https://gitee.com/snowtafir/xianxin-plugin/blob/main/model/bilibili.js 第82行开始getBilibiliDynamicInfo函数。 不过他为了避免被风控,推荐的刷新时间为15或30分钟
进度报告:
在仅使用真实浏览器UA和真实cookies:"buvid3"(已登录)的情况下,可以获取动态具体内容。将继续寻求使buvid3生效的方法,并验证该值可以使用的时长与稳定性。