【B站API】api研究笔记Special-AV与BV互转
社会易姐QwQ
2020年03月24日 18:24
收录于文集
共3篇

昨天视频新编号BV上线了,所有视频的编号默认都变成了BVxxx,不再是avxxx,兼容在链接和搜索中输入av号,评论区和动态av和bv都可以一键传送

显然日益增长的投稿量对于编号是个问题,int是有上限的,但一串“乱码”缺少了灵魂,还会让我们想到磁力链接或者熊掌盘的链接(手动狗头)

看到av170001,我会想到“法克儿~~”,但看到BV17x411w7KC,我?????

其实av号并没有消失,只不过它已经隐藏于大众的视野里了,av和bv本质上是可以双向转换的


方法一(电脑版推荐):

打开一个视频,会发现url是BVxxx

首先按F12,再选择console主题

接着我们在下面“>”的地方输入window.__INITIAL_STATE__.aid

会发生神奇的一幕

前面加上字母“av”即可

方法二(手机&电脑通用):

可以用一个api解决

这个可以做到av号转换成bv号

网页链接​后面添加av号

同样也可以bv转av

网页链接​后面添加bv号

可以看到bvid和aid两项都和视频对应

方法三(本地化&硬核):

在bv号上线不到2小时,就有知乎大佬破解了其中的的算法

https://www.zhihu.com/question/381784377/answer/1099438784

反正我也看不懂,但可以肯定的是不需要借助网络

复制一下代码,并新建py文件,即可运行

table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF' tr = {} for i in range(58):     tr[table[i]] = i s = [11, 10, 3, 8, 4, 6, 2, 9, 5, 7] xor = 177451812 add = 100618342136696320 def Decode(x):     r = 0     for i in range(10):         r += tr[x[s[i]]] * 58 ** i     return (r - add) ^ xor def Encode(x):     x = (x ^ xor) + add     r = list('BV          &#​39;)     for i in range(10):         r[s[i]] = table[x // 58 ** i % 58]     return '&#​39;. join(r) print('Please choose the mode of this application (1 for AV2BV, 2 for BV2AV)') mode = input() if mode == '1&#​39;:     print('Please input the AV number (number only)')     num = int(input())     print(Encode(num)) if mode == '2&#​39;:     print('Please input the BV number (e.g. BV17x411w7KC)')     string = input()     print(Decode(string)) if mode != '1&#​39; and mode != '2&#​39;:     print('Error!&#​39;) # print(Decode(&#​39;BV17x411w7KC')) # print(Decode(&#​39;BV1Q541167Qg')) # print(Decode(&#​39;BV1mK4y1C7Bz')) # print(Encode(170001)) # print(Encode(455017605)) # print(Encode(882584971))