Files
cv-cat dc078b248b catbus:一个命令操作小红书、抖音、TikTok、B 站、快手、微博、闲鱼、淘宝、京东、X
10 个平台的 web 端全部用 TypeScript 移植自 cv-cat 的开源项目,请求与上游逐字节对拍。
统一的命令语法与 JSON 输出、按 平台 × 端 × 账号 隔离的登录态、给 AI Agent 用的技能与 llms.txt。
2026-10-06 19:24:55 +08:00

74 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 示例
展示脚本和 AI Agent 怎么组合 catbus:用 `-o jsonl` 接管道、按退出码分支、用 `page.cursor` 续翻、遇到风控停下。每个脚本开头都有完整的用法说明,不带参数运行会打印出来。
| 脚本 | 做什么 | 依赖 |
|---|---|---|
| [search-to-jsonl.sh](search-to-jsonl.sh) | 跨平台搜索同一个关键词,每个平台取 N 条,合并成一个 jsonl(每行加上 `platform` 字段)。默认搜索「`item search` 已实现、并且本机登录过」的平台;某个平台失败时跳过,平台之间 sleep | bash、jq |
| [comments-export.sh](comments-export.sh) | 导出一条内容的全部评论到 jsonl。分批翻页,批与批之间把游标存到 `<输出文件>.cursor`;遇到 `RISK_CONTROL` / `NETWORK` 停下,再运行就从断点继续。`REPLIES=1` 时顺带导出评论的回复 | bash、jq |
| [user-items-backup.sh](user-items-backup.sh) | 备份一个用户发布的全部内容:`user items --all` 的元数据写成 `items.jsonl`,再逐条 `item download --dir` 下载媒体。已下载的记在 `downloaded.txt`,中断后续跑;平台还不支持下载时只备份元数据 | bash、jq |
| [live-to-file.sh](live-to-file.sh) | 把直播间的弹幕、礼物、进场等事件 `live listen --duration` 一段时间写到文件;Ctrl-C 也能正常收尾,结束时按事件类型和礼物统计 | bash(jq 可选,用于统计) |
| [node-api.mjs](node-api.mjs) | 用 Node 的 `child_process` 调 catbus 的最小封装:解析信封,按退出码把错误分成 auth / usage / risk_control / network 等,带长连接的异步迭代器和风控重试。可以直接运行,也可以 `import` 到自己的代码里 | Node |
## 运行前
1. 装好 catbus 并登录要用的平台,见 [快速上手](../guide/quick-start.md) 和 [登录指南](../guide/login.md):
```bash
catbus bilibili auth login
catbus auth list # 看看本机登录了哪些平台
```
2. 还没 `npm link` 时,用环境变量 `CATBUS` 指定命令,所有示例都认它:
```bash
export CATBUS="node /path/to/catbus/dist/cli/main.js"
```
3. 脚本需要 `jq`(macOS:`brew install jq`;Debian / Ubuntu:`apt install jq`)。脚本在 macOS 自带的 bash 3.2 上也能跑。
## 例子
```bash
# 在已登录的平台上搜「露营」,每个平台 30 条
docs/examples/search-to-jsonl.sh 露营 30 camping.jsonl
jq -r '[.platform, .title, .url] | @tsv' camping.jsonl
# 导出一条 B 站稿件的全部评论;被风控拦下后过几分钟再运行同一条命令
docs/examples/comments-export.sh bilibili BV1xx411c7mD
# 备份自己在抖音发布的作品(元数据 + 媒体)
docs/examples/user-items-backup.sh douyin me ./douyin-backup
# 录 30 分钟 B 站直播弹幕
docs/examples/live-to-file.sh bilibili <room_id> 30m
# 在 Node 里调用
node docs/examples/node-api.mjs bilibili item search 猫 --limit 5
```
```js
import { catbus, catbusStream, catbusWithRetry, CatbusError } from './node-api.mjs'
try {
const { data: items, page } = await catbusWithRetry(['xhs', 'item', 'search', '露营', '--limit', '20'])
console.log(items.map((i) => i.title), page)
} catch (err) {
if (err instanceof CatbusError && err.kind === 'auth') console.error('先登录:', err.hint)
else throw err
}
for await (const event of catbusStream(['bilibili', 'live', 'listen', '<room_id>', '--duration', '5m'])) {
if (event.type === 'chat') console.log(event.user?.name, event.text)
}
```
## 写自己的脚本时
- **只解析 stdout**:`-o json`(默认)时 stdout 恰好是一个信封;`-o jsonl` 时 stdout 每行一条 `data`,结束时的摘要信封(`page`、`error`)写在 **stderr** 的最后一行。帮助是 stdout 上唯一不是 JSON 的输出。
- **按退出码分支**:`3` 登录(`error.hint` 就是登录命令)、`5` 风控(放慢、过一会儿再试)、`6` 网络、`4` 规划中、`2` 参数或平台不支持。完整的表见 [AGENTS.md 6.4](../../AGENTS.md#64-退出码)。
- **续翻用 `page.cursor`**:游标是不透明字符串,可能以 `-` 开头,传的时候写成 `--cursor=<值>`。一次 `--all` 中途失败时拿不到游标,所以长任务按批调用、批与批之间保存游标(见 `comments-export.sh`)。
- **放慢节奏**:翻页时 catbus 会在页与页之间自动等待;多条命令之间脚本自己 sleep。小红书的评论、快手的作品详情、京东的商品详情请求太密会被风控。
- **危险操作**(删除、撤回、B 站投币 / 三连、直播送礼)在非交互环境里必须加 `-y`,否则报 `CONFIRM_REQUIRED`。
- 不要把 cookie 写进脚本或提交到仓库:登录态只在 `~/.catbus/`,脚本里用 `-a <账号名>` 选择账号即可。