# ibili
**Repository Path**: louzhichen/ibili
## Basic Information
- **Project Name**: ibili
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-07-05
- **Last Updated**: 2023-02-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ibili
- 下载方式: npm i ibili
- 这是一个获取哔哩哔哩资源的工具库,可以下载哔哩哔哩的视频资源,也可以下载视频弹幕,下载用户评论等等之类
- `严重警告`:不可以将获取的资源用于恶意用途
- 有以下功能:
| 函数名 |
功能 |
| loadbarrage |
下载视频弹幕 |
| downVideo |
下载视频 |
| loademojis |
下载表情包 |
| loadcomments |
获取视频下的评论 |
| loadsearch |
获取搜索结果 |
# loadbarrage:下载视频弹幕
| 参数 |
类型 |
属性 |
说明 |
返回值 |
| opt |
string |
|
如果opt是视频的av号,会根据av号获取相应的视频弹幕;如果是视频的播放地址(url),会根据视频的播放地址获取视频弹幕 |
返回promise对象 |
| object |
url |
视频的直播地址, 也可以是番剧的地址 |
返回promise对象 |
- `loadbarrage` 的返回值是一个 `promise`对象,`promise` 的值就是视频弹幕数据
使用案例:
- 比如说要下载 [周杰伦的告白气球MV](https://www.bilibili.com/video/av15227278?from=search&seid=16573406510590472928) 的视频弹幕,可以知道播放地址就是 `https://www.bilibili.com/video/av15227278?from=search&seid=16573406510590472928`
```javascript
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')
})
})
```
- 比如要下载 [香菜的告白气球](https://www.bilibili.com/video/av51560305?from=search&seid=16573406510590472928) 的视频弹幕,查看简介可以知道视频的av号为 51560305
```javascript
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) 为例,可以知道番剧的地址为`https://www.bilibili.com/bangumi/media/md130412`
```javascript
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
```
# downloadVideo:下载视频资源
| 参数 |
类型 |
返回值 |
| 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),可以知道视频的播放地址就是`https://www.bilibili.com/video/av15227278?from=search&seid=1147385259116260142`
```javascript
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=7234801519883525570)整部番剧,番剧地址为`https://www.bilibili.com/bangumi/media/md2614/?from=search&seid=6486386251028162043`
```javascript
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('番剧下载完成!')
})
```
# loademojis:下载表情包
| 参数 |
类型 |
属性 |
说明 |
返回值 |
| opt |
object |
folder |
存放表情包资源的路径,默认值是 media/picture |
返回promise对象 |
```javascript
const ibili = require('ibili')
ibili.loademojis({}).then(()=>{
console.log('表情包下载完成!')
})
```
# loadcomments: 获取视频下的评论
| 参数 |
类型 |
值 |
说明 |
| 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](https://www.bilibili.com/video/av15227278?from=search&seid=11837609076354078745) 的评论
```javascript
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')
})
})
```
# loadsearch: 获取搜索结果
| 参数 |
类型 |
说明 |
| opt |
string |
搜索内容 |
| object |
如果opt是object,请看第二个表格 |
| page |
number |
页数 |
- 如果opt是object
| 参数 |
属性 |
类型 |
值 |
说明 |
| opt |
content |
string |
|
搜索内容 |
| search |
string |
|
搜索内容 |
| page |
number |
|
页数 |
| mode |
string |
default |
获取格式化之后的搜索结果,默认值是 default |
| string |
init |
获取原始的搜索结果 |
使用案例:
```javascript
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')
})
})
```