refactor(06-01): delete original metadata directories and update tests

- Remove kb-bilibili-metadata/ and kb-zhihu-metadata/ directories
- Create kb_workflow/__init__.py to export main and process_command
- Update test_cli/test_process_command.py imports for new package structure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 00:06:01 +08:00
parent 98f8ec2e27
commit 766283366e
7 changed files with 15 additions and 165 deletions
-46
View File
@@ -1,46 +0,0 @@
# KB Bilibili Metadata Skill
**kb-bilibili-metadata** - Extract Bilibili video/article/up主 metadata.
## Features
- Video metadata extraction
- Article (专栏) metadata extraction
- UP主 information extraction
- JSON output format
- Playwright + HTTP API fallback
## Commands
```bash
# Video metadata
python bilibili_metadata.py --id "BV1xx411c7mD" --type video
# Article metadata
python bilibili_metadata.py --id "cv43780186" --type article
# UP主 info
python bilibili_metadata.py --id "7770724" --type up
```
## Output
```json
{
"success": true,
"data": {
"platform": "bilibili",
"type": "video",
"id": "BV1xx411c7mD",
"title": "视频标题",
"author": "UP主名字",
"stats": {"view": 100000, "like": 5000}
}
}
```
## Installation
```bash
cp -r kb-bilibili-metadata/ ~/skills/
```
-8
View File
@@ -1,8 +0,0 @@
"""
bilibili-metadata 技能包
B站元数据提取工具
"""
__version__ = "1.0.0"
__author__ = "OpenClaw"
-101
View File
@@ -1,101 +0,0 @@
# KB Zhihu Metadata Skill
**kb-zhihu-metadata** - Extract Zhihu question/answer/user metadata and crawl articles.
## Features
- Question metadata extraction
- Answer metadata extraction
- User information extraction
- **Article crawling using MediaCrawler** (NEW!)
- JSON output format
- Markdown conversion support
- **Cookie 支持**:可配置 ZHIHU_COOKIE 访问需要登录的内容
## 环境变量
| 变量名 | 用途 | 必需 |
|--------|------|------|
| `ZHIHU_COOKIE` | 知乎登录 Cookie | 推荐(访问专栏等需要) |
**获取 ZHIHU_COOKIE**:
1. 登录知乎网页版
2. 打开开发者工具 (F12) → Application → Cookies → zhihu.com
3. 复制 Cookie 字符串
```bash
# 添加到 ~/.kb_env
echo 'export ZHIHU_COOKIE="你的知乎Cookie"' >> ~/.kb_env
source ~/.kb_env
```
## Commands
```bash
# Question metadata
python zhihu_metadata.py --id "266309957" --type question
# Answer metadata
python zhihu_metadata.py --id "2003427891925509507" --type answer
# 专栏文章爬取 (使用 MediaCrawler) ⚡ NEW!
python zhihu_article_crawler.py --url "https://zhuanlan.zhihu.com/p/1894054073625461813" --output "~/work/knowledge-base/data/zhihu/"
```
## MediaCrawler 爬取文章
**新功能**:使用 MediaCrawler 爬取知乎专栏文章
### 环境要求
MediaCrawler 已安装在 `~/work/MediaCrawler`
### 使用方法
```bash
# 爬取单篇文章
python zhihu_article_crawler.py --url "https://zhuanlan.zhihu.com/p/XXXXX"
# 指定输出目录
python zhihu_article_crawler.py --url "https://zhuanlan.zhihu.com/p/XXXXX" --output "/path/to/output/"
# 输出示例
{
"success": true,
"type": "article",
"title": "如何高效的爬取微信公众号",
"filepath": "/home/xxx/work/knowledge-base/data/zhihu/zhihu_article_如何高效的爬取微信公众号.md",
"content_length": 4563,
"message": "爬取成功: 如何高效的爬取微信公众号"
}
```
### 工作原理
1. 调用 MediaCrawler 爬取文章
2. 从 JSON 输出中提取内容
3. 转换为 Markdown 格式(带 frontmatter)
4. 保存到指定目录
## Output
```json
{
"success": true,
"data": {
"platform": "zhihu",
"type": "question",
"id": "266309957",
"title": "问题标题",
"author": "作者名字",
"answer_count": 50,
"followers": 1000
}
}
```
## Installation
```bash
cp -r kb-zhihu-metadata/ ~/skills/
```
View File
+8
View File
@@ -0,0 +1,8 @@
"""KB Workflow - Knowledge Base Workflow Orchestrator
知识库工作流管道入口。
"""
from .kb_workflow import process_command, main
__all__ = ["process_command", "main"]
+7 -10
View File
@@ -12,16 +12,13 @@ import sys
from unittest.mock import patch, MagicMock, AsyncMock
from pathlib import Path
# Add kb-workflow to path for imports
sys.path.insert(0, '/home/starmen1265/work/kb-skills/kb-workflow')
class TestProcessCommandHelp:
"""Test 1: `kb-workflow process --help` shows usage"""
def test_process_help_shows_usage(self, capsys):
"""`kb-workflow process --help` shows usage information"""
import kb_workflow
from kb_workflow import kb_workflow
# Mock sys.argv
with patch.object(sys, 'argv', ['kb-workflow', 'process', '--help']):
@@ -40,7 +37,7 @@ class TestProcessCommandCallsPipeline:
def test_process_url_calls_pipeline_run(self, capsys):
"""`kb-workflow process <url>` calls Pipeline.run()"""
import kb_workflow
from kb_workflow import kb_workflow
with patch.object(kb_workflow, 'process_command') as mock_process:
mock_process.return_value = {"success": True, "content_dir": "/tmp/content"}
@@ -55,7 +52,7 @@ class TestProcessCommandCallsPipeline:
def test_process_url_with_output_dir(self, capsys):
"""`kb-workflow process <url> --output-dir /custom` passes output_dir"""
import kb_workflow
from kb_workflow import kb_workflow
with patch.object(kb_workflow, 'process_command') as mock_process:
mock_process.return_value = {"success": True, "content_dir": "/custom"}
@@ -76,7 +73,7 @@ class TestProcessCommandInvalidUrl:
def test_process_invalid_url_returns_error(self, capsys):
"""`kb-workflow process <invalid-url>` returns appropriate error"""
import kb_workflow
from kb_workflow import kb_workflow
with patch.object(kb_workflow, 'process_command') as mock_process:
mock_process.return_value = {
@@ -96,7 +93,7 @@ class TestProcessCommandFlags:
def test_output_dir_flag_sets_custom_directory(self):
"""--output-dir flag sets custom output directory"""
import kb_workflow
from kb_workflow import kb_workflow
with patch.object(kb_workflow, 'process_command') as mock_process:
mock_process.return_value = {"success": True}
@@ -113,7 +110,7 @@ class TestProcessCommandFlags:
def test_skip_completed_default_true(self):
"""skip_completed defaults to True"""
import kb_workflow
from kb_workflow import kb_workflow
with patch.object(kb_workflow, 'process_command') as mock_process:
mock_process.return_value = {"success": True}
@@ -129,7 +126,7 @@ class TestProcessCommandFlags:
def test_no_skip_flag_disables_skip_completed(self):
"""--no-skip flag disables skip_completed"""
import kb_workflow
from kb_workflow import kb_workflow
with patch.object(kb_workflow, 'process_command') as mock_process:
mock_process.return_value = {"success": True}