B站API教程:轻松获取视频、弹幕和用户数据
Bilibili(B站)作为中国领先的视频分享和ACG(动画、漫画、游戏)文化社区,拥有海量高质量的视频内容、独特的弹幕文化和活跃的用户群体。对于开发者、数据分析师和研究人员来说,B站的数据是一座巨大的宝库。本文将详细介绍如何通过B站的API来获取视频、弹幕和用户数据,帮助你轻松地将B站的数据集成到自己的应用或分析流程中。
官方API vs. 第三方(野生)API
在开始之前,需要明确B站的API主要分为两类:
- 官方开放平台API:由B站官方提供,主要面向第三方应用开发者,提供账号授权、视频投稿、数据查询等功能。这类API稳定、合法,但需要申请权限,且功能相对有限,主要用于应用集成。
- 第三方(野生)API:由社区开发者通过对B站Web端和App进行反向工程而整理出来的接口。这些API功能非常强大,几乎涵盖了B站的所有功能,从获取视频信息到发送弹幕、进行用户交互等。这类API无需申请,使用灵活,是进行数据抓取和分析的主要工具。但缺点是不稳定,B站官方可能会随时更改接口,导致其失效。
本文将主要聚焦于更常用、功能更强大的第三方API。
重要:使用第三方API的注意事项
* 仅供学习和非商业用途:滥用API可能会对B站服务器造成压力,甚至导致你的IP或账号被封禁。
* 设置User-Agent:所有API请求都必须携带一个浏览器或App的User-Agent头,否则请求将被拒绝。
* 遵守Robots协议:在进行大规模数据抓取前,请检查B站的robots.txt文件。
* 控制请求频率:避免在短时间内发送大量请求,以免被B站的反爬虫机制拦截。
核心资源
社区中已经有非常出色的API整理项目,你无需从头开始。最著名和最全面的资源是:
* SocialSisterYi/bilibili-API-collect:一个在GitHub上维护的B站API集合项目,极其详尽,是查询B站各种接口的首选参考。
第一部分:获取视频数据
B站的每个视频都有一个唯一的AV号(旧版)或BV号(新版)。通过这些ID,我们可以获取关于视频的所有信息。
API接口
获取视频详细信息的API端点如下:
https://api.bilibili.com/x/web-interface/view
请求参数
bvid(string): 视频的BV号 (例如:BV1GJ411x7h7)- 或
aid(integer): 视频的AV号 (例如:758229986)
示例:使用BV号获取视频信息
以BV号 BV1GJ411x7h7 为例,构造请求URL:
https://api.bilibili.com/x/web-interface/view?bvid=BV1GJ411x7h7
返回的JSON数据(节选)
你会得到一个包含视频所有信息的JSON对象:
json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"bvid": "BV1GJ411x7h7",
"aid": 758229986,
"videos": 1,
"tid": 21,
"tname": "日常",
"copyright": 1,
"pic": "http://i0.hdslb.com/bfs/archive/xxx.jpg",
"title": "【春节】“烟花”",
"pubdate": 1580131139,
"desc": "祝大家新年快乐!",
"owner": {
"mid": 282994,
"name": "导演小策",
"face": "http://i2.hdslb.com/bfs/face/xxx.jpg"
},
"stat": {
"aid": 758229986,
"view": 1234567,
"danmaku": 18888,
"reply": 3333,
"favorite": 55555,
"coin": 66666,
"share": 4444,
"like": 99999
},
"dimension": {
"width": 1920,
"height": 1080,
"rotate": 0
}
// ... 更多信息
}
}
通过解析这个JSON,你可以轻松获得视频的标题、封面、发布时间、UP主信息以及播放数、弹幕数、点赞数等统计数据。
第二部分:获取弹幕数据
弹幕是B站文化的核心。获取视频的弹幕数据对于进行用户行为分析和舆情监控非常有价值。
API接口
获取弹幕的API端点是基于视频的cid(不是av/bv号)。cid可以在上一步获取视频信息的data.pages或data对象中找到。
弹幕文件通常以XML格式存储,API端点如下:
https://api.bilibili.com/x/v1/dm/list.so
请求参数
oid(integer): 视频的cid。
示例:获取弹幕
假设我们从上一个API请求中得知视频的cid是 130454372,构造URL:
https://api.bilibili.com/x/v1/dm/list.so?oid=130454372
返回的XML数据
你会得到一个XML文件,其中包含了所有的弹幕信息:
xml
<i>
<chatserver>chat.bilibili.com</chatserver>
<chatid>130454372</chatid>
<mission>0</mission>
<maxlimit>3000</maxlimit>
...
<d p="2.3,1,25,16777215,1580131234,0,abcde,987654321">这是第一条弹幕</d>
<d p="5.1,1,25,16777215,1580131255,0,fghij,123456789">这是第二条弹幕</d>
...
</i>
<d>标签:每一条弹幕都是一个<d>标签。p属性:这个属性包含了弹幕的关键信息,用逗号分隔:- 弹幕出现的时间(秒)。
- 弹幕模式(1-3为滚动,4为底部,5为顶部)。
- 字体大小。
- 颜色(十进制表示)。
- 发送时间戳。
- 弹幕池(0为普通)。
- 发送者UID的CRC32B校验值。
- 弹幕的数据库ID。
- 标签内容:弹幕的文本内容。
第三部分:获取用户数据
获取UP主或其他用户的信息,可以帮助我们了解其影响力、粉丝构成和活跃度。
API接口
获取用户详细信息的API端点如下:
https://api.bilibili.com/x/space/acc/info
请求参数
mid(integer): 用户的ID。你可以从视频信息的owner.mid字段中获得。
示例:获取用户信息
以UP主“导演小策”的mid 282994为例:
https://api.bilibili.com/x/space/acc/info?mid=282994
返回的JSON数据(节选)
json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 282994,
"name": "导演小策",
"sex": "男",
"face": "http://i2.hdslb.com/bfs/face/xxx.jpg",
"sign": "代表作《广场舞宇宙》",
"level": 6,
"birthday": "1990-01-01",
"fans_badge": true,
"official": {
"role": 1,
"title": "bilibili 知名UP主",
"desc": ""
}
// ... 更多信息
}
}
你还可以通过另一个接口获取用户的粉丝数和关注数:
https://api.bilibili.com/x/relation/stat?vmid=[用户mid]
结论与展望
通过上述介绍,你可以看到,利用B站的第三方API,获取公开数据并不复杂。这些数据可以用于:
* 制作数据可视化作品:分析热门视频的趋势、用户观看习惯等。
* 开发第三方工具:例如视频数据监控、粉丝分析工具等。
* 学术研究:分析网络社区文化、用户行为模式等。
最后再次强调,在使用这些API时,务必保持尊重和克制,遵守相关规定,共同维护一个健康的数据生态。随着你对API的探索不断深入,你会发现B站这座数据金矿中更多有趣和有价值的宝藏。