bilibili-portfolio-search · git:20260625.7e97abb · 2026-06-25 · sha256 b97d4beb3783e1d3
bilibili-portfolio-search git:20260625.7e97abbA
Immutable. This exact content is served forever at /api/v1/blob/b97d4beb3783e1d3.
---
name: B站搜账号下作品集
description: B站账号作品列表实时查询工具。根据B站UP主的UID实时调用 Redfox 接口获取该UP主发布的视频作品列表,支持游标翻页浏览更多作品。返回实时数据(非缓存/历史数据)。当用户想查看某个B站UP主的作品列表、B站账号视频、UP主投稿列表时使用。触发词:B站作品列表、B站UP主作品、B站账号视频、B站投稿列表、bilibili作品、B站UP主投稿、B站搜账号下作品集。
---
# B站搜账号下作品集
## 📝 简介
B站账号作品列表实时查询工具,根据B站UP主的UID实时调用 Redfox 接口获取该UP主发布的视频作品列表,返回实时数据(非缓存/历史数据)。支持游标翻页浏览更多作品。
## ✨ 功能特性
| 功能模块 | 能力描述 | 核心价值 |
|---------|---------|---------|
| 实时查询 | 输入UID实时获取UP主作品列表 | 获取非缓存的实时数据 |
| 游标翻页 | 支持cursor游标逐页浏览 | 深入浏览UP主更多作品 |
| 数据排序 | 返回结果按播放量降序排列 | 快速定位爆款作品 |
## 🔑 鉴权
### 获取 API Key
请前往 [红狐hub](https://redfox.hk/settings/api-keys?source=github) 获取 API KEY
### 配置 API Key
方案1: 以 Qoder 为例,将 REDFOX_API_KEY 添加到 `~/.openclaw/openclaw.json` 中:
```bash
{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }
```
方案2: 终端配置
```bash
export REDFOX_API_KEY="ak_xxxx..."
```
## 🔄 工作流程
### Step 1:理解用户意图,提取UID
**1. 提取B站UID**
- 从用户描述中提取B站UP主的UID(纯数字,如 `946974`)
- 若用户提供了UP主昵称而非UID,告知用户:「B站作品列表查询需要UID(纯数字),请在B站UP主主页URL中找到UID后告诉我,例如 bilibili.com/space/946974 中的 946974」
- 不得在用户未提供UID时擅自猜测并调用脚本
**2. 识别翻页参数**(用户未指定时使用默认值)
- **游标**(`--cursor`):默认不传(第一页)
- 用户提到"下一页"、"更多" → 传上次返回的 cursor 值
- 首次查询 → 不传 cursor
### Step 2:调用作品列表查询脚本
```bash
python ".qoder/skills/B站搜账号下作品集/scripts/fetch_bili_user_works.py" "<UID>" [--cursor 翻页游标]
```
**参数说明:**
| 参数 | 可选值 | 含义 |
| ---------- | ---------- | --------------------------------------- |
| uid | 纯数字字符串 | B站UP主的UID |
| `--cursor` | 游标字符串 | 翻页参数,第一页不传,传上次返回的cursor值 |
脚本以 JSON 格式输出:
| 字段 | 说明 |
| ------------- | ----------------------------- |
| `user_info` | UP主基础信息(昵称、UID等) |
| `works` | 作品列表(按播放量降序) |
| `cursor` | 下一页游标(空字符串表示无下一页) |
| `has_next` | 是否有下一页(true/false) |
| `total_count` | 本页作品数量 |
| `total_work_count` | UP主总作品数 |
每条作品字段:
| 字段 | 说明 |
| ----------------- | --------------------------- |
| `title` | 视频标题 |
| `author` | UP主昵称 |
| `danmaku_count` | 弹幕数 |
| `comment_count` | 评论数 |
| `collect_count` | 收藏数 |
| `play_count` | 播放量 |
| `work_url` | 视频链接(直接可用) |
| `publish_time` | 发布时间(格式化) |
| `cover_url` | 封面图(https协议) |
| `bv_id` | BV号 |
| `tags` | 视频标签(逗号分隔) |
| `category` | 视频分区名称 |
| `duration` | 视频时长 |
### Step 3:判断结果并展示
#### 情况 A:works 数量 > 0(有作品数据)
**A1. 展示UP主信息 + 告知查询结果**
> 📊 UP主「**昵称**」(UID: XXX)共有 **total_work_count** 部作品,当前展示 **N 条**(API返回N条),以下是详细数据:
**A2. 渲染 Markdown 表格(⚠️ 必须逐条全部展示,严禁截断)**
```markdown
| # | 视频标题 | 播放量 | 弹幕数 | 时长 | 发布时间 |
| --- | -------------------- | ------- | ------ | -------- | ---------- |
| 1 | [标题文字](视频链接) | 105.2w | 1.2w | 15:21:04 | 2026-06-20 |
```
**⚠️ 序号连续规则:**
- 第1页序号从1开始,第2页从21开始,第N页从 `(N-1)*20+1` 开始
- 在上下文中记录当前页码,翻页时自动递增
**⚠️ 展示纪律(强制执行):**
- 每页必须完整渲染 `works` 数组中的全部条目,严禁因篇幅原因截断或省略
- 标准页满20条,最后一页可不足20条,但有多少展示多少
- 表格行数必须与 `total_count` 字段一致,若不一致视为执行错误
**数字格式化规则:**
- `< 10000`:原始数字(如 `320`)
- `≥ 10000`:`x.xw` 格式(如 `1.2w`)
**标题规则:** `[标题](work_url)`;超过 30 字截断并加 `...`
**A3. 翻页提示(紧接在表格之后,每次必须输出)**
- 若 `has_next` 为 true:
> 📄 还有更多作品。回复「下一页」继续查看。
- 若 `has_next` 为 false:
> 📄 已展示全部作品,无更多数据。
**⚠️ A1~A3 缺一不可,必须在同一轮输出中连续完成。若缺少 A3,视为执行错误,必须重新补充输出。**
#### 情况 B:works 数量 = 0(无作品数据)
> 😔 抱歉,未查询到UID「**XXX**」的作品数据。可能原因:1) 该账号暂无公开投稿 2) 账号UID不正确 3) 账号已注销。请核实UID后重试。
### Step 4:记录游标和页码(内部逻辑,不展示给用户)
将本次返回的 `cursor` 值和当前**页码**记录在上下文中。当用户回复「下一页」时,使用该 cursor 值再次调用脚本获取下一页数据,页码 +1。
- 首次查询:页码 = 1
- 每次翻页:页码 +1