爱意满满的作品展示区。
MonoLogueChi

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

  •  
  •   MonoLogueChi ·
    MonoLogueChi · Mar 24, 2020 · 3677 views
    This topic created in 2268 days ago, the information mentioned may be changed or developed.

    先说一下 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 弹幕解析的程序里面,我的更新速度应该在第一梯队吧。

    3 replies    2020-03-24 19:02:47 +08:00
    docx
        1
    docx  
       Mar 24, 2020 via iPhone
    新出来的视频依然有 av 号,也能正常访问,所以也不是很明白这个意义
    webshe11
        2
    webshe11  
       Mar 24, 2020
    我的油猴脚本也 gg 了,连夜改正则表达式
    MonoLogueChi
        3
    MonoLogueChi  
    OP
       Mar 24, 2020 via Android
    @dzyou2007 不太清楚,也许以后会有变化吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3118 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:49 · PVG 22:49 · LAX 07:49 · JFK 10:49
    ♥ Do have faith in what you're doing.