哔哩哔哩弹幕api及一些解释

有两个弹幕api接口,分别是移动端与电脑端

https://comment.bilibili.com/ + cid + .xml
https://api.bilibili.com/x/v1/dm/list.so?oid= + cid

以电脑端为例子,使用谷歌浏览器打开某个哔哩哔哩的视频:

右键–检查–network–刷新–一个个找吧,如图,这里已经找到了,点击Headers,就是api了,移动端的请点击左上角的toggle device toolbar,重复上述步骤。

哔哩哔哩弹幕api及一些解释_第1张图片

弹幕XML文件中的含义
啧啧,原来阿卡丽那么小?
参数1(157.47900):弹幕出现的时间,以秒数为单位
参数2(1):弹幕的模式,1-3 滚动弹幕,4 底端弹幕,5顶端弹幕,6 逆向弹幕,7 精准定位,8 高级弹幕
参数3(25):字号 (12非常小,16特小,18小,25中,36大,45很大,64特别大)
参数4(16777215):字体的颜色;这串数字是十进制表示;通常软件中使用的是十六进制颜色码;
e.g:
白色
RGB值:(255,255,255)
十进制值:16777215
十六进制值:#FFFFFF
参数5(1548340494):unix时间戳,从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数
参数6(0):弹幕池,0普通池,1字幕池,2特殊池 【目前特殊池为高级弹幕专用】
参数7(389b20da):发送者的ID,用于“屏蔽此弹幕的发送者”功能
参数8(11114024647262210):弹幕在弹幕数据库中rowID 用于“历史弹幕”功能。

获取弹幕
我们可以直接通过上面的方法从网页直接找到xml文件下载,我们也可以使用api接口获取弹幕。

使用api之前需要知道视频的cid,获取cid也需要一个api,一下为python代码

import requests,json,re,time,datetime
from bs4 import BeautifulSoup#这里就直接一次性倒入要用的库了
def get_oid(av_num:str)->int:#获取cid,输入视频av号
    num=re.search(r'\d+',av_num).group(0)
    url='https://api.bilibili.com/x/player/pagelist?aid={}&jsonp=jsonp'.format(num)#获取cid的api
    js=requests.get(url).content.decode('utf8')
    js_format=json.loads(js)#转换为json格式
    return js_format['data'][0]['cid']#返回cid
def get_dm(oid):#获取弹幕,输入cid
    url='https://api.bilibili.com/x/v1/dm/list.so?oid={}'.format(oid)#弹幕api
    dm=requests.get(url).content.decode('utf8')#编码,防止中文乱码
    soup = BeautifulSoup(dm)#美化下输出格式
    return soup.find_all('d')#只返回d标签,即弹幕
def run():
    av_num=input('请输入视频的AV号:')
    cid=get_oid(av_num)
    dm=get_dm(cid)
    print(dm)#此处偷懒点,直接打印了,当然也可以直接保存为xml文件

通过弹幕查询用户
参照xml文件各种字符的含义,通过参数7反查即可:

http://biliquery.typcn.com/api/user/hash/[用户Hash]

返回json,id后面就是用户的uid了

直接上python程序:

def find_users(usr_cid:str)->int:
    url='https://biliquery.typcn.com/api/user/hash/{}'.format(usr_cid)#反查,获得json
    js=json.loads(requests.get(url).text)
    if len(js['data'])==1:#如果有两个id,选择后面的id
        posi=0
    else: posi=1
    usr_id=str(js['data'][posi]['id'])获得uid
    space='https://space.bilibili.com/{}'.format(usr_id)
    return space#返回用户的个人主页网址

这边直接返回了用户主页的链接,也可以使用用户数据的api来获得用户数据

api:https://api.bilibili.com/x/space/acc/info?mid=【uid】&jsonp=jsonp

【uid】为用户的uid,返回json,里面有等级、姓名,是否大会员等许多用户信息

转换弹幕格式
送上一个网站:https://tiansh.github.io/us-danmaku/bilibili/

以及教程:https://www.bilibili.com/read/cv1022304/

转换成ass字幕后就可以离线播放有弹幕的视频了

unix时间戳转换
参数5,请直接百度转换,python代码:

def get_time(unix_time:int)->str:#输入unix时间戳
    time=datetime.datetime.fromtimestamp(unix_time)
    return time.strftime("%Y-%m-%d %H:%M:%S")#返回时间

你可能感兴趣的:(哔哩哔哩弹幕api及一些解释)