bv 号来了,我的程序也该升级了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
MonoLogueChi
V2EX    分享创造

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

  •  
  •   MonoLogueChi
    MonoLogueChi 2020-03-24 15:29:26 +08:00 3390 次点击
    这是一个创建于 2096 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说一下 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 条回复    2020-03-24 19:02:47 +08:00
    docx
        1
    docx  
       2020-03-24 18:27:39 +08:00 via iPhone
    新出来的视频依然有 av 号,也能正常访问,所以也不是很明白这个意义
    webshe11
        2
    webshe11  
       2020-03-24 18:57:31 +08:00
    我的油猴脚本也 gg 了,连夜改正则表达式
    MonoLogueChi
        3
    MonoLogueChi  
    OP
       2020-03-24 19:02:47 +08:00 via Android
    @dzyou2007 不太清楚,也许以后会有变化吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     872 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:59 PVG 03:59 LAX 11:59 JFK 14:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86