#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 完整测试 B站提取器 """ import sys import json from pathlib import Path # 添加 src 目录到路径 sys.path.insert(0, str(Path(__file__).parent / 'skills' / 'obsidian-kb' / 'src')) from extractors.bilibili_extractor import BilibiliExtractor def main(): """测试主函数""" print("开始完整测试 B站提取器...\n") # 创建提取器(不使用配置,使用默认值) extractor = BilibiliExtractor(config=None) # 测试不同的输入格式 test_cases = [ 'BV1MnFNz5EDL', # BV号 'https://www.bilibili.com/video/BV1MnFNz5EDL', # 完整URL ] for i, source_id in enumerate(test_cases, 1): print(f"\n{'='*60}") print(f"测试 {i}: {source_id}") print(f"{'='*60}\n") try: # 解析 source_id bvid = extractor._parse_source_id(source_id) print(f"✓ 解析 BV 号: {bvid}") # 提取信息 result = extractor.extract(source_id) print("\n✅ 提取成功!\n") # 元数据 print("📋 元数据:") metadata = result['metadata'] for key in ['title', 'author', 'bvid', 'duration', 'pubtime']: print(f" {key}: {metadata.get(key, '')}") # 统计信息 print("\n📊 统计信息:") stats = result['stats'] for key in ['view', 'like', 'coin', 'favorite']: value = stats.get(key, 0) print(f" {key}: {value:,}") # 描述 print("\n📝 描述:") description = result['description'] if description: print(f" {description[:100]}...") else: print(" (无描述)") # 字幕 print("\n📺 字幕:") subtitle = result['subtitle'] if subtitle: lines = subtitle.split('\n') print(f" 共 {len(lines)} 条字幕") else: print(" (无字幕)") except Exception as e: print(f"\n❌ 测试失败: {e}") import traceback traceback.print_exc() print(f"\n{'='*60}") print("测试完成") print(f"{'='*60}\n") if __name__ == '__main__': main()