bili-notice-hoshino icon indicating copy to clipboard operation
bili-notice-hoshino copied to clipboard

关于近期插件无法获取新动态的说明

Open kushidou opened this issue 10 months ago • 4 comments

近期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后,可以轻易获取到正常结果。 image

根据该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

kushidou avatar Mar 31 '24 15:03 kushidou

请求的时候带已登录用户ck倒是能正常返回数据,算是下策但是能用,不过因为api返回的内容变化比较大我也没更进一步测试

iona-s avatar Apr 01 '24 13:04 iona-s

请求的时候带已登录用户ck倒是能正常返回数据,算是下策但是能用,不过因为api返回的内容变化比较大我也没更进一步测试

没错,带上登录信息后可以稳定获取。

但是作为机器人,访问频率很高,b站很容易就发现爬虫然后封号,给使用者带来的风险太大了。我还是想以访客的身份进行操作。

kushidou avatar Apr 02 '24 01:04 kushidou

我找到了一个云崽框架下的B站动态推送,用的是js写的,作者可以参考下:https://gitee.com/snowtafir/xianxin-plugin/blob/main/model/bilibili.js 第82行开始getBilibiliDynamicInfo函数。 不过他为了避免被风控,推荐的刷新时间为15或30分钟

kendajiwaimai avatar Apr 10 '24 02:04 kendajiwaimai

进度报告:

在仅使用真实浏览器UA和真实cookies:"buvid3"(已登录)的情况下,可以获取动态具体内容。将继续寻求使buvid3生效的方法,并验证该值可以使用的时长与稳定性。

kushidou avatar Apr 23 '24 09:04 kushidou