fbcc3df2cf
- 新增 shortlink_resolver.py 模块 * 检测 B站短链接(b23.tv)和其他短链接服务 * 提供友好的用户引导信息 * 支持 Playwright 浏览器自动化解析(可选) - 集成到 handler.py * 短链接自动检测和提示 * 智能区分短链接和完整 URL - 更新 add_video.py * 支持短链接解析 * 添加 --playwright 参数启用浏览器解析 - 新增 test_shortlink.py 测试脚本 * 测试单个短链接检测 * 测试多个短链接检测 * 测试混合内容场景 * 所有测试通过 - 更新文档 * SKILL.md: 添加短链接说明 * AUTO_TRIGGER.md: 添加短链接章节 * obsidian-kb-improvements.md: 标记任务2为已完成 功能特点: - 方案A(用户引导):已实现并作为默认行为 - 方案B(浏览器自动化):提供 PlaywrightResolver 类,可选使用 - 方案C(代理池):未实现(复杂度高,收益低) 验收标准达成: ✅ 短链接能够友好处理(显示引导信息) ✅ 用户不会感到困惑 ✅ 支持 b23.tv 和其他短链接服务(检测) ✅ 集成到 handler.py ✅ 测试各种短链接场景
11 KiB
11 KiB
name: obsidian-kb description: Automatically detect and process video/article links from Bilibili, YouTube, and Zhihu. Add content to Obsidian knowledge base inbox, extract metadata and transcripts, generate structured notes with AI analysis. Triggered when user sends URLs matching patterns: bilibili.com/video/BV*, b23.tv/, youtube.com/watch?v=, zhuanlan.zhihu.com/p/*. Commands: /kb-add, /kb-subscribe, /kb-inbox, /kb-process, /kb-skip, /kb-status, /kb-search. version: 1.0.0 author: OpenClaw
SKILL.md - Obsidian KB Skill
元数据
- 名称: obsidian-kb
- 版本: 1.0.0
- 描述: 多源内容知识库维护系统,支持长视频分段分析
- 作者: OpenClaw
自动触发规则
当检测到以下内容时,本技能会自动激活:
触发模式
-
B站视频链接
- 完整URL:
https://www.bilibili.com/video/BV* - 短链接:
https://b23.tv/*(会提示用户提供完整URL或BV号) - BV号:
BV*(直接支持)
- 完整URL:
-
YouTube视频链接
- 完整URL:
https://www.youtube.com/watch?v=* - 短链接:
https://youtu.be/*
- 完整URL:
-
知乎文章链接
- 专栏文章:
https://zhuanlan.zhihu.com/p/* - 回答:
https://www.zhihu.com/question/*/answer/*
- 专栏文章:
自动触发流程
当用户发送匹配上述模式的链接时:
- 检测链接 → 识别内容类型(B站/YouTube/知乎)
- 提取元数据 → 获取标题、作者、时长等信息
- 显示预览 → 向用户展示内容概要
- 询问确认 → "是否添加到收件箱并处理?(y/n)"
- 用户确认后 → 自动执行
/kb-add命令添加内容 - 可选处理 → 根据用户选择,是否立即执行
/kb-process
批量处理
支持一次发送多个链接,系统会:
- 检测所有匹配的模式
- 显示所有识别到的内容预览
- 询问用户是否批量添加
- 显示处理进度
短链接友好提示
检测到短链接时,显示引导信息:
单个短链接:
🔗 检测到短链接
⚠️ 由于反爬虫保护,短链接无法自动解析
📍 短链接: https://b23.tv/xxxxx
📱 手机用户:
1. 点击/打开链接
2. 在浏览器地址栏复制完整 URL
3. 发送给助手
💻 桌面用户:
1. 发送 BV 号(如:BV1jcFqz7EFW)
2. 或使用完整 URL
💡 提示:完整 URL 格式为:https://www.bilibili.com/video/BVxxxxx
多个短链接:
⚠️ 检测到短链接
[1] B站短链接: https://b23.tv/abc123
需要完整URL或BV号
[2] bit.ly: https://bit.ly/test
需要完整URL
💡 建议:
- 在浏览器打开链接后复制完整URL
- 或者直接发送BV号(仅限B站)
技术说明:
- B站短链接(b23.tv)有反爬虫保护,无法直接解析
- 本技能使用
shortlink_resolver.py模块检测短链接 - 提供 Playwright 可选方案(需额外安装)
pip install playwright playwright install chromium
命令列表
| 命令 | 描述 | 用法 |
|---|---|---|
/kb-add |
添加单个视频/文章 | /kb-add <URL> [--process] [--yes] |
/kb-subscribe |
订阅内容源 | /kb-subscribe <platform> <type> <id> |
/kb-inbox |
查看收件箱 | /kb-inbox [--limit N] [--sort score|date] |
/kb-process |
处理内容 | /kb-process [content_id|all] |
/kb-skip |
跳过内容 | /kb-skip <content_id> [--reason "..."] |
/kb-status |
查看状态 | /kb-status |
/kb-search |
搜索知识库 | /kb-search <query> [--in-tags] |
快速开始
方式1: 自动触发(推荐)
直接发送视频链接或文章链接,技能会自动识别并处理:
# B站视频(完整URL)
https://www.bilibili.com/video/BV1xx411c7mD
# B站视频(BV号)
BV1xx411c7mD
# B站短链接(会提示完整URL)
https://b23.tv/xxxxx
# YouTube视频
https://www.youtube.com/watch?v=dQw4w9WgXcQ
# 知乎文章
https://zhuanlan.zhihu.com/p/123456789
方式2: 使用命令
显式调用命令添加内容:
# 添加单个视频
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD"
# 添加并立即处理
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD" --process
# 跳过确认提示
/kb-add BV1xx411c7mD --yes
命令详解
/kb-add
快速添加单个视频到收件箱。
用法:
/kb-add BV1xx411c7mD
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD"
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD" --process
/kb-add BV1xx411c7mD --yes
参数:
<URL>- 视频URL或BV号- 完整URL:
https://www.bilibili.com/video/BVxxxxx - BV号:
BVxxxxx - 短链接:
https://b23.tv/xxxxx(显示友好提示)
- 完整URL:
--process- 添加后立即处理--yes- 跳过确认提示
输出示例:
📥 正在添加视频: BV1xx411c7mD
→ 标题: Python编程入门教程
→ UP主: CodeMaster
→ 时长: 3600秒
→ 获取字幕... ✅
✅ 视频已添加到收件箱!
Content ID: abc123def456
💡 使用以下命令处理:
python3 src/cli.py process abc123def456
或:
python3 src/cli.py process all
/kb-subscribe
订阅一个内容源,支持自动获取更新。
用法:
/kb-subscribe bilibili:fav:12345678
/kb-subscribe bilibili:up:123456
/kb-subscribe youtube:channel:UCxxx
/kb-subscribe zhihu:collection:12345
支持的源:
bilibili:fav:<fav_id>- Bilibili 收藏夹bilibili:up:<mid>- Bilibili UP主youtube:channel:<channel_id>- YouTube 频道zhihu:collection:<collection_id>- 知乎收藏夹
/kb-inbox
显示待处理的内容列表。
用法:
/kb-inbox
/kb-inbox --limit 10
/kb-inbox --status new
输出示例:
📥 收件箱 (5 items)
────────────────────
1. BV1xx411c7mD | Python入门教程 | ⭐ 85 | 📝 一句话摘要...
2. BV2yy522c8nE | React Hooks详解 | ⭐ 92 | 📝 一句话摘要...
/kb-process
处理内容,生成 Obsidian 笔记。
用法:
/kb-process --all # 处理所有待处理项
/kb-process BV1xx411c7mD # 处理指定内容
/kb-process --id BV1xx411c7mD # 同上
处理流程:
- 轻量扫描 → 生成一句话摘要和评分
- 深度分析 → 生成详细内容(长视频会分段)
- 选择模板 → 根据类型和时长
- 生成笔记 → Markdown 格式
- Git 同步 → 提交到 Obsidian
/kb-skip
跳过指定内容,不进行处理。
用法:
/kb-skip BV1xx411c7mD
/kb-status
显示系统状态和统计信息。
用法:
/kb-status
输出示例:
📊 Obsidian KB 状态
────────────────────
收件箱: 12 待处理 / 45 已完成
Git同步: ✅ 已启用 (最后同步: 5分钟前)
订阅源: 3 个活跃
存储: 128MB / 1GB
/kb-search
搜索已处理的内容。
用法:
/kb-search python tutorial
/kb-search "machine learning" --tag ai
配置说明
配置文件位置
优先级:
./config.yaml(当前目录)~/.obsidian-kb/config.yaml~/.config/obsidian-kb/config.yaml
配置项
# AI 配置
ai:
provider: openai # AI 提供商
model: gpt-4 # 模型名称
api_key: sk-... # API Key (建议使用环境变量)
# 存储配置
storage:
inbox_dir: inbox # 收件箱目录
topics_dir: topics # 主题目录
data_dir: data # 数据目录
# Git 同步配置
git:
enabled: true # 启用 Git 同步
vault_path: ~/ObsidianVault # Obsidian 知识库路径
remote: origin # 远程仓库名
branch: main # 分支名
auto_commit: true # 自动提交
commit_message_template: "Update from obsidian-kb: {count} items"
# 分段配置
chunking:
enabled: true # 启用长视频分段
chunk_duration_seconds: 900 # 分段时长 (15分钟)
max_chunk_duration_seconds: 1800 # 最大分段时长
long_video_threshold: 1800 # 长视频阈值 (30分钟)
# 数据源配置
sources:
bilibili:
enabled: true
cookie: '' # Bilibili Cookie (可选)
youtube:
enabled: false
api_key: '' # YouTube API Key
zhihu:
enabled: false
cookie: '' # 知乎 Cookie (可选)
环境变量
可以使用环境变量覆盖配置:
export OPENAI_API_KEY="sk-..."
export AI_MODEL="gpt-4"
export OBSIDIAN_VAULT_PATH="/path/to/vault"
export BILIBILI_COOKIE="..."
模板变量
通用变量
所有模板可用:
{{ title }}- 标题{{ source }}- 来源 (bilibili/youtube/zhihu){{ url }}- 原始 URL{{ author }}- 作者/UP主{{ duration }}- 时长{{ date }}- 日期{{ tags }}- 标签列表{{ one_liner }}- 一句话摘要{{ summary }}- 详细摘要{{ key_points }}- 核心要点列表{{ quality_score }}- 质量评分
教程视频额外变量
仅 tutorial_video.md 可用:
{{ prerequisites }}- 前置知识列表{{ outline }}- 分段大纲列表{{ section.title }}- 分段标题{{ section.time_range }}- 时间段{{ section.summary }}- 分段摘要{{ section.code_snippet }}- 代码片段{{ section.code_language }}- 代码语言
{{ pitfalls }}- 常见坑点列表{{ practice_advice }}- 实践建议列表
输出格式
轻量视频输出
---
title: "视频标题"
source: "bilibili"
url: "https://..."
author: "UP主"
duration: "10:30"
date: "2024-01-01T00:00:00"
tags:
- python
- tutorial
---
#python #tutorial
**一句话摘要**: 这是一句摘要
## 摘要
详细摘要内容...
## 核心要点
1. 要点一
2. 要点二
教程视频输出
---
title: "Python 完整教程"
source: "bilibili"
url: "https://..."
up主: "CodeMaster"
duration: "2:30:00"
quality_score: 95
---
## 🎯 一句话总结
...
## 📚 前置知识
- 基础编程概念
- Python 环境搭建
## 📝 步骤详解
### 环境配置 [00:00-15:00]
如何配置 Python 开发环境
```bash
pip install python
基础语法 [15:00-45:00]
...
💡 关键要点
- 要点一
- 要点二
⚠️ 常见坑点
- Python 2 与 3 的区别
- 缩进问题
🤔 实践建议
- 跟随视频动手编码
- 完成课后练习
## 故障排除
### 无法获取字幕
1. 检查 Bilibili Cookie 是否正确设置
2. 确认视频有字幕/CC字幕
3. 检查网络连接
### Git 同步失败
1. 确认 vault_path 指向正确的 Git 仓库
2. 检查 Git 配置和权限
3. 查看 Git 日志: `git status` 在 vault 目录
### AI 分析失败
1. 检查 API Key 是否有效
2. 确认有可用额度
3. 查看详细错误日志
## 更新日志
### v1.0.0
- 初始版本发布
- 支持 Bilibili、YouTube、知乎
- 长视频分段分析
- Git 自动同步