- 下载方式: npm i ibili
- 这是一个获取哔哩哔哩资源的工具库,可以下载哔哩哔哩的视频资源,也可以下载视频弹幕,下载用户评论等等之类
严重警告
:不可以将获取的资源用于恶意用途- 有以下功能:
函数名 | 功能 |
---|---|
loadbarrage | 下载视频弹幕 |
downVideo | 下载视频 |
loademojis | 下载表情包 |
loadcomments | 获取视频下的评论 |
loadsearch | 获取搜索结果 |
参数 | 类型 | 属性 | 说明 | 返回值 |
---|---|---|---|---|
opt | string | 如果opt是视频的av号,会根据av号获取相应的视频弹幕;如果是视频的播放地址(url),会根据视频的播放地址获取视频弹幕 | 返回promise对象 | |
object | url | 视频的直播地址, 也可以是番剧的地址 | 返回promise对象 |
loadbarrage
的返回值是一个promise
对象,promise
的值就是视频弹幕数据
使用案例:
- 比如说要下载 周杰伦的告白气球MV 的视频弹幕,可以知道播放地址就是
https://www.bilibili.com/video/av15227278?from=search&seid=16573406510590472928
const ibili = require('ibili')
const fs = require('fs')
// 使用 视频播放地址获取弹幕
ibili.loadbarrage('https://www.bilibili.com/video/av15227278?from=search&seid=16573406510590472928').then(function(data){
// 将数据存进demo.json文件中,你可以打开demo.json可以清楚的看到弹幕的数据
fs.writeFile('demo.json',JSON.stringify(data,null,5),function(){
console.log('ok')
})
})
- 比如要下载 香菜的告白气球 的视频弹幕,查看简介可以知道视频的av号为 51560305
const ibili = require('ibili')
const fs = require('fs')
// 使用 视频的av号说去视频弹幕
ibili.loadbarrage('51560305').then(function(data){
// 将数据存进demo.json文件中,你可以打开demo.json可以清楚的看到弹幕的数据
fs.writeFile('demo.json',JSON.stringify(data,null,5),function(){
console.log('ok')
})
})
- 比如要下载整部番剧的弹幕,以 刀剑神域 Alicization 为例,可以知道番剧的地址为
https://www.bilibili.com/bangumi/media/md130412
const ibili = require('ibili')
const fs = require('fs')
ibili.loadbarrage({
url:'https://www.bilibili.com/bangumi/media/md130412'
}).then(function(data){
var merges = data.merge_barrages // 获取合并之后的弹幕
console.log(merges.length) // 打印弹幕的总条数
// 将数据存进demo.json文件中,你可以打开demo.json可以清楚的看到弹幕的数据
fs.writeFile('demo.json',JSON.stringify(merges,null,5),function(){
console.log('ok')
})
})
// 打印结果
75301 // 可以看到整部番剧的弹幕有75301条
ok
参数 | 类型 | 返回值 |
---|---|---|
opt | object | 返回promise对象 |
- opt 有以下属性:
属性 | 类型 | 说明 |
---|---|---|
url | string,Array | 视频的播放地址 |
av | string,Array | 视频的av号 |
num | number | 番剧的集数,这个属性只对 番剧 有效【不建议使用】 |
sessdata | string | 如果登陆哔哩哔哩的话,在返回的响应中的Cookie里边会有一个SESSDATA值 |
type | string | 如果值为 default,那么会下载视频,type的默认值就是 default |
如果值为 silent,那么会下载无声视频 | ||
如果值为 audio,那么会下载音频 | ||
folder | string | 存放视频的路径,默认值是 meida,因此默认会将下载的视频存放在 media文件夹 里边 |
filename | string | 自定义下载的视频的名称,如果不设置,会调用默认值 |
oncomplete | function | 视频下载结束之后会触发 oncomplete事件 |
progress | object | 设置下载进度条的参数 |
- progress 对象的属性如下:
属性 | 类型 | 说明 |
---|---|---|
labelname | string | 设置进度条的标签,默认值是 Download progress |
length | number | 设置进度条的长度,默认值是50 |
url
和av
一般只需要一个就可以了,但是如果两个参数都有,那么优先使用av
- 使用案例:
- 比如要下载 周杰伦告白气球MV,可以知道视频的播放地址就是
https://www.bilibili.com/video/av15227278?from=search&seid=1147385259116260142
const ibili = require('ibili')
ibili.downloadVideo({
url:'https://www.bilibili.com/video/av15227278?from=search&seid=1147385259116260142'
}).then(()=>{
console.log('视频下载完成!')
})
- 同样也可以使用av号下载视频资源
- 还可以下载整部番剧的视频资源,比如下载 群居姐妹整部番剧,番剧地址为
https://www.bilibili.com/bangumi/media/md2614/?from=search&seid=6486386251028162043
const ibili = require('ibili')
ibili.downloadVideo({
url:'https://www.bilibili.com/bangumi/media/md2614/?from=search&seid=6486386251028162043', // 番剧地址
folder:'media/群居姐妹', // 将视频资源存放在 media文件夹下的 群居姐妹 文件夹里
sessdata:'b6714909%2C158***3693%2C1a29f0c1', // 使用 sessdata,这样可以下载 1080p的视频【没有sessdata会默认是320p】
}).then(()=>{
console.log('番剧下载完成!')
})
参数 | 类型 | 属性 | 说明 | 返回值 |
---|---|---|---|---|
opt | object | folder | 存放表情包资源的路径,默认值是 media/picture | 返回promise对象 |
const ibili = require('ibili')
ibili.loademojis({}).then(()=>{
console.log('表情包下载完成!')
})
参数 | 类型 | 值 | 说明 |
---|---|---|---|
opt | string | 视频的播放地址(url)或者 视频的av号 | |
object | 如果opt是object,可以看第二个表格 | ||
page | number | 页数 | |
mode | string | default | 获取格式化之后的评论信息,默认值是default |
string | reply | 获取无嵌套关系的评论与回复 | |
string | no_reply | 只获取评论,没有回复 | |
string | init | 获取评论的原始数据 |
- 如果 opt是object,那么可以忽略第二个参数page,和第三个参数mode,opt的属性如图:
参数 | 属性 | 类型 | 值 | 说明 |
---|---|---|---|---|
opt | url | string | 视频的播放地址(url) | |
av | string | 视频的av号 | ||
page | number | 页数 | ||
mode | string | default | 获取格式化之后的评论信息,默认值是default | |
string | reply | 获取无嵌套关系的评论与回复 | ||
string | no_reply | 只获取评论,没有回复 | ||
string | init | 获取评论的原始数据 |
使用案例:
- 比如要获取 周杰伦告白气球MV 的评论
const ibili = require('ibili')
const fs = require('fs')
ibili.loadcomments({
url:'https://www.bilibili.com/video/av15227278?from=search&seid=11837609076354078745' // 视频的播放地址(url)
}).then(data=>{
// 将评论数据存储在demo.json文件里边
fs.writeFile('demo.json',JSON.stringify(data,null,5),function(){
console.log('ok')
})
})
参数 | 类型 | 说明 |
---|---|---|
opt | string | 搜索内容 |
object | 如果opt是object,请看第二个表格 | |
page | number | 页数 |
- 如果opt是object
参数 | 属性 | 类型 | 值 | 说明 |
---|---|---|---|---|
opt | content | string | 搜索内容 | |
search | string | 搜索内容 | ||
page | number | 页数 | ||
mode | string | default | 获取格式化之后的搜索结果,默认值是 default | |
string | init | 获取原始的搜索结果 |
使用案例:
const ibili = require('ibili')
const fs = require('fs')
ibili.loadsearch({
content:'告白气球' // 搜索内容
}).then(data=>{
// 将搜索结果数据存进 demo.json文件里边
fs.writeFile('demo.json',JSON.stringify(data,null,5),function(){
console.log('ok')
})
})