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:
OpenClaw Agent
2026-02-06 19:14:24 +08:00
parent f26d4d8f7f
commit 7e0acef4f9
118 changed files with 12293 additions and 0 deletions
+240
View File
@@ -0,0 +1,240 @@
# B站插件调研 - 最终可行性报告
**报告日期**: 2026-02-06
**调研人**: 阿里巴巴助手
**项目**: B站 OpenClaw 技能开发调研
---
## 执行摘要 (Executive Summary)
### 结论: ✅ **Go - 项目可行**
建议采用 **bili-auth 第三方OAuth方案** 开发 B站 OpenClaw 技能,实现关注列表管理和UP主动态监控功能。
### 核心判断依据
| 维度 | 评估 | 说明 |
|------|------|------|
| **技术可行性** | ✅ 高 | bili-auth 授权 + 公开API可满足MVP需求 |
| **风险可控性** | 🟡 中 | 小号策略可将风险降至可接受水平 |
| **用户价值** | ✅ 高 | 解决官方不开放个人API的痛点 |
| **维护成本** | 🟡 中 | 需关注B站API变动,但有社区支持 |
---
## 1. 背景与目标
### 1.1 项目背景
- B站官方开放平台**暂不开放个人开发者申请**(仅接受企业/机构)
- 个人用户无法通过官方渠道获取API权限
- 存在第三方解决方案(bili-auth)可绕过此限制
### 1.2 项目目标
开发 OpenClaw 技能,实现:
- ✅ 获取用户B站关注列表
- ✅ 监控UP主最新视频更新
- ✅ 搜索B站视频
- ✅ 查看视频详情和热门榜单
---
## 2. 技术方案
### 2.1 推荐方案: bili-auth + 公开API
**架构设计**
```
用户 → OpenClaw 技能
↓
[授权模块] → bili-auth 服务 → B站私信鉴权 → access_token
↓
[数据模块] → B站公开API (带Cookie/Token)
↓
返回关注列表/视频数据/动态更新
```
**技术栈**
- 授权: bili-auth (Python/Flask, OAuth 2.0)
- API调用: REST API + Cookie/Token
- 数据存储: 本地SQLite/JSON (用户授权信息)
### 2.2 方案对比
| 方案 | 可行性 | 成本 | 风险 | 推荐度 |
|------|--------|------|------|--------|
| **bili-auth** | ✅ 高 | 低 | 中 | ⭐⭐⭐⭐⭐ |
| 官方API | ❌ 不可行 | 高 | 低 | - |
| Cookie手动 | ✅ 中 | 低 | 高 | ⭐⭐ |
---
## 3. 功能规格 (MVP)
### 3.1 功能列表
| 功能 | 优先级 | 技术方案 | 数据范围 |
|------|--------|----------|----------|
| **用户授权** | P0 | bili-auth OAuth | 获取登录态 |
| **关注列表** | P0 | `/x/relation/followings` | 全部关注UP主 |
| **UP主动态** | P0 | `/x/polymer/web-dynamic/v1/feed/space` | 最新视频/动态 |
| **视频搜索** | P1 | `/x/web-interface/search/type` | 关键词搜索 |
| **热门榜单** | P1 | `/x/web-interface/popular` | 全站热门 |
| **视频详情** | P1 | `/x/web-interface/view` | 播放量/互动数据 |
### 3.2 非功能需求
| 需求 | 指标 |
|------|------|
| **响应时间** | API调用 < 3秒 |
| **可用性** | 服务可用时间 > 95% |
| **频率限制** | 单账号 < 200次/分钟 |
| **数据缓存** | 视频详情 1h,动态 5min |
---
## 4. 风险评估与缓解
### 4.1 账号封禁风险
| 等级 | 描述 | 概率 | 影响 |
|------|------|------|------|
| 🟡 中 | 机器人账号被封 | 中 | 用户需重新授权 |
**缓解措施**
- ✅ 使用小号作为机器人(非主号)
- ✅ 频率控制(< 200次/分钟)
- ✅ 添加随机延迟(100-500ms)
- ✅ 异常时自动降速
### 4.2 API变动风险
| 等级 | 描述 | 概率 | 影响 |
|------|------|------|------|
| 🟡 中 | B站调整API接口 | 中 | 需更新技能代码 |
**缓解措施**
- ✅ 封装API调用层,便于统一修改
- ✅ 监控社区动态(bili-auth项目)
- ✅ 设计优雅降级(接口失效时友好提示)
### 4.3 合规风险
| 等级 | 描述 | 概率 | 影响 |
|------|------|------|------|
| 🟢 低 | 违反B站服务条款 | 低 | 技能下架 |
**缓解措施**
- ✅ 明确免责声明(非官方,用户自担风险)
- ✅ 仅读取公开数据,不修改用户数据
- ✅ 不爬取隐私数据(私信、手机号等)
---
## 5. 实施计划
### 5.1 开发里程碑
| 阶段 | 时间 | 交付物 |
|------|------|--------|
| **Week 1** | 原型开发 | bili-auth集成 + 1个核心API |
| **Week 2** | MVP完成 | 全部P0功能 + 基础测试 |
| **Week 3** | 优化迭代 | P1功能 + 错误处理 + 文档 |
| **Week 4** | 发布准备 | 完整测试 + 发布到ClawHub |
### 5.2 技术任务分解
```
├── 授权模块
│ ├── bili-auth服务部署
│ ├── OAuth流程集成
│ └── Token刷新机制
├── 数据模块
│ ├── 关注列表获取
│ ├── UP主动态监控
│ ├── 视频搜索
│ └── 缓存实现
├── 交互模块
│ ├── 自然语言指令
│ ├── 列表展示
│ └── 更新提醒
└── 基础设施
├── 错误处理
├── 日志记录
└── 频率限制
```
---
## 6. 资源需求
### 6.1 开发资源
| 资源 | 需求 | 说明 |
|------|------|------|
| **人力** | 1人 | 开发者(可借助AI辅助)|
| **时间** | 2-3周 | 兼职开发 |
| **服务器** | 可选 | bili-auth可本地/Docker部署 |
### 6.2 外部依赖
| 依赖 | 风险 | 备用方案 |
|------|------|----------|
| bili-auth项目 | 中 | 可fork维护 |
| B站公开API | 中 | 接口变动时适配 |
---
## 7. 成功标准
### 7.1 功能标准
- [ ] 用户可通过私信完成授权
- [ ] 成功获取关注列表(>50个UP主)
- [ ] 成功监控UP主更新(检测新视频)
- [ ] 支持视频搜索并返回结果
### 7.2 性能标准
- [ ] API响应时间 < 3秒(95分位)
- [ ] 单账号日调用 < 10000次
- [ ] 无412风控错误(正常使用时)
---
## 8. 建议与下一步行动
### 8.1 立即行动
1. ✅ ** fork bili-auth 项目** — 防止原项目变动
2. ✅ **创建技能脚手架** — SKILL.md + 项目结构
3. ✅ **本地部署bili-auth** — 验证授权流程
### 8.2 设计决策
1. **授权方式**: 使用 bili-auth 标准OAuth
2. **数据存储**: 本地SQLite存储授权信息
3. **更新策略**: 轮询检查(5-10分钟间隔)
4. **错误处理**: 412错误自动降速+重试
### 8.3 长期规划
- Phase 2: 添加更多数据源(评论、弹幕)
- Phase 3: 智能推荐(基于观看历史)
- Phase 4: 关注官方开放平台动态,适时迁移
---
## 附录
### 附录A: 参考资料
- bili-auth GitHub: https://github.com/icyux/bili-auth
- B站开放平台: https://open.bilibili.com
- 调研笔记: `docs/research-notes/`
### 附录B: 相关文档
- Phase 1.1: [官方平台调研](docs/research-notes/phase-1.1-official-platform.md)
- Phase 1.2: [bili-auth调研](docs/research-notes/phase-1.2-bili-auth.md)
- Phase 1.3: [方案对比](docs/research-notes/phase-1.3-auth-comparison.md)
- Phase 2: [数据API调研](docs/research-notes/phase-2-data-api.md)
---
**报告结束**
*本文档由 OpenClaw 自动生成,基于 2026-02-06 的调研结果*
@@ -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 实现原理)
+128
View File
@@ -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 - 原型开发** 的准备工作。
+218
View File
@@ -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站插件调研的补充材料*