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 字段包含了视频的播放量等信息