feat: 重大优化更新 - 修复v14.0并发布Pro版

✨ 新功能:
- 创建bilibili_audio_downloader_pro.py (Pro版) - 全新架构重构
- 添加config.json配置文件支持
- 新增INSTALL.md详细安装指南
- 新增VERSION_COMPARISON.md版本对比说明

🐛 Bug修复 (v14.0):
- 修复中文编码显示问题
- 修复ffmpeg进度条计算不准确
- 改进yt-dlp下载进度解析
- 添加重试机制和超时设置
- 完善错误处理和日志记录

🏗️ Pro版优势:
- 面向对象架构设计,代码更清晰
- 自定义异常类和智能错误恢复
- 准确的进度条显示算法
- 完整的日志系统
- 灵活的配置管理
- 更好的用户体验

📚 文档更新:
- 更新README.md,添加版本对比指引
- 更新requirements.txt依赖列表
- 完善项目文档结构
This commit is contained in:
mckero committed 2025-09-21 12:02:11 +08:00
1 parent af14c12eee
commit 8db1d171a0
465 files changed
+200378 -9739

No files matched your search

@@ -0,0 +1,131 @@
# 笔记操作
## 保存视频笔记
> https://api.bilibili.com/x/note/add
*请求方式:POST*
认证方式:Cookie(SESSDATA)
**正文参数( application/x-www-form-urlencoded ):**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
| oid | num | 目标id | 必要 | |
| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) |
| note_id | num | 笔记id | 非必要 | 创建时无需此项 |
| title | str | 笔记标题 | 必要 | |
| summary | str | 笔记预览文本 | 必要 | |
| content | str | 笔记正文json序列 | 必要 | 格式见[附表](readme.md#附表-笔记正文序列格式) |
| tags | str | 笔记跳转标签列表 | 非必要 | |
| cls | num | 1 | 非必要 | 作用尚不明确 |
| from | str | 提交类型 | 非必要 | `auto`自动提交<br />`save`手动提交<br />`close`关闭时自动提交 |
| cont_len | num | 正文字数 | 非必要 | |
| platform | str | 平台 | 非必要 | 可为`web` |
| publish | num | 是否公开笔记 | 非必要 | `0`不公开<br />`1`公开 |
| auto_comment | num | 是否添加到评论区 | 非必要 | `0`不添加<br />`1`添加 |
| csrf | str | CSRF Token(位于cookie) | 必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | `0`成功 <br />`-101`账号未登录<br />`-111`csrf校验失败<br />`-400`请求错误<br />`79508`该稿件已存在笔记,无法新增<br />`79513`笔记所属视频不合法 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 数据本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | ------------ | ---- |
| note_id | num | 笔记id | |
**示例:**
保存内容为加粗的STRONG的笔记`3809605586518023`于`av970322090`
```shell
curl 'https://api.bilibili.com/x/note/add' \
--data-urlencode 'oid=970322090' \
--data-urlencode 'oid_type=0' \
--data-urlencode 'note_id=3809605586518023'
--data-urlencode 'title=周刊哔哩哔哩排行榜#543'
--data-urlencode 'summary=STRONG'
--data-urlencode 'content=[{"attributes":{"bold":true},"insert":"STRONG"},{"insert":"\n"}]'
--data-urlencode 'tags='
--data-urlencode 'cls=1'
--data-urlencode 'from=save'
--data-urlencode 'csrf=xxx'
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"note_id": 3809605586518023
}
}
```
</details>
## 删除视频笔记
> https://api.bilibili.com/x/note/del
*请求方式:POST*
认证方式:Cookie(SESSDATA)
**正文参数( application/x-www-form-urlencoded ):**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ------------------------ | ------ | ---- |
| oid | num | 目标稿件avid | 必要 | |
| note_id | num | 笔记id | 非必要 | |
| csrf | str | CSRF Token(位于cookie) | 必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0:成功 <br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
**示例:**
删除稿件`av457253380`下的笔记`4075968478576647`
```shell
curl 'https://api.bilibili.com/x/note/del' \
--data-urlencode 'oid=457253380' \
--data-urlencode 'note_id=4075968478576647' \
--data-urlencode 'csrf=xxx'
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>
@@ -0,0 +1,309 @@
# 笔记详细信息
## 查询该稿件是否禁止笔记
> https://api.bilibili.com/x/note/is_forbid
*请求方式:GET*
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | -------- | ------ | ---- |
| aid | num | 稿件avid | 必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------------------------- |
| code | num | 返回值 | `0`成功<br />`-400`请求错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------------------- | ---- | ------------ | ----------------------------------- |
| forbid_note_entrance | bool | 是否禁止笔记 | `true`禁止笔记<br />`false`允许笔记 |
**示例:**
查询视频稿件`av338677252`是否禁止笔记
```shell
curl 'https://api.bilibili.com/x/note/info' \
--data-urlencode 'aid=338677252'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"forbid_note_entrance": false
}
}
```
</details>
## 查询私有笔记内容
> https://api.bilibili.com/x/note/info
*请求方式:GET*
认证方式:Cookie(SESSDATA)
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ---------- | ----------- | -------- |
| oid | num | 目标id | 必要 | |
| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) |
| note_id | num | 笔记id | 必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | `0`成功<br />`-400`请求错误<br />`-101`账号未登录<br />`79502`笔记详情未找到<br />`79503`笔记正文未找到 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------ | ----- | ---------------- | -------------- |
| arc | obj | 对应视频稿件信息 | |
| audit_status | num | 0 | 作用暂不明确 |
| cid_count | num | 视频分P数 | |
| content | str | 笔记正文json序列 | 格式见[附表](readme.md#附表-笔记正文序列格式) |
| forbid_note_entrance | bool | | |
| pub_reason | str | 公开笔记相关原因 | |
| pub_status | num | 公开笔记状态 | `1`未公开<br />`2`已公开<br />`4`退回 |
| pub_version | num | | |
| summary | str | 笔记预览文本 | |
| tags | array | 笔记跳转标签列表 | |
| title | str | 笔记标题 | |
`data`中的`arc`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ---------- | ----------------- |
| oid | num | 目标id | |
| oid_type | num | 目标id类型 | `0`视频(oid=avid) |
| title | str | 视频标题 | |
| pic | str | 视频封面 | |
| status | num | | |
| desc | str | 视频简介 | |
`data`中的`tags`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---------------- |
| 0 | obj | 标签1 | |
| n | obj | 标签(n+1) | 按照笔记中位置排列 |
| …… | obj | …… | …… |
`tags`中的对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ----------------- | ------------ |
| cid | num | 视频cid | |
| status | num | 0 | 作用尚不明确 |
| index | num | 在稿件中的分P索引 | |
| seconds | num | 视频进度 | |
| pos | num | 笔记中位置 | |
**示例:**
查询视频`av338677252`中笔记`24508729145690112`的内容
```shell
curl 'https://api.bilibili.com/x/note/info' \
--data-urlencode 'oid=338677252' \
--data-urlencode 'oid_type=0' \
--data-urlencode 'note_id=24508729145690112' \
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"title": "2022哔哩哔哩拜年纪",
"summary": " ...",
"content": "[{"insert":"\n"}]",
"cid_count": 0,
"audit_status": 0,
"pub_status": 0,
"pub_reason": "",
"pub_version": 0,
"forbid_note_entrance": false,
"tags": [],
"arc": {
"oid": 338677252,
"title": "2022哔哩哔哩拜年纪",
"status": 0,
"oid_type": 0,
"pic": "http://i2.hdslb.com/bfs/archive/1e683a5363f35aa0a65419dbf145177099e38f90.jpg",
"desc": ""
}
}
}
```
</details>
## 查询公开笔记内容
> https://api.bilibili.com/x/note/publish/info
*请求方式:GET*
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ------------------ | ------ | -------- |
| cvid | num | 笔记对应的专栏cvid | 必要 | 非笔记id |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------------------------------------------- |
| code | num | 返回值 | `0`成功<br />`-400`请求错误<br />`79514`公开笔记详情未找到 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------------------- | ----- | ---------------------- | --------------------------------------------- |
| cvid | num | 公开笔记对应的专栏cvid | |
| note_id | num | 笔记id | |
| title | str | 笔记标题 | |
| summary | str | 笔记预览 | |
| content | str | 笔记正文json序列 | 格式见[附表](readme.md#附表-笔记正文序列格式) |
| cid_count | num | (?) | |
| pub_status | num | 公开状态 | |
| tags | array | | |
| arc | obj | 稿件信息 | |
| author | obj | 作者信息 | |
| forbid_note_entrance | bool | | |
`data`中的`arc`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ---------- | ----------------- |
| oid | num | 目标id | |
| oid_type | num | 目标id类型 | `0`视频(oid=avid) |
| title | str | 标题 | |
| status | num | (?) | |
| pic | str | 封面url | |
| desc | str | 简介 | |
`data`中的`author`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ---------- | ---- |
| mid | num | 用户mid | |
| name | str | 昵称 | |
| face | str | 头像url | |
| level | num | 用户等级 | |
| vip_info | obj | 会员信息 | |
| pendant | obj | 头像框信息 | |
**示例:**
查看公开笔记`cv15160286`的信息
```shell
curl 'https://api.bilibili.com/x/note/publish/info' \
--data-urlencode 'cvid=15160286'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"cvid": 15160286,
"note_id": 24114044116402190,
"title": "2022哔哩哔哩拜年纪",
"summary": "我决定再重新做一个系列,叫做影评系列 那么我们这一次是影系列的第n期 我也不知道是多少期,到时候回去统计一下 今天的影评是写,2022年哔哩哔哩拜年纪 【...",
"content": "[{"insert":"我决定再重新做一个系列,叫做影评系列\n那么我们这一次是影系列的第n期\n我也不知道是多少期,到时候回去统计一下\n今天的影评是写,2022年哔哩哔哩拜年纪\n【以及往年的拜年祭,会提一下】\n看完哔哩哔哩拜年纪之后,我的触动真的很大,那今天就先写哔哩哔哩拜年纪吧。\n字数同样有点长,希望看过2022哔哩哔哩拜年纪的人可以认真看完吧!也可以说说你的想法啊!\n\n首先先说一说它的时间,因为每次都在除夕夜播放而出现要和家人看春晚,又要去抢红包之类的,所以每次都看不了直播。这一点就很糟心了。\n所以说这次同往年一样,我也是看的回放。\n一\n一开始是2233跳舞,因为我不太关注这些二次元,所以说就不详细评述了\n但是这个和去年的不问天,应该是一个系列的。都是2233在一起出镜,然后配的是一首歌,但是我觉得这首歌确实没有不问天那么惊艳我了。\n【我觉得很大的可能是今年的作曲没有泡泡老师,去年,前年的泡泡老师作的曲都真的非常的好听,而且今年的拜年纪的预告片上也有一个三首他写的歌的串烧。真的很不错。】\n二\n然后就说一下\n今年以及往年的动画\n这个主体动画真的每年做的都很不错。就是既有意义,又有故事,还有深度,同时还介绍了风俗人情和乡土民俗,真的都是非常非常好的动画,并且动画制作也很精良。\n真的想知道这些动画的主创人员都是谁,可是每次都没有标注。\n【既然谈到动画,就来说一下去年预告的一个动画叫盒中之海。其实我本来是去年看拜年纪的时候是没有看到这个预告片的\n但是今年的评论区底下,几乎每一个评论区中都在催盒中之海,于是我便去看了一下。我发现这个真的变得更有意义和深度了。\n他讲的是一个游戏,还有海神等等\n虽然感觉到它的预告片很乱,但是总觉得其中有什么联系?就是很悬疑又很惊恐但一看就很有深度的动画了!\n所以我也期待着了!】\n今年讲的是哔哩楼的故事,我觉得他的那个创意真的很好,就是自助餐厅的创意\n可以让每一个人都尝到厨师的快乐,\n但又不是真正去做厨师,如果真的能有这样一家店就好了!\n然后拜年纪传统的视频串烧节目就不说了吧。\n三\n再后来就是新春小记,俗称的是拜年曲\n去年的拜年曲是吉祥话,我觉得两个都很好听,但是说去年的都是我认识并且比较喜欢的歌手,可以今年的歌手一个都不认识了[em]e107[/em]\n但是近两年的但连许都用了说话开篇,然后其中高潮的时候都是顶针的方式来演唱,可能这也是一个习俗吧,但真的还比较好听!\n四\n一些没有触动的作品就不说了\n所以接下来是灯火!\n我没有想到今年过年能再一次听到\n《灯火里的中国》!\n因为今年春晚没有周深还有些遗憾呢!\n但虽然这首歌不是周深唱的,但也温暖人心!\n这个应该与去年的《我的祖国》是一个系列的!\n五\n四迹老师的动画一如既往的有意思\n【但就是少了灵魂快板……】\n去年和前年的快板真的深入人心了!\n所以我还是最喜欢去年的\n“这个好诶!”\n六\n邪教老师好几年没有写燃曲了哈哈哈哈哈哈\n但这个风灵玉秀和拜年祭一起做的动画挺好的\n虽然我不知道风灵玉秀是什么动画\n但武侠版的这个动画的动作做的很细致\n又不是很快,看的舒服又清晰\n配上音乐……\n【我不在想再说还不错了哈哈哈哈哈哈哈】\n七\n终于到我最喜欢的一首人演唱的歌曲\n【哈哈哈哈哈为了不与卡农冲突】\n《快乐手帐》\n我要把纳兰寻风的词吹爆!!!!!!!!!\n“跟着我,哒哒哒哒,搭个舞台\n跟着我,哒哒哒哒,大步迈开”\n“生活就是平平淡淡,偶尔磕磕绊绊\n让脑筋多转转,往好处看看!”\n真的好温暖!积极向上!向前看!\n这个初音未来的声音也没有不适感了!\n这个真的好棒!\n八\n然后是沃玛!\n沃玛的脑回路真的很独特!\n他的这个系列是视频真的很独特又新奇!\n这个不好描述……自己去看吧!\n沃玛的声音也好听!哈哈哈哈哈哈哈\n九\n魔术跳过吧\n上面是这次拜年级我最喜欢的一个节目,第大调卡农。\n这个真的很温暖,还有小提琴和钢琴的两个二重奏,就是非常的震撼人心,很感动。\n再配上他的画面,从一个小孩儿到最后的老人,感觉这一生都可以用这首歌来概括。所以说真的很感动又很温暖,\n而且这个节目的副标题是:\n致敬一生中每一个重要时刻\n所以更感动了!\n十\n拜年祭燃Line truncated
"cid_count": 0,
"pub_status": 2,
"tags": [],
"arc": {
"oid": 338677252,
"title": "2022哔哩哔哩拜年纪",
"status": 0,
"oid_type": 0,
"pic": "http://i2.hdslb.com/bfs/archive/1e683a5363f35aa0a65419dbf145177099e38f90.jpg",
"desc": ""
},
"author": {
"mid": 523870870,
"name": "夜达星xxxxxxx",
"face": "http://i1.hdslb.com/bfs/face/2cdfd277e63b6bb1f400ed616b5caf0a04196f28.jpg",
"level": 3,
"vip_info": {
"type": 0,
"status": 0,
"due_date": 0,
"vip_pay_type": 0,
"theme_type": 0,
"label": {
"path": "",
"text": "",
"label_theme": "",
"text_color": "",
"bg_style": 0,
"bg_color": "",
"border_color": ""
},
"avatar_subscript": 0,
"nickname_color": "",
"role": 0,
"avatar_subscript_url": ""
},
"pendant": {
"pid": 0,
"name": "",
"image": "",
"expire": 0,
"image_enhance": "",
"image_enhance_frame": ""
}
},
"forbid_note_entrance": false
}
}
```
</details>
@@ -0,0 +1,653 @@
# 笔记列表
## 查询稿件私有笔记
> https://api.bilibili.com/x/note/list/archive
*请求方式:GET*
认证方式:Cookie(SESSDATA)
该接口只能查询私有笔记,无法查询公开笔记
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ------------------------ | ------ | ----------------- |
| oid | num | 目标id | 必要 | |
| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) |
| csrf | str | CSRF Token(位于cookie) | 非必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------- |
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-101:账号未登录 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----- | -------- | -------------------------------------------------- |
| noteIds | array | 笔记列表 | 无笔记则无此项<br />可能后续会允许视频添加多个笔记 |
`data`中的`noteIds`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------ | ---- |
| 0 | str | 笔记id | |
**示例:**
查询视频`av970322090`的笔记id
```shell
curl 'https://api.bilibili.com/x/note/list/archive' \
--data-urlencode 'oid=970322090' \
--data-urlencode 'oid_type=0' \
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code":0,
"message":"0",
"ttl":1,
"data":{
"noteIds":[
"3809605586518023"
]
}
}
```
</details>
## 查询用户私有笔记
> https://api.bilibili.com/x/note/list
*请求方式:GET*
认证方式:Cookie(SESSDATA)
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ------------ | ----------- | ------------------------------------------------------- |
| ps | num | 每页项数 | 必要 | |
| pn | num | 页码 | 必要 | |
| csrf | str | CSRF Token(位于cookie) | 非必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------------------------------------------------- |
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-101:账号未登录 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ----- | -------- | ------------ |
| list | array | 明细列表 | |
| page | obj | 页面信息 | |
`data`中的`list`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---------------- |
| 0 | obj | 笔记1 | |
| n | obj | 笔记(n+1) | 按照创建顺序排列 |
| …… | obj | …… | …… |
`list`中的对象:
| 字段 | 类型 | 内容 | 备注 |
| -------------------- | ---- | ------------ | ------------------------- |
| title | str | 笔记标题 | |
| summary | str | 笔记预览文本 | |
| mtime | str | 提交时间 | YYYY-MM-DD hh:mm |
| arc | obj | 视频信息 | |
| note_id | num | 笔记id | |
| audit_status | num | 0 | 作用尚不明确 |
| web_url | str | 笔记h5页url | |
| note_id_str | str | 笔记id str | |
| message | str | 更新信息 | "更新于 YYYY-MM-DD hh:mm" |
| forbid_note_entrance | bool | (?) | |
| likes | num | 点赞数 | |
| has_like | bool | 是否点赞 | |
`list`中的`arc`中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ------------ | ---------------------- |
| oid | num | 目标id | |
| bvid | str | 稿件bvid | |
| pic | str | 稿件封面图片url | |
| desc | str | 视频简介 | |
| status | num | 0 | |
| oid_type | num | 目标id类型 | `0`视频(oid=avid) |
| aid | num | 稿件avid | |
`data`中的`page`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ------------ | -------------------- |
| total | num | 笔记总数 | |
| size | num | 每页项数 | |
| num | num | 页码 | |
**示例:**
```shell
curl 'https://api.bilibili.com/x/note/list' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"title": "2022哔哩哔哩拜年纪",
"summary": " ...",
"mtime": "2022-02-16 16:46",
"arc": {
"oid": 338677252,
"bvid": "BV1fR4y1T7aV",
"pic": "http://i2.hdslb.com/bfs/archive/1e683a5363f35aa0a65419dbf145177099e38f90.jpg",
"desc": "愿大家看的开心!新年快乐,虎年大吉,欧气十足,万事顺意!ヾ(≧▽≦*)o",
"status": 0,
"oid_type": 0,
"aid": 338677252
},
"note_id": 24508729145690110,
"audit_status": 0,
"web_url": "https://www.bilibili.com/h5/note-app?oid=338677252&oid_type=0&pagefrom=fullpage&navhide=1&-Bct.statusbar.mode=0",
"note_id_str": "24508729145690112",
"message": "更新于 2022-02-16 16:46",
"forbid_note_entrance": false,
"likes": 0,
"has_like": false
}
],
"page": {
"total": 1,
"size": 10,
"num": 1
}
}
}
```
</details>
## 查询稿件公开笔记
> https://api.bilibili.com/x/note/publish/list/archive
*请求方式:GET*
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ---------- | ------ | ----------------- |
| oid | num | 目标id | 必要 | |
| oid_type | num | 目标id类型 | 必要 | `0`视频(oid=avid) |
| ps | num | 每页项数 | 必要 | |
| pn | num | 页码 | 必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------- |
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-101:账号未登录 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------------- | ----- | ------------ | ---- |
| list | array | 公开笔记列表 | |
| page | obj | 页面信息 | |
| show_public_note | bool | | |
| message | str | | |
`data`中的`list`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---------------- |
| 0 | obj | 笔记1 | |
| n | obj | 笔记(n+1) | 按照创建顺序排列 |
| …… | obj | …… | …… |
`list`中的对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ---------------------- | ------------------------- |
| cvid | num | 公开笔记对应的专栏cvid | |
| title | str | 笔记标题 | |
| summary | str | 笔记预览 | |
| pubtime | str | 发布时间 | YYYY-MM-DD hh:mm |
| web_url | str | 笔记h5页url | |
| message | str | 更新信息 | "更新于 YYYY-MM-DD hh:mm" |
| author | obj | 作者信息 | |
| likes | num | 点赞数 | |
| has_like | bool | 是否点赞 | 需要登录(Cookie) |
`list`中的对象中的`author`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ---------- | ---- |
| mid | num | 用户mid | |
| name | str | 昵称 | |
| face | str | 头像url | |
| level | num | 用户等级 | |
| vip_info | obj | 会员信息 | |
| pendant | obj | 头像框信息 | |
**示例:**
查询视频`av338677252`的公开笔记列表
```shell
curl 'https://api.bilibili.com/x/note/publish/list/archive' \
--data-urlencode 'oid=338677252' \
--data-urlencode 'oid_type=0' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"cvid": 15160286,
"title": "2022哔哩哔哩拜年纪",
"summary": "我决定再重新做一个系列,叫做影评系列 那么我们这一次是影系列的第n期 我也不知道是多少期,到时候回去统计一下 今天的影评是写,2022年哔哩哔哩拜年纪 【...",
"pubtime": "2022-02-07 23:44",
"web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15160286&pagefrom=ugcvideo",
"message": "更新于 2022-02-07 23:44",
"author": {
"mid": 523870870,
"name": "夜达星xxxxxxx",
"face": "http://i1.hdslb.com/bfs/face/2cdfd277e63b6bb1f400ed616b5caf0a04196f28.jpg",
"level": 3,
"vip_info": {
"type": 0,
"status": 0,
"due_date": 0,
"vip_pay_type": 0,
"theme_type": 0,
"label": {
"path": "",
"text": "",
"label_theme": "",
"text_color": "",
"bg_style": 0,
"bg_color": "",
"border_color": ""
},
"avatar_subscript": 0,
"nickname_color": "",
"role": 0,
"avatar_subscript_url": ""
},
"pendant": {
"pid": 0,
"name": "",
"image": "",
"expire": 0,
"image_enhance": "",
"image_enhance_frame": ""
}
},
"likes": 7,
"has_like": false
},
{
"cvid": 15086217,
"title": "2022哔哩哔哩拜年纪",
"summary": "节目表,多图预警,方便各位时间戳跳转…… 01:20 New Day [图片] 06:32 重返哔哩楼1 [图片] 11:06 嗨,...",
"pubtime": "2022-02-01 20:07",
"web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15086217&pagefrom=ugcvideo",
"message": "更新于 2022-02-01 20:07",
"author": {
"mid": 3810985,
"name": "Remレム22",
"face": "http://i1.hdslb.com/bfs/face/4cce970eb1b9fb8b322d49133a11caa630178728.jpg",
"level": 6,
"vip_info": {
"type": 2,
"status": 1,
"due_date": 1694880000000,
"vip_pay_type": 1,
"theme_type": 0,
"label": {
"path": "",
"text": "年度大会员",
"label_theme": "annual_vip",
"text_color": "#FFFFFF",
"bg_style": 1,
"bg_color": "#FB7299",
"border_color": ""
},
"avatar_subscript": 1,
"nickname_color": "#FB7299",
"role": 3,
"avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
},
"pendant": {
"pid": 0,
"name": "",
"image": "",
"expire": 0,
"image_enhance": "",
"image_enhance_frame": ""
}
},
"likes": 22,
"has_like": false
},
{
"cvid": 15080841,
"title": "2022哔哩哔哩拜年纪",
"summary": "2022哔哩哔哩拜年纪从厨师的角度开始了故事,而厨师象征着每个人,每一道菜都是每个厨师用汗水耕耘出来的,并且在主线故事中穿插这不同的小故事,代表了近几年生...",
"pubtime": "2022-02-01 10:10",
"web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15080841&pagefrom=ugcvideo",
"message": "更新于 2022-02-01 10:10",
"author": {
"mid": 482114483,
"name": "沐曦mornal",
"face": "http://i2.hdslb.com/bfs/face/cf1ef9c2045e317dfe6dbe8659b6f7a69c7572d5.jpg",
"level": 4,
"vip_info": {
"type": 1,
"status": 1,
"due_date": 1646755200000,
"vip_pay_type": 1,
"theme_type": 0,
"label": {
"path": "",
"text": "大会员",
"label_theme": "vip",
"text_color": "#FFFFFF",
"bg_style": 1,
"bg_color": "#FB7299",
"border_color": ""
},
"avatar_subscript": 1,
"nickname_color": "",
"role": 1,
"avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
},
"pendant": {
"pid": 0,
"name": "",
"image": "",
"expire": 0,
"image_enhance": "",
"image_enhance_frame": ""
}
},
"likes": 7,
"has_like": false
},
{
"cvid": 15080246,
"title": "2022哔哩哔哩拜年纪",
"summary": "niumniumnium~~~33是我的菜了! 这次的跨年纪呢确实不同于以往。我发现现代技术确实给类似的活动提供了平台与支持,但是不可否认的是bilibi...",
"pubtime": "2022-02-01 08:59",
"web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15080246&pagefrom=ugcvideo",
"message": "更新于 2022-02-01 08:59",
"author": {
"mid": 1049943541,
"name": "吃瓜的DINGBALL",
"face": "http://i1.hdslb.com/bfs/face/93e7a3826586338e15e5703f9d49bb3bbd0adfa5.jpg",
"level": 2,
"vip_info": {
"type": 1,
"status": 0,
"due_date": 1641744000000,
"vip_pay_type": 0,
"theme_type": 0,
"label": {
"path": "",
"text": "",
"label_theme": "",
"text_color": "",
"bg_style": 0,
"bg_color": "",
"border_color": ""
},
"avatar_subscript": 0,
"nickname_color": "",
"role": 0,
"avatar_subscript_url": ""
},
"pendant": {
"pid": 0,
"name": "",
"image": "",
"expire": 0,
"image_enhance": "",
"image_enhance_frame": ""
}
},
"likes": 10,
"has_like": false
},
{
"cvid": 15077197,
"title": "2022哔哩哔哩拜年纪",
"summary": "23333333333333333333333333333333333333333333333333333333333333333333333333333...",
"pubtime": "2022-01-31 22:53",
"web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15077197&pagefrom=ugcvideo",
"message": "更新于 2022-01-31 22:53",
"author": {
"mid": 433136442,
"name": "KiBi_3",
"face": "http://i0.hdslb.com/bfs/face/4c11d1419316f14b8b0f5c146d0cd34627955244.jpg",
"level": 2,
"vip_info": {
"type": 0,
"status": 0,
"due_date": 0,
"vip_pay_type": 0,
"theme_type": 0,
"label": {
"path": "",
"text": "",
"label_theme": "",
"text_color": "",
"bg_style": 0,
"bg_color": "",
"border_color": ""
},
"avatar_subscript": 0,
"nickname_color": "",
"role": 0,
"avatar_subscript_url": ""
},
"pendant": {
"pid": 0,
"name": "",
"image": "",
"expire": 0,
"image_enhance": "",
"image_enhance_frame": ""
}
},
"likes": 2,
"has_like": false
},
{
"cvid": 15077019,
"title": "2022哔哩哔哩拜年纪",
"summary": "2022加油吖!~~~~~~~~~~~~~~~~~~~~~2022加油吖!2022加油吖!2022加油吖!2022加油吖!2022加油吖!2022加油吖!...",
"pubtime": "2022-01-31 22:36",
"web_url": "https://www.bilibili.com/h5/note-app/view?cvid=15077019&pagefrom=ugcvideo",
"message": "更新于 2022-01-31 22:36",
"author": {
"mid": 11283554,
"name": "zhen_____",
"face": "http://i0.hdslb.com/bfs/baselabs/381fcc3865daf85bd6a1ddc4b6dfbd11ba937dc9.jpg",
"level": 6,
"vip_info": {
"type": 2,
"status": 1,
"due_date": 1730736000000,
"vip_pay_type": 0,
"theme_type": 0,
"label": {
"path": "",
"text": "年度大会员",
"label_theme": "annual_vip",
"text_color": "#FFFFFF",
"bg_style": 1,
"bg_color": "#FB7299",
"border_color": ""
},
"avatar_subscript": 1,
"nickname_color": "#FB7299",
"role": 3,
"avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
},
"pendant": {
"pid": 5459,
"name": "星座系列:巨蟹座",
"image": "http://i2.hdslb.com/bfs/garb/item/a6e5b6b36a4a6c00ca8881ecc837c2aa9ebcb53d.png",
"expire": 0,
"image_enhance": "http://i2.hdslb.com/bfs/garb/item/a6e5b6b36a4a6c00ca8881ecc837c2aa9ebcb53d.png",
"image_enhance_frame": ""
}
},
"likes": 5,
"has_like": false
}
],
"page": {
"total": 6,
"size": 10,
"num": 1
},
"show_public_note": true,
"message": ""
}
}
```
</details>
## 查询用户公开笔记
> https://api.bilibili.com/x/note/publish/list/user
*请求方式:GET*
认证方式:Cookie(SESSDATA)
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ------------------------ | ------ | ---- |
| ps | num | 每页项数 | 必要 | |
| pn | num | 页码 | 必要 | |
| csrf | str | CSRF Token(位于cookie) | 非必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------- |
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-101:账号未登录 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ----- | -------- | ---- |
| list | array | 明细列表 | |
| page | obj | 页面信息 | |
`data`中的`list`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---------------- |
| 0 | obj | 笔记1 | |
| n | obj | 笔记(n+1) | 按照创建顺序排列 |
| …… | obj | …… | …… |
`data`中的`page`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----- | ---- | -------- | ---- |
| total | num | 笔记总数 | |
| size | num | 每页项数 | |
| num | num | 页码 | |
**示例:**
```shell
curl 'https://api.bilibili.com/x/note/publish/list/user' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"page": {
"total": 0,
"size": 10,
"num": 1
}
}
}
```
</details>
@@ -0,0 +1,159 @@
# 视频笔记
2020-11-16 B站推出了测试版的功能——"视频笔记",与视频稿件关联,为富文本模式,可供记录观看视频时的感悟以及视频中的重要内容,目前只可在web端操作
笔记分为私有笔记和公开笔记,一个稿件只能添加一篇私有笔记,但可以公开多篇笔记
公开笔记与【专栏】性质相同,使用`cvid`寻址相应的公开笔记
---
**继续查看:**
- [笔记列表](list.md)
- [笔记详细信息](info.md)
- [笔记操作](action.md)
---
## 附表-笔记正文序列格式
根数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------- | ---- |
| 0 | obj | 第1个元素 | |
| n | obj | 第(n+1)个元素 | |
| …… | obj | …… | …… |
根数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ---- | ------------ | ------------------- |
| attributes | obj | 元素属性 | 无属性无此项 |
| insert | str | 元素内容 | 为跳转/图片时无此项 |
| insert | obj | 元素跳转信息 | 非跳转/图片时无此项 |
对象中的`attributes`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ---- | ---------- | ------------------------------ |
| bold | bool | 是否加粗 | |
| strike | bool | 是否删除线 | |
| underline | bool | 是否下划线 | |
| background | str | 背景颜色 | |
| color | str | 文字颜色 | |
| list | str | 列表属性 | ordered有序列表/bullet无序列表 |
| size | str | 文字字号 | |
对象中的`insert`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | -------- | ------ |
| tag | obj | 跳转标签 | 二选一 |
| imageUpload | obj | 笔记图片 | 二选一 |
`insert`中的`tag`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ----------------- | ------------ |
| cid | num | 视频cid | |
| status | num | 0 | 作用尚不明确 |
| index | num | 在稿件中的分P索引 | |
| seconds | num | 视频进度 | |
| cidCount | num | 稿件总分P数 | |
| key | str | 标签创建时间戳 | |
| title | str | output | 作用尚不明确 |
`insert`中的`imageUpload`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ---------- | ------------ |
| url | str | 图片链接 | |
| status | str | done | 作用尚不明确 |
| width | num | 图片宽度-2 | |
示例:
以下笔记正文序列包含`字号`、`加粗`、`高亮`、`普通文本`格式
```json
[
{
"attributes": {
"size": "24px",
"bold": true
},
"insert": "关掉"
},
{
"attributes": {
"size": "24px"
},
"insert": ","
},
{
"attributes": {
"size": "24px",
"bold": true
},
"insert": "关掉"
},
{
"insert": ","
},
{
"attributes": {
"background": "#fff359"
},
"insert": "一定要"
},
{
"attributes": {
"background": "#fff359",
"bold": true
},
"insert": "关掉"
},
{
"insert": "\n再不关掉那些"
},
{
"attributes": {
"bold": true
},
"insert": "网络游戏"
},
{
"insert": ",小孩哪有"
},
{
"attributes": {
"bold": true
},
"insert": "美好的未来"
},
{
"insert": ",哪有"
},
{
"attributes": {
"bold": true
},
"insert": "美好的前程"
},
{
"insert": ",祖国哪有"
},
{
"attributes": {
"bold": true
},
"insert": "栋梁之才"
},
{
"insert": "\n"
}
]
```