feat: 新增 YouTube/Bilibili/XHS 搜索 CLI 命令 + 修复 B站搜索

- cli.py: 新增 search-youtube / search-bilibili / search-xhs 子命令
- core.py: 新增 search_youtube / search_bilibili / search_xhs 方法
- bilibili.py: 搜索策略改为 yt-dlp → Exa fallback(服务器 IP 被 B站 412)
  - 本地机器走 yt-dlp bilisearch(有 title/uploader)
  - 服务器自动 fallback 到 Exa site:bilibili.com
  - 修复 mcporter 输出解析(Title:/URL: 格式)

测试结果: 15/15 全通(8 read + 7 search)
This commit is contained in:
Panniantong
2026-02-24 13:39:21 +01:00
parent 88eaebe263
commit 7d0da09222
3 changed files with 101 additions and 6 deletions
+18
View File
@@ -83,6 +83,24 @@ class AgentReach:
results = await ch.search(query, config=self.config, limit=limit)
return [r.to_dict() for r in results]
async def search_youtube(self, query: str, limit: int = 5) -> List[Dict[str, Any]]:
"""Search YouTube via yt-dlp."""
ch = get_channel("youtube")
results = await ch.search(query, config=self.config, limit=limit)
return [r.to_dict() for r in results]
async def search_bilibili(self, query: str, limit: int = 5) -> List[Dict[str, Any]]:
"""Search Bilibili. Tries yt-dlp first, falls back to Exa."""
ch = get_channel("bilibili")
results = await ch.search(query, config=self.config, limit=limit)
return [r.to_dict() for r in results]
async def search_xhs(self, query: str, limit: int = 10) -> List[Dict[str, Any]]:
"""Search XiaoHongShu via mcporter."""
ch = get_channel("xiaohongshu")
results = await ch.search(query, config=self.config, limit=limit)
return [r.to_dict() for r in results]
# ── Health ──────────────────────────────────────────
def doctor(self) -> Dict[str, dict]: