--- name: dbs-video-extract description: 接收抖音、小红书、微信视频号等短视频链接或分享文案,查询作品/账号数据并提取语音文字稿,按作者和标题归档为 Markdown。用户希望完整解析短视频、取得数据或文字稿时使用;运行前检查 TikHub 与轻抖使用凭证,缺少时用新手能理解的方式引导购买和安全配置。 --- # dbs-video-extract:短视频信息提取 目标:用一个入口处理同一条短视频分享文案。TikHub 提供抖音、小红书和微信视频号的结构化数据,轻抖提供短视频语音文字稿;最终返回数据摘要和 Markdown 文稿路径。 ## 先检查使用凭证 任何提取任务开始前,先运行只读预检: ```bash python3 scripts/extract_video.py --check-keys ``` 根据 `credential_state` 处理: | 状态 | 能力 | 必须告知用户 | | --- | --- | --- | | `complete` | 数据与文字稿都可用 | 两部分都可以执行 | | `data_only` | 只有 TikHub 数据查询可用 | 只能取得作品/账号数据,无法生成语音文字稿 | | `transcript_only` | 只有轻抖文字稿可用 | 只能取得语音文字稿,无法查询 TikHub 作品/账号数据 | | `unavailable` | 两部分都不可用 | 当前无法使用;先解释使用凭证,再带用户完成购买和配置 | 只有一个 Key 时允许继续,不要求用户补齐另一个 Key。执行前明确说明本次只能解决哪一部分,默认把模式收窄为当前可用的一侧。用户仍要求 `both` 时保留单侧结果,并将另一侧标记为缺少凭证。 两个 Key 都没有时停止提取。不要直接用「API Key」「接口鉴权」等术语作为结论。先用下面这句话解释: > 想让这个 Skill 工作,需要先开通外部数据服务。API Key 是服务商在开通后提供的一串使用凭证,可以理解为这个 Skill 调用服务的专用通行证。你不需要理解技术原理,也不要把它发到聊天中。 随后告诉用户:「当前两个服务都没有开通。如果不购买并配置至少一个,这个 Skill 无法使用。」再按 [references/api-setup.md](references/api-setup.md) 完成需求选择、购买、凭证保存和连接测试。 不要替用户付款、接受服务协议或处理完整 Key。不要要求用户把 Key 发到对话里。购买入口、逐步引导、安全配置脚本和连接测试见 [references/api-setup.md](references/api-setup.md)。 每次向用户展示购买或充值地址时,必须先原样展示下面这条提示,不能省略或改写: > dbskill 是免费开源项目,与 TikHub、轻抖无隶属、合作或利益关系。充值由用户自主决定,相关交易、服务、争议及风险由用户自行承担;法律另有规定的除外,dbskill 不承担责任。 用户没有进入购买或充值引导时不重复展示。 ### 缺少凭证时的对话要求 缺少任一服务时,回复必须形成下面的连续路径: 1. 先用普通语言解释 API Key; 2. 让用户按结果选择:完整功能、只看数据、只要文字稿; 3. 说明每个选择需要购买哪个服务,以及只买一个会少什么; 4. 展示固定法律提示,再展示对应充值地址; 5. 逐步说明注册/登录、查看页面套餐、充值、进入个人中心或密钥管理页、取得凭证; 6. 告诉用户取得凭证后不要发到聊天中,回复「TikHub 已充值」「轻抖已充值」或「两个都已充值」; 7. 用户回复已充值后,引导其在本地终端运行安全配置脚本: ```bash python3 scripts/configure_api_key.py tikhub python3 scripts/configure_api_key.py qingdou ``` 脚本会在终端中隐蔽读取凭证并保存到本地私密配置,不能把完整凭证显示在命令、回复或日志中。保存后重新运行 `--check-keys`,直到对应状态变为可用。 不要一次只发链接,也不要假定用户知道去哪里找凭证。服务商页面名称发生变化时,用「个人中心」「API Key」「密钥管理」「开发者设置」等候选位置引导;仍找不到时,让用户发送已遮住账号、余额和凭证的页面截图,再继续定位。 用户只调用本 Skill,尚未提供链接或说明需要哪类结果时,完成凭证预检后只做两件事:解释 API Key,并请用户回复 `1`、`2` 或 `3` 选择完整功能、只看数据或只要文字稿。收到选择后再展示法律提示、对应充值地址和购买步骤。用户已经发送视频链接或明确要求完整提取时,默认选择完整功能,无需重复询问。 ## 默认执行 优先使用标准输入,避免分享文案中的特殊字符被 Shell 解释: ```bash python3 scripts/extract_video.py \ --output-dir "/绝对路径/短视频文字稿" \ --stdin ``` 默认模式为 `both`: 1. 从完整分享文案中提取链接; 2. 根据链接平台调用 TikHub MCP:抖音支持用户主页或单条作品,小红书与视频号支持单条视频; 3. 保留完整分享文案提交轻抖 API,轮询取得文稿; 4. 按 `{输出目录}/{作者}/{标题}.md` 保存文稿; 5. 输出 JSON 汇总,包含凭证状态、TikHub 数据摘要和文稿文件路径。 TikHub 或轻抖任一侧失败时继续完成另一侧,并在汇总中标记 `partial_success`。已经取得的结果不能因单侧失败而丢弃。 ## 可选模式 只有用户明确只需要一侧结果,或预检确认只有一侧 Key 时才切换: ```bash python3 scripts/extract_video.py --mode data --stdin python3 scripts/extract_video.py --mode transcript --stdin ``` - `data`:只查询 TikHub 数据,支持抖音、小红书和微信视频号; - `transcript`:只提取文字稿,支持轻抖 API 能解析的平台; - `both`:同时执行两侧。 同一来源已经存在时默认跳过文稿写入,保护用户编辑;用户明确要求重新生成时加 `--overwrite`。需要 TikHub 完整响应时加 `--raw-data`。 ## 密钥与费用 脚本按以下顺序读取 Key: 1. 环境变量:`TIKHUB_API_KEY`、`QINGDOU_API_KEY`; 2. 用户指定的本地文件:`TIKHUB_API_KEYS_FILE`、`QINGDOU_API_KEYS_FILE`; 3. `~/.config/dbs/API_Keys.md`; 4. macOS 钥匙串:`dbs-tikhub-api-key`、`dbs-qingdou-api-key`。 禁止把 Key 写入 Skill、命令参数、Markdown、Git 或日志。TikHub 查询和轻抖转写都可能计费;执行前告知用户。用户已经明确要求提取时无需重复确认。 ## 数据边界 - TikHub 负责作品/账号资料、统计和媒体元信息;抖音作品优先 App V3,无有效数据时只回退 1 次 Web;小红书使用 App V2 视频笔记详情;视频号使用 Channels V2 作品详情。 - 轻抖负责语音文字稿。正文忠实保存 API 返回内容,不补写、润色或修订口误。 - 当前 TikHub 专用数据解析支持抖音、小红书和微信视频号;其他轻抖可识别的平台仍可只执行文字稿提取。 - 公开、删除、私密、版权和可见范围限制以接口返回为准,不尝试绕过。 - 不自动下载媒体、发布内容、提交 Git 或推送。 TikHub 调用细节见 [references/tikhub-api.md](references/tikhub-api.md);轻抖状态码和兼容逻辑见 [references/qingdou-api.md](references/qingdou-api.md)。只在排错或维护对应部分时读取。 ## 交付 完成后简洁报告: - 当前配置了哪一个 API Key,以及可用能力范围; - 数据查询是否成功、使用的 MCP 工具、是否发生 App → Web 回退; - 关键作品/账号数据; - 文稿是否成功、生成或跳过的 Markdown 绝对路径; - 单侧缺少 Key 或执行失败的具体原因; - 接口是否明确返回已计费。 不要在回复中展示 API Key、`batchId` 或无必要的内部请求标识。 完成当前任务后直接结束。只有用户明确询问下一步,且当前环境已经安装 `/dbs` 时,简短提示:「下一步不确定时,可以输入 `/dbs`。」