bv 号来了,我的程序也该升级了

2020-03-24 15:29:26 +08:00
 MonoLogueChi

先说一下 bv 号的影响

简单说一下弹幕解析的流程,不论是 aid 还是 bvid,都不是直接用来解析弹幕的,真正用的是 cid,cid 才是和视频一一对应的。

对于各种视频下载和弹幕解析工具来说,就是再多增加一个通过 bvid 查询 cid 的接口,完全不是啥麻烦事。以前解析 aid 使用的两个接口,第一个现在不能用于解析 bvid,第二个直接把参数 aid 换成 bvid 即可。

https://www.bilibili.com/widget/getPageList?aid={aid}
https://api.bilibili.com/x/player/pagelist?aid={aid}

升级过程

因为以前没关注,我是在昨天晚上十点半才知道消息的,然后赶紧打开电脑,随便打开一个视频页简单分析了一下,发现这个改动对我的程序影响真不大。

分析过程也比较简单,先打开一个页面,F12,看请求,找到了这样的一个请求

https://api.bilibili.com/x/player/pagelist?bvid=BV18b411j72u&jsonp=jsonp

然后开了一个隐身窗口再测试一下,确定在不登录的情况下可以用,同时发现,这就是以前使用 aid 查询 cid 的接口,有了这个接口就好办了,只要思路有了,代码都不是事,只需要改 Controller 接收的参数,查询到 cid 之后的代码都不需要改动。

昨天晚上升级完之后就直接睡了,今天就想着再加一个使用 bvid 查询 aid 的接口,最开始的想法是解析通过 bv 号获取页面内容,然后截取字符串获取 aid,主要代码大概是这样的:

var key = "window.__INITIAL_STATE__={\"aid\":";
var html = await GetBiliBiliHtmlAsync ($"https://www.bilibili.com/video/BV{bvid}?p=1");
var a = html.IndexOf (key, StringComparison.Ordinal);

if (a > 0) {
    var b = html.Substring (a + key.Length, 11);
    var c = b.IndexOf (",", StringComparison.Ordinal);
    var d = b.Substring (0, c);
    return int.TryParse (d, out var e) ? e : 0;
}

虽然很蠢,但是使用数据库缓存结果,效率应该不用担心,至于为什么不用知乎是那位大佬给出的转换代码,我是这样想的,那段代码现在只能在有限的数据内验证正确性,而我直接在 html 中截取字符串,虽然过程很蠢,但是结果一定是正确的。

当我满心欢喜,准备发布新版本的时候,突然发现有一个接口可以直接查询。

https://api.bilibili.com/x/web-interface/archive/stat?aid={aid}
https://api.bilibili.com/x/web-interface/archive/stat?bvid={bvid}

在感慨网友力量强大的同时,赶紧改自己的程序,去掉那又蠢又笨的算法,写了一个简单的查询 api,示例:

https://danmu.u2sb.top/api/other/bilibili/queryaid/?bvid=18b411j72u
https://danmu.u2sb.top/api/other/bilibili/queryaid/?aid=49511508

我的弹幕服务器已经支持使用 bv 号查询弹幕了,详细 api 可以看

API 文档:https://dandoc.u2sb.top/danmu/api.html

开源地址:https://github.com/MonoLogueChi/Danmu.Server

在所有 BiliBili 弹幕解析的程序里面,我的更新速度应该在第一梯队吧。

2865 次点击
所在节点    分享创造
3 条回复
docx
2020-03-24 18:27:39 +08:00
新出来的视频依然有 av 号,也能正常访问,所以也不是很明白这个意义
webshe11
2020-03-24 18:57:31 +08:00
我的油猴脚本也 gg 了,连夜改正则表达式
MonoLogueChi
2020-03-24 19:02:47 +08:00
@dzyou2007 不太清楚,也许以后会有变化吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/655711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX