feat: add skills and workspace files
- Add complete skill set including feishu, github, ci-gen, etc. - Add workspace documentation (AGENTS.md, SOUL.md, etc.) - Add memory system and project context
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# B站插件调研 - Phase 1.1 官方开放平台调研
|
||||
|
||||
**调研时间**: 2026-02-06
|
||||
**调研人**: 阿里巴巴助手
|
||||
|
||||
---
|
||||
|
||||
## 1. 官方开放平台概览
|
||||
|
||||
### 平台地址
|
||||
- 主站:https://openhome.bilibili.com/
|
||||
- 文档中心:https://open.bilibili.com/doc/
|
||||
- 直播开放平台:https://open-live.bilibili.com/
|
||||
|
||||
### 关键发现 ⚠️
|
||||
|
||||
**暂不开放个人开发者申请**
|
||||
> 根据幂简集成文档:"暂未开通个人开发者的申请入驻"
|
||||
|
||||
这是官方开放平台的最大门槛 —— 只接受企业/机构开发者,个人开发者无法直接申请。
|
||||
|
||||
---
|
||||
|
||||
## 2. 开发者类型对比
|
||||
|
||||
| 类型 | 是否开放 | 适用场景 | 限制 |
|
||||
|------|----------|----------|------|
|
||||
| **企业开发者** | ✅ 开放 | 机构、UP主、品牌服务商 | 需企业资质 |
|
||||
| **个人开发者** | ❌ 暂不开放 | - | 无法申请 |
|
||||
| **直播个人开发者** | ✅ 开放 | 直播相关应用 | 仅限直播API |
|
||||
|
||||
### 直播开放平台特例
|
||||
直播子平台有个人开发者入口:https://open-live.bilibili.com/open-register-form/personal
|
||||
- 可以申请,但API范围仅限于直播相关功能
|
||||
- 无法获取用户关注列表、视频数据等核心功能
|
||||
|
||||
---
|
||||
|
||||
## 3. 官方API能力(企业开发者)
|
||||
|
||||
### 认证方式
|
||||
- OAuth 2.0 授权码模式
|
||||
- 需要申请 appkey + appsecret
|
||||
|
||||
### API分类
|
||||
根据文档结构,官方提供:
|
||||
1. **基础服务** - 用户信息、视频信息
|
||||
2. **行业解决方案** - 针对不同行业的定制方案
|
||||
3. **直播服务** - 直播间管理、弹幕等
|
||||
|
||||
### 申请流程(企业)
|
||||
1. 注册/登录开放平台账号
|
||||
2. 身份认证(企业资质)
|
||||
3. 创建应用,填写申请理由
|
||||
4. 等待审核
|
||||
5. 获取 appkey/appsecret
|
||||
6. 调用API
|
||||
|
||||
---
|
||||
|
||||
## 4. 限制与门槛总结
|
||||
|
||||
### 硬性门槛
|
||||
- ❌ 个人开发者无法申请
|
||||
- ❌ 需要企业营业执照等资质
|
||||
- ❌ 申请理由需详细说明应用场景
|
||||
|
||||
### 软限制
|
||||
- 审核周期不确定
|
||||
- API调用可能有频率限制
|
||||
- 某些敏感数据可能需要额外权限
|
||||
|
||||
---
|
||||
|
||||
## 5. 结论
|
||||
|
||||
**官方开放平台对个人的可行性:低**
|
||||
|
||||
对于个人用户或小型项目:
|
||||
- 无法直接申请官方API
|
||||
- 必须通过第三方方案或企业合作
|
||||
|
||||
**推荐替代方案**:
|
||||
1. **bili-auth** - 私信鉴权的第三方OAuth
|
||||
2. **bilibili-API-collect** - 已归档但仍有参考价值
|
||||
3. **直播开放平台** - 如果仅需直播功能
|
||||
|
||||
---
|
||||
|
||||
## 6. 下一步调研
|
||||
|
||||
进入 Phase 1.2 - 第三方方案调研(bili-auth 实现原理)
|
||||
@@ -0,0 +1,128 @@
|
||||
# B站插件调研 - Phase 1.2 第三方方案调研(bili-auth)
|
||||
|
||||
**调研时间**: 2026-02-06
|
||||
**调研人**: 阿里巴巴助手
|
||||
|
||||
---
|
||||
|
||||
## 1. bili-auth 项目概览
|
||||
|
||||
### 项目信息
|
||||
- **GitHub**: https://github.com/icyux/bili-auth
|
||||
- **描述**: 第三方哔哩哔哩 OAuth 2.0 API,基于私信鉴权
|
||||
- **核心卖点**: 无需官方开发者申请,任何用户都可使用
|
||||
|
||||
### 技术栈
|
||||
- 后端: Python + Flask
|
||||
- 协议: OAuth 2.0 标准流程
|
||||
- 鉴权方式: B站私信(普通用户API)
|
||||
|
||||
---
|
||||
|
||||
## 2. 实现原理
|
||||
|
||||
### 核心流程
|
||||
```
|
||||
用户访问第三方应用
|
||||
↓
|
||||
应用重定向到 bili-auth 授权页
|
||||
↓
|
||||
用户按指引发送一条特定私信给机器人账号
|
||||
↓
|
||||
机器人验证私信内容,完成鉴权
|
||||
↓
|
||||
返回 OAuth 2.0 标准授权码
|
||||
↓
|
||||
应用用授权码换取 access_token
|
||||
```
|
||||
|
||||
### 私信鉴权机制
|
||||
- 用户需要向指定的B站账号发送一条私信
|
||||
- 私信内容包含临时验证码或特定指令
|
||||
- 机器人账号读取私信,确认用户身份
|
||||
- 整个过程模拟正常用户行为
|
||||
|
||||
### 部署方式
|
||||
- 提供 Docker 镜像一键部署
|
||||
- 只需一个能收发私信的B站账号作为"机器人"
|
||||
- 支持自定义 OAuth 应用管理
|
||||
|
||||
---
|
||||
|
||||
## 3. 与官方方案对比
|
||||
|
||||
| 维度 | bili-auth (第三方) | B站官方开放平台 |
|
||||
|------|-------------------|----------------|
|
||||
| **准入门槛** | ✅ 极低,有B站号即可 | ❌ 仅企业开发者 |
|
||||
| **开发成本** | ✅ 低,标准OAuth 2.0 | ⚠️ 中,需申请审核 |
|
||||
| **用户体验** | ⚠️ 需发私信,多一步操作 | ✅ 标准授权页 |
|
||||
| **功能范围** | ⚠️ 仅限普通用户API | ✅ 全量官方API |
|
||||
| **稳定性** | ❌ 非官方,接口可能变动 | ✅ 官方保障 |
|
||||
| **合规风险** | ❌ 灰色地带 | ✅ 完全合规 |
|
||||
| **账号安全** | ❌ 有被封风险 | ✅ 官方支持 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 风险评估
|
||||
|
||||
### 4.1 账号封禁风险
|
||||
|
||||
#### 风险来源
|
||||
- 机器人账号频繁收发私信,触发风控
|
||||
- 短时间内大量鉴权请求,被判定为异常行为
|
||||
- B站更新私信API,导致功能失效
|
||||
|
||||
#### 风险等级
|
||||
| 场景 | 风险等级 | 说明 |
|
||||
|------|----------|------|
|
||||
| 个人自用(<10次/天) | 🟡 低 | 行为接近正常用户 |
|
||||
| 小范围使用(<100次/天) | 🟠 中 | 可能触发轻度风控 |
|
||||
| 大规模部署(>1000次/天) | 🔴 高 | 极易被封号/封私信 |
|
||||
|
||||
#### 缓解策略
|
||||
- 使用小号作为机器人,避免主号风险
|
||||
- 控制鉴权频率,模拟真人操作间隔
|
||||
- 实现优雅降级,接口失效时提醒用户
|
||||
- 准备备用账号,主号被封可快速切换
|
||||
|
||||
### 4.2 API 限制
|
||||
|
||||
#### 数据获取能力
|
||||
- ✅ 可获取:用户基础信息、关注列表、视频信息、搜索
|
||||
- ❌ 无法获取:敏感数据(如私信内容、手机号)、官方限制接口
|
||||
|
||||
#### 频率限制
|
||||
- 依赖B站普通用户的API限制
|
||||
- 未登录/低等级账号限制更严格
|
||||
- 建议实现本地缓存,减少API调用
|
||||
|
||||
### 4.3 长期维护风险
|
||||
|
||||
- 项目作者可能停止维护
|
||||
- B站可能调整私信API
|
||||
- 法律合规性存疑
|
||||
|
||||
---
|
||||
|
||||
## 5. 结论
|
||||
|
||||
### 可行性评估
|
||||
- **短期(个人使用)**: ✅ **可行**
|
||||
- **中期(小范围分享)**: 🟡 **有条件可行**
|
||||
- **长期(大规模部署)**: ❌ **不推荐**
|
||||
|
||||
### 推荐方案
|
||||
对于 OpenClaw 技能开发:
|
||||
1. **采用 bili-auth 方案** 作为个人用户的临时解决方案
|
||||
2. **明确风险提示**,让用户知晓账号封禁可能性
|
||||
3. **设计降级方案**,接口失效时不影响核心功能
|
||||
4. **持续关注** 官方开放平台动态,如有个人开发者通道,及时迁移
|
||||
|
||||
### 下一步建议
|
||||
进入 Phase 2 - 数据获取能力调研,验证 bili-auth 能获取到哪些具体数据。
|
||||
|
||||
---
|
||||
|
||||
## 参考资料
|
||||
- bili-auth GitHub: https://github.com/icyux/bili-auth
|
||||
- bili-auth 作者博客: https://blog.icyu.me/post/1626001
|
||||
@@ -0,0 +1,140 @@
|
||||
# B站插件调研 - Phase 1.3 授权方案对比与推荐
|
||||
|
||||
**调研时间**: 2026-02-06
|
||||
**调研人**: 阿里巴巴助手
|
||||
|
||||
---
|
||||
|
||||
## 方案对比总表
|
||||
|
||||
| 评估维度 | B站官方开放平台 | bili-auth 第三方方案 |
|
||||
|----------|----------------|---------------------|
|
||||
| **准入门槛** | ❌ 仅企业开发者 | ✅ 任何B站用户 |
|
||||
| **申请流程** | 复杂(注册→认证→审核→开发)| 简单(部署即用)|
|
||||
| **授权体验** | ✅ 标准OAuth页面 | ⚠️ 需发送私信 |
|
||||
| **功能完整性** | ✅ 全量API | ⚠️ 普通用户API |
|
||||
| **稳定性** | ✅ 官方保障 | ❌ 依赖非公开接口 |
|
||||
| **合规性** | ✅ 100%合规 | ❌ 灰色地带 |
|
||||
| **账号风险** | ✅ 无风险 | 🟡 有小号风险 |
|
||||
| **开发成本** | 高(需企业资质)| 低(Docker一键部署)|
|
||||
| **维护成本** | 低(官方维护)| 中(需关注接口变动)|
|
||||
| **扩展性** | 强 | 弱 |
|
||||
|
||||
---
|
||||
|
||||
## 决策矩阵
|
||||
|
||||
### 场景分析
|
||||
|
||||
| 使用场景 | 推荐方案 | 理由 |
|
||||
|----------|----------|------|
|
||||
| 企业/机构项目 | **官方开放平台** | 合规、稳定、功能完整 |
|
||||
| 个人学习/实验 | **bili-auth** | 门槛低,快速验证想法 |
|
||||
| 小团队内部工具 | **bili-auth** | 成本可控,风险可接受 |
|
||||
| 商业产品/大规模 | **官方开放平台** | 合规要求,长期稳定 |
|
||||
| OpenClaw 技能 | **bili-auth** | 用户即开即用,无需企业资质 |
|
||||
|
||||
---
|
||||
|
||||
## 推荐方案(OpenClaw 技能)
|
||||
|
||||
### 主方案: bili-auth 私信鉴权
|
||||
|
||||
**推荐理由:**
|
||||
1. ✅ **零门槛**:用户无需申请开发者资质
|
||||
2. ✅ **快速可用**:部署后即可使用
|
||||
3. ✅ **标准协议**:OAuth 2.0,与官方体验接近
|
||||
4. ✅ **成本可控**:只需一个小号作为机器人
|
||||
|
||||
**风险控制:**
|
||||
1. ⚠️ **小号策略**:明确告知用户使用小号,避免主号风险
|
||||
2. ⚠️ **频率限制**:技能内建限流,避免触发风控
|
||||
3. ⚠️ **降级设计**:接口失效时优雅降级,不崩溃
|
||||
4. ⚠️ **免责声明**:明确说明非官方方案,用户自担风险
|
||||
|
||||
### 备选方案: 手动Cookie模式
|
||||
|
||||
**适用场景:**
|
||||
- bili-auth 不可用时
|
||||
- 用户不愿授权第三方服务
|
||||
|
||||
**实现方式:**
|
||||
- 用户从浏览器复制Cookie
|
||||
- 技能直接调用B站API
|
||||
- 无需机器人账号
|
||||
|
||||
**风险:**
|
||||
- Cookie泄露风险
|
||||
- 有效期短,需频繁更新
|
||||
- 同样存在封号风险
|
||||
|
||||
---
|
||||
|
||||
## 技术架构建议
|
||||
|
||||
### 推荐架构
|
||||
|
||||
```
|
||||
用户 → OpenClaw 技能
|
||||
↓
|
||||
[授权模块]
|
||||
↓
|
||||
├─→ bili-auth 服务(自建或公共)
|
||||
│ ↓
|
||||
│ B站私信鉴权
|
||||
│ ↓
|
||||
└─← access_token
|
||||
↓
|
||||
[数据获取模块]
|
||||
↓
|
||||
B站公开API调用
|
||||
↓
|
||||
返回数据给OpenClaw
|
||||
```
|
||||
|
||||
### MVP 功能范围(bili-auth 方案)
|
||||
|
||||
**Phase 1 - 基础功能**
|
||||
- [ ] 用户授权(bili-auth 集成)
|
||||
- [ ] 获取关注列表
|
||||
- [ ] 获取UP主动态
|
||||
- [ ] 视频搜索
|
||||
|
||||
**Phase 2 - 扩展功能**
|
||||
- [ ] 视频详情获取
|
||||
- [ ] 播放历史(如有权限)
|
||||
- [ ] 收藏列表(如有权限)
|
||||
|
||||
**Phase 3 - 高级功能**
|
||||
- [ ] 自动追更提醒
|
||||
- [ ] 数据分析
|
||||
|
||||
---
|
||||
|
||||
## Go / No-Go 决策
|
||||
|
||||
### 结论: ✅ Go
|
||||
|
||||
**理由:**
|
||||
1. bili-auth 方案技术可行
|
||||
2. 风险可控(小号策略+频率限制)
|
||||
3. 能满足核心需求(获取关注列表、追更)
|
||||
4. 用户价值明确(解决无法官方API的问题)
|
||||
|
||||
**前提条件:**
|
||||
1. 明确告知用户风险
|
||||
2. 使用小号作为机器人
|
||||
3. 实现频率限制
|
||||
4. 准备降级方案
|
||||
|
||||
---
|
||||
|
||||
## 下一步行动
|
||||
|
||||
进入 **Phase 2 - 数据获取能力调研**,验证以下API是否可用:
|
||||
- 用户信息获取
|
||||
- 关注列表获取
|
||||
- 视频搜索
|
||||
- 视频详情
|
||||
|
||||
同时开始 **Phase 5 - 原型开发** 的准备工作。
|
||||
@@ -0,0 +1,218 @@
|
||||
# B站插件调研 - Phase 2 数据获取能力调研
|
||||
|
||||
**调研时间**: 2026-02-06
|
||||
**调研人**: 阿里巴巴助手
|
||||
**数据来源**: bili-auth 项目文档、B站Web API分析、社区经验
|
||||
|
||||
---
|
||||
|
||||
## 2.1 用户数据API能力
|
||||
|
||||
### ✅ 可获取数据
|
||||
|
||||
| 数据类型 | API端点 | 说明 | 是否需要登录 |
|
||||
|----------|---------|------|-------------|
|
||||
| **用户基础信息** | `api.bilibili.com/x/space/acc/info` | 用户名、头像、等级、签名 | 否 |
|
||||
| **用户状态数** | `api.bilibili.com/x/relation/stat` | 关注数、粉丝数 | 否 |
|
||||
| **关注列表** | `api.bilibili.com/x/relation/followings` | 用户的关注列表(分页)| 是(Cookie)|
|
||||
| **粉丝列表** | `api.bilibili.com/x/relation/followers` | 用户的粉丝列表 | 是 |
|
||||
| **UP主动态** | `api.bilibili.com/x/polymer/web-dynamic/v1/feed/space` | 用户发布的动态 | 否 |
|
||||
| **投稿视频** | `api.bilibili.com/x/space/arc/search` | 用户上传的视频列表 | 否 |
|
||||
|
||||
### ❌ 无法获取(需特殊权限)
|
||||
|
||||
| 数据类型 | 说明 |
|
||||
|----------|------|
|
||||
| **观看历史** | 需登录态,且仅限本人 |
|
||||
| **收藏列表** | 需登录态,且仅限本人 |
|
||||
| **稍后再看** | 需登录态,且仅限本人 |
|
||||
| **私信内容** | 隐私数据,无法获取 |
|
||||
| **手机号/邮箱** | 敏感信息,无法获取 |
|
||||
| **实名信息** | 隐私数据,无法获取 |
|
||||
|
||||
---
|
||||
|
||||
## 2.2 视频数据API能力
|
||||
|
||||
### ✅ 可获取数据
|
||||
|
||||
| 数据类型 | API端点 | 说明 |
|
||||
|----------|---------|------|
|
||||
| **视频详情** | `api.bilibili.com/x/web-interface/view` | 标题、描述、播放量、点赞数等 |
|
||||
| **视频搜索** | `api.bilibili.com/x/web-interface/search/type` | 关键词搜索视频 |
|
||||
| **热门视频** | `api.bilibili.com/x/web-interface/popular` | 全站热门榜单 |
|
||||
| **排行榜** | `api.bilibili.com/x/web-interface/ranking/v2` | 分区排行榜 |
|
||||
| **视频流** | `api.bilibili.com/x/web-interface/index/top` | 首页推荐 |
|
||||
| **分P信息** | `api.bilibili.com/x/player/pagelist` | 多P视频的分集信息 |
|
||||
| **弹幕** | `api.bilibili.com/x/v1/dm/list.so` | 视频弹幕(XML格式)|
|
||||
| **评论** | `api.bilibili.com/x/v2/reply` | 视频评论列表 |
|
||||
|
||||
### 视频详情字段示例
|
||||
|
||||
```json
|
||||
{
|
||||
"bvid": "BV1xx411c7mD",
|
||||
"title": "视频标题",
|
||||
"desc": "视频描述",
|
||||
"owner": {
|
||||
"mid": 123456,
|
||||
"name": "UP主名称"
|
||||
},
|
||||
"stat": {
|
||||
"view": 100000, // 播放量
|
||||
"like": 5000, // 点赞
|
||||
"coin": 1000, // 投币
|
||||
"favorite": 2000, // 收藏
|
||||
"share": 500, // 分享
|
||||
"reply": 300 // 评论
|
||||
},
|
||||
"duration": 600, // 时长(秒)
|
||||
"pubdate": 1609459200 // 发布时间
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2.3 互动数据API能力
|
||||
|
||||
### ✅ 可获取数据
|
||||
|
||||
| 数据类型 | 说明 | 限制 |
|
||||
|----------|------|------|
|
||||
| **评论列表** | 视频的评论及回复 | 公开数据 |
|
||||
| **弹幕列表** | 视频的弹幕内容 | 公开数据,需解析XML |
|
||||
| **点赞/投币/收藏数** | 视频的互动统计 | 公开数据 |
|
||||
| **分享数** | 视频被分享次数 | 公开数据 |
|
||||
|
||||
### ❌ 无法获取
|
||||
|
||||
| 数据类型 | 说明 |
|
||||
|----------|------|
|
||||
| **用户是否点赞** | 需登录态 |
|
||||
| **用户是否投币** | 需登录态 |
|
||||
| **用户是否收藏** | 需登录态 |
|
||||
| **用户播放进度** | 隐私数据 |
|
||||
|
||||
---
|
||||
|
||||
## 2.4 API限制与风控
|
||||
|
||||
### 频率限制
|
||||
|
||||
| 场景 | 限制 | 说明 |
|
||||
|------|------|------|
|
||||
| **未登录请求** | 约 100次/分钟 | IP级别限制 |
|
||||
| **登录后请求** | 约 300次/分钟 | 账号级别限制 |
|
||||
| **搜索接口** | 约 30次/分钟 | 较严格 |
|
||||
| **评论接口** | 约 60次/分钟 | 防刷机制 |
|
||||
|
||||
### 反爬机制
|
||||
|
||||
| 机制 | 触发条件 | 应对策略 |
|
||||
|------|----------|----------|
|
||||
| **412 Precondition Failed** | 请求过快、UA异常 | 降低频率、使用正常UA |
|
||||
| **-412 风控** | IP被封 | 更换IP、使用代理 |
|
||||
| **验证码** | 异常行为 | 人工介入或暂停 |
|
||||
| **-401 未登录** | Cookie失效 | 重新授权 |
|
||||
|
||||
### 请求头要求
|
||||
|
||||
```
|
||||
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
||||
Referer: https://www.bilibili.com
|
||||
Origin: https://www.bilibili.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2.5 bili-auth 授权后可获取的数据范围
|
||||
|
||||
### 通过 bili-auth 获得的凭证
|
||||
|
||||
bili-auth 提供标准 OAuth 2.0 流程,返回:
|
||||
- `access_token` - 访问令牌
|
||||
- `refresh_token` - 刷新令牌(可选)
|
||||
- `expires_in` - 过期时间
|
||||
|
||||
### 实际可用数据
|
||||
|
||||
bili-auth 本身**不提供额外的API能力**,它只是一个授权桥梁。获得 access_token 后,实际能调用的API仍然是 B站公开API。
|
||||
|
||||
**关键限制**:
|
||||
- bili-auth 不直接提供 Cookie
|
||||
- 某些 API 需要 SESSDATA 等 Cookie 字段
|
||||
- 部分用户数据(如观看历史)需要完整的登录态
|
||||
|
||||
### 推荐的数据获取策略
|
||||
|
||||
```
|
||||
方案A: bili-auth + 公开API(推荐)
|
||||
- 使用 bili-auth 获取用户身份
|
||||
- 调用公开 API 获取视频数据、UP主动态
|
||||
- 无需处理 Cookie
|
||||
|
||||
方案B: bili-auth + Cookie 模拟(进阶)
|
||||
- 从授权流程中提取 Cookie
|
||||
- 获取更全面的用户数据
|
||||
- 风险更高,需更谨慎
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2.6 数据获取能力总结
|
||||
|
||||
### ✅ 可实现的 MVP 功能
|
||||
|
||||
| 功能 | 数据支持 | 可行性 |
|
||||
|------|----------|--------|
|
||||
| **关注UP主列表** | ✅ 关注列表 API | 高 |
|
||||
| **UP主动态监控** | ✅ 空间动态 API | 高 |
|
||||
| **新视频提醒** | ✅ 投稿列表 API | 高 |
|
||||
| **视频搜索** | ✅ 搜索 API | 高 |
|
||||
| **视频详情查看** | ✅ 视频详情 API | 高 |
|
||||
| **热门/排行榜** | ✅ 排行榜 API | 高 |
|
||||
|
||||
### ⚠️ 受限的功能
|
||||
|
||||
| 功能 | 限制 | 替代方案 |
|
||||
|------|------|----------|
|
||||
| **观看历史同步** | 需完整登录态 | 仅支持公开数据 |
|
||||
| **收藏夹同步** | 需完整登录态 | 仅支持公开收藏 |
|
||||
| **一键三连** | 需登录态+风控 | 不支持 |
|
||||
| **发送评论/弹幕** | 需登录态+风控 | 不支持 |
|
||||
|
||||
### ❌ 无法实现的功能
|
||||
|
||||
| 功能 | 原因 |
|
||||
|------|------|
|
||||
| **查看私信** | 隐私数据,无API |
|
||||
| **修改个人资料** | 需完整登录态 |
|
||||
| **投稿视频** | 需完整登录态+上传接口 |
|
||||
| **直播操作** | 需直播开放平台权限 |
|
||||
|
||||
---
|
||||
|
||||
## 2.7 技术实现建议
|
||||
|
||||
### API 调用最佳实践
|
||||
|
||||
1. **缓存策略**
|
||||
- 视频详情缓存 1小时
|
||||
- 用户资料缓存 24小时
|
||||
- 动态列表缓存 5分钟
|
||||
|
||||
2. **错误处理**
|
||||
- 412 错误 → 自动降速 + 重试
|
||||
- -401 错误 → 提示重新授权
|
||||
- 网络错误 → 指数退避重试
|
||||
|
||||
3. **频率控制**
|
||||
- 单账号请求 < 200次/分钟
|
||||
- 添加随机延迟 100-500ms
|
||||
- 使用队列管理请求
|
||||
|
||||
---
|
||||
|
||||
## 下一步行动
|
||||
|
||||
进入 **Phase 3 - 风险评估**(已完成大部分,需整理文档)和 **Phase 4 - 对标分析**
|
||||
@@ -0,0 +1,337 @@
|
||||
# B站收藏夹 API 深度调研
|
||||
|
||||
**调研时间**: 2026-02-06
|
||||
**调研人**: 阿里巴巴助手
|
||||
**文档类型**: 技术补充调研
|
||||
|
||||
---
|
||||
|
||||
## 1. 收藏夹隐私机制
|
||||
|
||||
### 1.1 公开 vs 私密
|
||||
|
||||
B站收藏夹支持两种隐私状态:
|
||||
|
||||
| 状态 | 说明 | 谁能查看 |
|
||||
|------|------|----------|
|
||||
| **公开** | 用户主动设置为公开 | 任何人(包括未登录用户)|
|
||||
| **私密** | 默认状态 | 仅用户本人 |
|
||||
|
||||
### 1.2 设置方式
|
||||
|
||||
用户需要在两个地方设置才能完全公开:
|
||||
1. **电脑端**: 收藏夹管理 → 编辑 → 设置公开
|
||||
2. **手机端**: 设置 → 安全隐私 → 空间隐私设置 → 公开显示我的收藏
|
||||
|
||||
> ⚠️ **关键发现**: 很多用户不知道需要同时设置两端,导致"设置了公开但别人看不到"
|
||||
|
||||
### 1.3 对用户的影响
|
||||
|
||||
- **默认情况**: 所有收藏夹都是**私密的**
|
||||
- **大多数用户**: 不会主动设置为公开
|
||||
- **实际可用性**: 获取他人收藏夹内容非常有限
|
||||
|
||||
---
|
||||
|
||||
## 2. 收藏夹 API 详情
|
||||
|
||||
### 2.1 API 端点汇总
|
||||
|
||||
#### 获取用户创建的所有收藏夹列表
|
||||
```
|
||||
GET https://api.bilibili.com/x/v3/fav/folder/created/list-all
|
||||
```
|
||||
|
||||
**参数**:
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| up_mid | num | 是 | 目标用户mid |
|
||||
| type | num | 否 | 0=全部, 2=视频稿件 |
|
||||
| rid | num | 否 | 目标内容id(查询某视频在哪些收藏夹)|
|
||||
|
||||
**认证**: Cookie (SESSDATA) 或 APP
|
||||
|
||||
**注**: 查询私密收藏夹时需要相应用户登录
|
||||
|
||||
#### 获取收藏夹元数据
|
||||
```
|
||||
GET https://api.bilibili.com/x/v3/fav/folder/info
|
||||
```
|
||||
|
||||
**参数**:
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| media_id | num | 是 | 收藏夹完整id(fid + mid后2位)|
|
||||
|
||||
**返回关键字段**:
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"data": {
|
||||
"id": 1052622027, // 收藏夹完整id
|
||||
"fid": 10526220, // 收藏夹原始id
|
||||
"mid": 509372, // 创建者mid
|
||||
"title": "收藏夹标题",
|
||||
"cover": "封面URL",
|
||||
"media_count": 100, // 内容数量
|
||||
"state": 0, // 状态(0=正常)
|
||||
"fav_state": 0, // 是否已收藏(需登录)
|
||||
"cnt_info": {
|
||||
"collect": 50, // 被收藏数
|
||||
"play": 10000, // 播放量
|
||||
"thumb_up": 100 // 点赞数
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 获取收藏夹内容列表
|
||||
```
|
||||
GET https://api.bilibili.com/x/v3/fav/resource/list
|
||||
```
|
||||
|
||||
**参数**:
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| media_id | num | 是 | 收藏夹完整id |
|
||||
| pn | num | 否 | 页码,默认1 |
|
||||
| ps | num | 否 | 每页数量,默认20 |
|
||||
| keyword | str | 否 | 搜索关键词 |
|
||||
| order | str | 否 | 排序:mtime=收藏时间,view=播放量 |
|
||||
| type | num | 否 | 0=全部,2=视频 |
|
||||
| platform | str | 否 | web |
|
||||
|
||||
**认证**: Cookie (SESSDATA)
|
||||
|
||||
**返回字段**:
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"data": {
|
||||
"info": { /* 收藏夹信息 */ },
|
||||
"medias": [
|
||||
{
|
||||
"id": 583785685, // 视频avid
|
||||
"type": 2, // 2=视频稿件
|
||||
"title": "视频标题",
|
||||
"cover": "封面URL",
|
||||
"intro": "简介",
|
||||
"page": 1, // 分P数
|
||||
"duration": 600, // 时长(秒)
|
||||
"upper": {
|
||||
"mid": 123456,
|
||||
"name": "UP主昵称"
|
||||
},
|
||||
"cnt_info": {
|
||||
"play": 10000,
|
||||
"danmaku": 500,
|
||||
"collect": 100
|
||||
},
|
||||
"bv_id": "BV1xx411c7mD",
|
||||
"bvid": "BV1xx411c7mD",
|
||||
"pubtime": 1609459200, // 发布时间
|
||||
"fav_time": 1609545600 // 收藏时间
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 批量获取内容信息
|
||||
```
|
||||
GET https://api.bilibili.com/x/v3/fav/resource/infos
|
||||
```
|
||||
|
||||
**参数**:
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| resources | str | 是 | 格式:`{id}:{type},{id}:{type}` |
|
||||
| platform | str | 否 | web |
|
||||
|
||||
**resources格式**:
|
||||
- `{内容id}:{内容类型}`
|
||||
- 类型: 2=视频稿件, 12=音频, 21=视频合集
|
||||
- 多个用逗号分隔
|
||||
|
||||
**示例**: `583785685:2,523:21,15664:12`
|
||||
|
||||
### 2.2 错误码说明
|
||||
|
||||
| code | 含义 | 说明 |
|
||||
|------|------|------|
|
||||
| 0 | 成功 | 正常返回 |
|
||||
| -400 | 请求错误 | 参数缺失或格式错误 |
|
||||
| -403 | 访问权限不足 | 收藏夹为私密,或Cookie无效 |
|
||||
| -404 | 不存在 | 收藏夹id不存在 |
|
||||
| -101 | 账号未登录 | SESSDATA失效或缺失 |
|
||||
| 11201 | 收藏夹不可见 | 私密收藏夹,无权限访问 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 获取收藏夹的可行性分析
|
||||
|
||||
### 3.1 获取他人收藏夹
|
||||
|
||||
**可行性**: ⚠️ **很低**
|
||||
|
||||
**原因**:
|
||||
1. 默认私密,大多数用户不会公开
|
||||
2. 即使公开,也需要用户主动在两处设置
|
||||
3. 公开收藏夹通常只展示精选内容
|
||||
|
||||
**适用场景**:
|
||||
- 分析特定UP主的公开收藏(如教程合集)
|
||||
- 获取用户自己公开的收藏夹(需用户授权后)
|
||||
|
||||
### 3.2 获取自己的收藏夹
|
||||
|
||||
**可行性**: ✅ **高**
|
||||
|
||||
**前提条件**:
|
||||
1. 获取完整的 Cookie (SESSDATA)
|
||||
2. Cookie 未过期
|
||||
3. 账号状态正常
|
||||
|
||||
**bili-auth 方案的限制**:
|
||||
- bili-auth 返回 OAuth token,但**不直接提供 SESSDATA**
|
||||
- 部分 API 需要完整的 Cookie,不仅仅是 access_token
|
||||
- 可能需要额外步骤将 OAuth 凭证转换为可用 Cookie
|
||||
|
||||
### 3.3 技术路径对比
|
||||
|
||||
| 方案 | 可行性 | 复杂度 | 风险 |
|
||||
|------|--------|--------|------|
|
||||
| **OAuth + 公开收藏夹** | 🟡 低 | 低 | 低 |
|
||||
| **OAuth + Cookie提取** | ✅ 中 | 高 | 中 |
|
||||
| **手动Cookie输入** | ✅ 高 | 低 | 高(用户体验差)|
|
||||
|
||||
---
|
||||
|
||||
## 4. 对 OpenClaw 技能的影响
|
||||
|
||||
### 4.1 功能调整建议
|
||||
|
||||
**原规划**(包含收藏夹):
|
||||
- 获取关注列表 ✅
|
||||
- 监控UP主动态 ✅
|
||||
- 视频搜索 ✅
|
||||
- 收藏夹同步 ❌(受限)
|
||||
|
||||
**建议调整为**:
|
||||
|
||||
| 功能 | 优先级 | 说明 |
|
||||
|------|--------|------|
|
||||
| **我的收藏夹** | P1 → P2 | 需完整Cookie,实现复杂 |
|
||||
| **UP主公开收藏** | P2 | 仅展示UP主主动公开的内容 |
|
||||
| **收藏夹元数据** | P2 | 可获取标题、数量等基本信息 |
|
||||
|
||||
### 4.2 用户交互设计
|
||||
|
||||
**如果实现"我的收藏夹"功能**:
|
||||
|
||||
1. **授权时明确提示**:
|
||||
> "获取收藏夹需要完整登录态,可能存在账号风险,建议使用小号"
|
||||
|
||||
2. **降级方案**:
|
||||
- 如果无法获取收藏夹 → 提示用户手动输入Cookie
|
||||
- 或仅展示公开收藏夹内容
|
||||
|
||||
3. **功能限制**:
|
||||
- 仅读取,不提供"添加到收藏夹"功能
|
||||
- 仅展示前N个收藏夹,避免频繁调用
|
||||
|
||||
### 4.3 技术实现建议
|
||||
|
||||
**如果决定支持收藏夹**:
|
||||
|
||||
```python
|
||||
# 伪代码示例
|
||||
async def get_fav_list(uid, cookie):
|
||||
"""获取用户收藏夹列表"""
|
||||
url = "https://api.bilibili.com/x/v3/fav/folder/created/list-all"
|
||||
params = {"up_mid": uid}
|
||||
headers = {"Cookie": cookie}
|
||||
|
||||
resp = await fetch(url, params, headers)
|
||||
if resp.code == -403:
|
||||
return {"error": "收藏夹为私密或Cookie无效"}
|
||||
return resp.data
|
||||
|
||||
async def get_fav_content(media_id, cookie, pn=1):
|
||||
"""获取收藏夹内容"""
|
||||
url = "https://api.bilibili.com/x/v3/fav/resource/list"
|
||||
params = {
|
||||
"media_id": media_id,
|
||||
"pn": pn,
|
||||
"ps": 20,
|
||||
"platform": "web"
|
||||
}
|
||||
headers = {"Cookie": cookie}
|
||||
|
||||
resp = await fetch(url, params, headers)
|
||||
return resp.data
|
||||
```
|
||||
|
||||
**关键注意点**:
|
||||
- 缓存收藏夹列表(1小时)
|
||||
- 分页获取内容,避免单次请求过大
|
||||
- 错误处理:-403时友好提示用户
|
||||
|
||||
---
|
||||
|
||||
## 5. 结论与建议
|
||||
|
||||
### 5.1 关于收藏夹功能的结论
|
||||
|
||||
| 方面 | 评估 |
|
||||
|------|------|
|
||||
| **技术可行性** | ✅ 可实现,但需完整Cookie |
|
||||
| **用户可用性** | 🟡 中(需用户理解和授权)|
|
||||
| **数据完整性** | ⚠️ 受限(大部分为私密)|
|
||||
| **风险等级** | 🟡 中(需处理Cookie)|
|
||||
|
||||
### 5.2 MVP 功能建议
|
||||
|
||||
**Phase 1**: 不包含收藏夹功能
|
||||
- 聚焦:关注列表 + UP主动态 + 视频搜索
|
||||
- 更简单,风险更低
|
||||
|
||||
**Phase 2**: 可选添加收藏夹(如果用户需求强烈)
|
||||
- 实现"我的收藏夹"(需完整Cookie)
|
||||
- 明确提示风险
|
||||
- 提供降级方案
|
||||
|
||||
### 5.3 如果用户询问"为什么看不到收藏夹"
|
||||
|
||||
标准回答:
|
||||
> B站收藏夹默认是私密的,大部分用户不会主动公开。如果需要获取您的收藏夹,需要:
|
||||
> 1. 在B站设置中将其设为公开
|
||||
> 2. 或者提供完整登录Cookie(存在风险,建议使用小号)
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### API 快速参考
|
||||
|
||||
```bash
|
||||
# 获取用户收藏夹列表
|
||||
curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
|
||||
--data-urlencode 'up_mid=509372' \
|
||||
-b 'SESSDATA=xxx'
|
||||
|
||||
# 获取收藏夹内容
|
||||
curl -G 'https://api.bilibili.com/x/v3/fav/resource/list' \
|
||||
--data-urlencode 'media_id=1052622027' \
|
||||
--data-urlencode 'pn=1' \
|
||||
--data-urlencode 'ps=20' \
|
||||
-b 'SESSDATA=xxx'
|
||||
```
|
||||
|
||||
### 相关文档
|
||||
- 主调研报告: [bilibili-plugin-feasibility.md](./bilibili-plugin-feasibility.md)
|
||||
- 数据API调研: [phase-2-data-api.md](./research-notes/phase-2-data-api.md)
|
||||
|
||||
---
|
||||
|
||||
*本文档为 B站插件调研的补充材料*
|
||||
Reference in New Issue
Block a user