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
@@ -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站插件调研的补充材料*