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