Bilibili 网页端部分 API 简单分析

这篇博客源自我一个弃坑的项目,原计划是实现对 Bilibili 用户的收藏夹进行解析并自动下载其中的视频。 (代码只写了 API 解析部分,比较丢人,所以扔在 https://paste.ubuntu.com/p/PDpqqMN2vz/ 里了)


0x01 用户收藏夹 API

** 1.用户收藏夹列表 **
API 地址: https://api.bilibili.com/medialist/gateway/base/created?pn=1&ps=100&up_mid=[用户UID]&is_space=0&jsonp=jsonp
需要的 Headers 参数:

    self.head = {
        'Cookie' : cookie,
        'User-Agent' : user_agent,
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding' : 'gzip, deflate, br',
        'Accept-Language' : 'zh-CN,zh;q=0.9',
        'Cache-Control' : 'max-age=0',
        'Host' : 'api.bilibili.com',
        'Upgrade-Insecure-Requests' : '1'
    }

返回的参数(以我自己 SpinMrY, 10688065 为例):

    
    {"code":0,"data":{"count":2,"list":[{"attr":0,"cnt_info":{"coin":0,"collect":0,"danmaku":0,"play":0,"reply":0,"share":0,"thumb_down":0,"thumb_up":0},"cover":"","cover_type":0,"ctime":1438922096,"fav_state":0,"fid":501354,"id":50135465,"intro":"","like_state":0,"media_count":250,"mid":10688065,"mtime":1558107150,"state":0,"title":"默认收藏夹","type":11},{"attr":130,"cnt_info":{"coin":0,"collect":0,"danmaku":0,"play":0,"reply":0,"share":0,"thumb_down":0,"thumb_up":0},"cover":"","cover_type":0,"ctime":1556676741,"fav_state":0,"fid":4470525,"id":447052565,"intro":"","like_state":0,"media_count":2,"mid":10688065,"mtime":1556691683,"state":0,"title":"测试收藏夹","type":11}]},"message":"success"}

其中比较有用的信息:

    SourceJson['data']['count'] #用户收藏夹数量
    SourceJson['data']['list'] #用户收藏夹列表,其中 title 为收藏夹标题,  id 为收藏夹 ID,  ctime 为创建时间( UNIX 时间戳)

** 2.收藏夹内容 **
API 地址: https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=[收藏夹ID]&pn=[页数]&ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp 需要的 Headers 参数:

    self.head = {
        'Cookie' : cookie,
        'User-Agent' : user_agent,
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding' : 'gzip, deflate, br',
        'Accept-Language' : 'zh-CN,zh;q=0.9',
        'Cache-Control' : 'max-age=0',
        'Host' : 'api.bilibili.com',
        'Upgrade-Insecure-Requests' : '1'
    }

返回的参数的解析结果(以收藏夹 测试收藏夹, 447052565为例):

    收藏夹 测试收藏夹 共有 1 页 2 个视频,创建者为 SpinMrY
    第 1 页
    AV50977820 【回形针PaperClip】我们做了一个真正的当代生活说明书
    AV1535273 《东方巨响》中国两弹一星实录(已修复)

参数较多,选取一些参数进行解释:

    SourceJson['data']['info']字段为该收藏夹具体信息
    其中 cover 字段代表该收藏夹封面
    media_count 字段代表该收藏夹内有多少视频
    title 字段代表该收藏夹标题
    upper 字段代表该收藏夹创建者信息
    
    SourceJson[data']['medias']字段内为该收藏夹该页中的全部视频,对于每个视频对象都有一个独立的 Json 字段存储它的信息
    其中 cnt_info 字段包含了该视频的硬币,播放量等信息
    id 字段代表该视频 AV 号
    dimension 字段代表该视频的原始分辨率
    intro 字段代表该视频的简介
    page 代表该视频共分多少 P
    pages 代表该视频每 P 的信息,对于每 P 视频都有一个独立的 Json 字段存储它的信息,内包含视频的上传者, cid 编号,对应质量的大小,原始 分辨率以及分 P 标题等信息

** 0x02 关于 UP 主的 API**
API 地址: https://space.bilibili.com/ajax/member/getSubmitVideos?mid=[UP主ID]&pagesize=10&tid=0&page=[页数]&keyword=&order=pubdate 需要的 Headers 参数:

    self.head = {
        'Cookie' : cookie,
        'User-Agent' : user_agent,
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding' : 'gzip, deflate, br',
        'Accept-Language' : 'zh-CN,zh;q=0.9',
        'Cache-Control' : 'max-age=0',
        'Host' : 'api.bilibili.com',
        'Upgrade-Insecure-Requests' : '1'
    }

返回的参数的解析结果(以 UP 主 Arnie97, 631106为例):

    Arnie97 上传了 5 个视频,共 1 页
    其中:
    生活 区 1 个;
    科技 区 4 个;
    正在获取所有视频...
    获取完成1
    第 1 页
    AV50661946 云南冶炼厂 DF7G 单机 / 整列通过昆明米轨十字交叉
    AV11466484 【电弧】CRH380A CRH380B 通过皇姑屯-沈阳北区间
    AV11434223 沈抚城际 CRH5G-5157 通过沈吉线北海街道口
    AV7864057 【有屏就有烂苹果】用 HP 39gs 计算器播放 Bad Apple
    AV471995 草草撕窗帘

参数较多,选取一些参数进行解释:

    SourceJson['data']['count']字段代表该 UP 主共上传了多少个视频
    SourceJson['data']['tlist']字段的各个值代表该 UP 分别在哪个区投了多少视频
    SourceJson['data']['pages']字段的各个值代表了该 UP 上传视频的具体信息,其参数类似上文中的收藏夹视频 pages 参数

0x03 视频 API 分析
API 地址: 'https://api.bilibili.com/x/web-interface/view?aid=[av号]
需要的 Headers 参数:

    self.head = {
        'Cookie' : cookie,
        'User-Agent' : user_agent,
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding' : 'gzip, deflate, br',
        'Accept-Language' : 'zh-CN,zh;q=0.9',
        'Cache-Control' : 'max-age=0',
        'Host' : 'api.bilibili.com',
        'Upgrade-Insecure-Requests' : '1'
    }

返回的参数的解析结果(以 UP 主 Arnie97, 631106 的 av7864057 为例):

    标题:【有屏就有烂苹果】用 HP 39gs 计算器播放 Bad Apple ,上传者为 Arnie97 ,共有 1 个视频
    描述 : ★原作:av706
    ★源码:https://github.com/Arnie97/neko-notepad/tree/video
    ★Q群:435067924
    播放数: 4332 弹幕数: 29 硬币数 : 31 收藏数: 71

参数较多,选取一些参数进行解释:

    在 SourceJson['data'] 字段中
    aid 字段表示其 AV 号
    title 字段表示其标题
    owner 字段包含了上传者信息
    videos 字段表示其共有几段视频
    stat 字段包含了视频的播放量等信息