feat: sync full workspace including web modules, docs, and configurations to Gitea
Optimized the root .gitignore to exclude virtual environments, node modules, and temp folders to ensure clean and lightweight version tracking. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
53
axhub-make/skills/third-party/anything-to-notebooklm/.gitignore
vendored
Normal file
53
axhub-make/skills/third-party/anything-to-notebooklm/.gitignore
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
# Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
|
||||
# MCP Server (will be cloned during install)
|
||||
# Keep the directory but ignore its contents
|
||||
wexin-read-mcp/
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Environment
|
||||
.env
|
||||
.env.local
|
||||
|
||||
# Temporary files
|
||||
tmp/
|
||||
temp/
|
||||
*.tmp
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
21
axhub-make/skills/third-party/anything-to-notebooklm/LICENSE
vendored
Normal file
21
axhub-make/skills/third-party/anything-to-notebooklm/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Joe
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
396
axhub-make/skills/third-party/anything-to-notebooklm/README.md
vendored
Normal file
396
axhub-make/skills/third-party/anything-to-notebooklm/README.md
vendored
Normal file
@@ -0,0 +1,396 @@
|
||||
<div align="center">
|
||||
|
||||
# 🎯 多源内容 → NotebookLM 智能处理器
|
||||
|
||||
**一句话变播客、PPT、思维导图、Quiz...**
|
||||
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.python.org/downloads/)
|
||||
[](http://makeapullrequest.com)
|
||||
[](https://github.com/joeseesun/anything-to-notebooklm/stargazers)
|
||||
[](https://github.com/joeseesun/anything-to-notebooklm/network/members)
|
||||
[](https://github.com/joeseesun/anything-to-notebooklm/issues)
|
||||
[](https://github.com/joeseesun/anything-to-notebooklm/commits/main)
|
||||
|
||||
[快速开始](#-快速开始) • [支持格式](#-支持的内容源) • [使用示例](#-使用示例) • [常见问题](#-常见问题)
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## ✨ 这是什么?
|
||||
|
||||
一个 **Claude Code Skill**,让你用自然语言把**任何内容**变成**任何格式**。
|
||||
|
||||
```
|
||||
你说:把这篇微信文章生成播客
|
||||
AI :✅ 8 分钟播客已生成 → podcast.mp3
|
||||
|
||||
你说:这本 EPUB 电子书做成思维导图
|
||||
AI :✅ 思维导图已生成 → mindmap.json
|
||||
|
||||
你说:这个 YouTube 视频做成 PPT
|
||||
AI :✅ 25 页 PPT 已生成 → slides.pdf
|
||||
```
|
||||
|
||||
**原理**:自动从多种来源获取内容 → 上传到 [Google NotebookLM](https://notebooklm.google.com/) → AI 生成你想要的格式
|
||||
|
||||
## 🚀 支持的内容源(15+ 种格式)
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%">
|
||||
|
||||
### 📱 社交媒体
|
||||
- **微信公众号**(绕过反爬虫)
|
||||
- **YouTube 视频**(自动提取字幕)
|
||||
|
||||
### 🌐 网页
|
||||
- **任意网页**(新闻、博客、文档)
|
||||
- **搜索关键词**(自动汇总结果)
|
||||
|
||||
### 📄 Office 文档
|
||||
- **Word** (.docx)
|
||||
- **PowerPoint** (.pptx)
|
||||
- **Excel** (.xlsx)
|
||||
|
||||
</td>
|
||||
<td width="50%">
|
||||
|
||||
### 📚 电子书与文档
|
||||
- **PDF**(支持扫描件 OCR)
|
||||
- **EPUB**(电子书)
|
||||
- **Markdown** (.md)
|
||||
|
||||
### 🖼️ 图片与音频
|
||||
- **图片**(JPEG/PNG/GIF,自动 OCR)
|
||||
- **音频**(WAV/MP3,自动转录)
|
||||
|
||||
### 📊 结构化数据
|
||||
- **CSV/JSON/XML**
|
||||
- **ZIP 压缩包**(批量处理)
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
**技术支持**: [Microsoft markitdown](https://github.com/microsoft/markitdown)
|
||||
|
||||
## 🎨 可以生成什么?
|
||||
|
||||
| 输出格式 | 用途 | 生成时间 | 触发词示例 |
|
||||
|---------|------|---------|-----------|
|
||||
| 🎙️ **播客** | 通勤路上听 | 2-5 分钟 | "生成播客"、"做成音频" |
|
||||
| 📊 **PPT** | 团队分享 | 1-3 分钟 | "做成PPT"、"生成幻灯片" |
|
||||
| 🗺️ **思维导图** | 理清结构 | 1-2 分钟 | "画个思维导图"、"生成脑图" |
|
||||
| 📝 **Quiz** | 自测掌握 | 1-2 分钟 | "生成Quiz"、"出题" |
|
||||
| 🎬 **视频** | 可视化 | 3-8 分钟 | "做个视频" |
|
||||
| 📄 **报告** | 深度分析 | 2-4 分钟 | "生成报告"、"写个总结" |
|
||||
| 📈 **信息图** | 数据可视化 | 2-3 分钟 | "做个信息图" |
|
||||
| 📋 **闪卡** | 记忆巩固 | 1-2 分钟 | "做成闪卡" |
|
||||
|
||||
**完全自然语言,无需记命令!**
|
||||
|
||||
## ⚡ 快速开始
|
||||
|
||||
### 前置需求
|
||||
|
||||
- ✅ Python 3.9+
|
||||
- ✅ Git(macOS/Linux 自带)
|
||||
|
||||
**就这两样!** 其他依赖一键自动安装。
|
||||
|
||||
### 安装(3 步)
|
||||
|
||||
```bash
|
||||
# 1. 克隆到 Claude skills 目录
|
||||
cd ~/.claude/skills/
|
||||
git clone https://github.com/joeseesun/anything-to-notebooklm
|
||||
cd anything-to-notebooklm
|
||||
|
||||
# 2. 一键安装所有依赖
|
||||
./install.sh
|
||||
|
||||
# 3. 按提示配置 MCP,然后重启 Claude Code
|
||||
```
|
||||
|
||||
### 首次使用
|
||||
|
||||
```bash
|
||||
# NotebookLM 认证(只需一次)
|
||||
notebooklm login
|
||||
notebooklm list # 验证成功
|
||||
|
||||
# 环境检查(可选)
|
||||
./check_env.py
|
||||
```
|
||||
|
||||
## 💡 使用示例
|
||||
|
||||
### 场景 1:快速学习 - 文章 → 播客
|
||||
|
||||
```
|
||||
你:把这篇文章生成播客 https://mp.weixin.qq.com/s/abc123
|
||||
|
||||
AI 自动执行:
|
||||
✓ 抓取微信文章内容
|
||||
✓ 上传到 NotebookLM
|
||||
✓ 生成播客(2-5 分钟)
|
||||
|
||||
✅ 结果:/tmp/article_podcast.mp3(8 分钟,12.3 MB)
|
||||
💡 用途:通勤路上听完一篇深度文章
|
||||
```
|
||||
|
||||
### 场景 2:团队分享 - 电子书 → PPT
|
||||
|
||||
```
|
||||
你:这本书做成 PPT /Users/joe/Books/sapiens.epub
|
||||
|
||||
AI 自动执行:
|
||||
✓ 提取电子书内容(15 万字)
|
||||
✓ AI 精炼核心观点
|
||||
✓ 生成专业 PPT
|
||||
|
||||
✅ 结果:/tmp/sapiens_slides.pdf(25 页,3.8 MB)
|
||||
💡 用途:直接用于读书会分享
|
||||
```
|
||||
|
||||
### 场景 3:自测学习 - 视频 → Quiz
|
||||
|
||||
```
|
||||
你:这个 YouTube 视频生成 Quiz https://youtube.com/watch?v=abc
|
||||
|
||||
AI 自动执行:
|
||||
✓ 提取视频字幕
|
||||
✓ AI 分析关键知识点
|
||||
✓ 自动出题
|
||||
|
||||
✅ 结果:/tmp/video_quiz.md(15 道题,10 选择 + 5 简答)
|
||||
💡 用途:检验学习效果
|
||||
```
|
||||
|
||||
### 场景 4:信息整合 - 多源 → 报告
|
||||
|
||||
```
|
||||
你:把这些内容一起做成报告:
|
||||
- https://example.com/article1
|
||||
- https://youtube.com/watch?v=xyz
|
||||
- /Users/joe/research.pdf
|
||||
|
||||
AI 自动执行:
|
||||
✓ 汇总 3 个不同来源
|
||||
✓ AI 整合分析
|
||||
✓ 生成综合报告
|
||||
|
||||
✅ 结果:/tmp/multi_source_report.md(7 个章节,15.2 KB)
|
||||
💡 用途:全面的主题研究报告
|
||||
```
|
||||
|
||||
### 场景 5:文档数字化 - 扫描件 → 文字
|
||||
|
||||
```
|
||||
你:把这个扫描图片做成文档 /Users/joe/scan.jpg
|
||||
|
||||
AI 自动执行:
|
||||
✓ OCR 识别图片中的文字
|
||||
✓ 提取为纯文本
|
||||
✓ 生成结构化文档
|
||||
|
||||
✅ 结果:/tmp/scan_document.txt(识别准确率 95%+)
|
||||
💡 用途:扫描件数字化归档
|
||||
```
|
||||
|
||||
## 🎯 核心特性
|
||||
|
||||
### 🧠 智能识别
|
||||
自动判断输入类型,无需手动指定
|
||||
|
||||
```
|
||||
https://mp.weixin.qq.com/s/xxx → 微信公众号
|
||||
https://youtube.com/watch?v=xxx → YouTube 视频
|
||||
/path/to/file.epub → EPUB 电子书
|
||||
"搜索 'AI 趋势'" → 搜索查询
|
||||
```
|
||||
|
||||
### 🚀 全自动处理
|
||||
从获取到生成,一气呵成
|
||||
|
||||
```
|
||||
输入 → 获取 → 转换 → 上传 → 生成 → 下载
|
||||
︿________全自动________︿
|
||||
```
|
||||
|
||||
### 🌐 多源整合
|
||||
支持混合多种内容源
|
||||
|
||||
```
|
||||
文章 + 视频 + PDF + 搜索结果 → 综合报告
|
||||
```
|
||||
|
||||
### 🔒 本地优先
|
||||
敏感内容本地处理
|
||||
|
||||
```
|
||||
微信文章 → 本地 MCP 抓取 → 本地转换 → NotebookLM
|
||||
```
|
||||
|
||||
## 📦 技术架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 用户自然语言输入 │
|
||||
│ "把这篇文章生成播客 https://..." │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ Claude Code Skill │
|
||||
│ • 智能识别内容源类型 │
|
||||
│ • 自动调用对应工具 │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
┌────────┴────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────┐ ┌─────────────┐
|
||||
│ 微信公众号 │ │ 其他格式 │
|
||||
│ MCP 抓取 │ │ markitdown │
|
||||
└─────┬────┘ └──────┬──────┘
|
||||
│ │
|
||||
└────────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ NotebookLM API │
|
||||
│ • 上传内容源 │
|
||||
│ • AI 生成目标格式 │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ 生成的文件 │
|
||||
│ .mp3 / .pdf / .json / .md │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 🔧 高级用法
|
||||
|
||||
### 指定已有 Notebook
|
||||
|
||||
```
|
||||
把这篇文章加到我的【AI研究】笔记本 https://example.com
|
||||
```
|
||||
|
||||
### 批量处理
|
||||
|
||||
```
|
||||
把这些文章都生成播客:
|
||||
1. https://mp.weixin.qq.com/s/abc123
|
||||
2. https://example.com/article2
|
||||
3. /Users/joe/notes.md
|
||||
```
|
||||
|
||||
### ZIP 批量转换
|
||||
|
||||
```
|
||||
把这个压缩包里的所有文档做成播客 /path/to/files.zip
|
||||
```
|
||||
|
||||
自动解压、识别、转换、合并
|
||||
|
||||
## 🐛 故障排查
|
||||
|
||||
### MCP 工具未找到
|
||||
|
||||
```bash
|
||||
# 测试 MCP 服务器
|
||||
python ~/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py
|
||||
|
||||
# 重新安装依赖
|
||||
cd ~/.claude/skills/anything-to-notebooklm/wexin-read-mcp
|
||||
pip install -r requirements.txt
|
||||
playwright install chromium
|
||||
```
|
||||
|
||||
### NotebookLM 认证失败
|
||||
|
||||
```bash
|
||||
notebooklm login # 重新登录
|
||||
notebooklm list # 验证
|
||||
```
|
||||
|
||||
### 环境检查
|
||||
|
||||
```bash
|
||||
./check_env.py # 13 项全面检查
|
||||
./install.sh # 重新安装
|
||||
```
|
||||
|
||||
## 🤝 贡献
|
||||
|
||||
欢迎 PR、Issue、建议!
|
||||
|
||||
## ❓ 常见问题
|
||||
|
||||
<details>
|
||||
<summary><b>Q: 支持哪些语言?</b></summary>
|
||||
|
||||
A: NotebookLM 支持多语言,中文、英文效果最佳。
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Q: 播客是谁的声音?</b></summary>
|
||||
|
||||
A: Google AI 语音合成。英文是两个 AI 主持人对话,中文是单人叙述。
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Q: 内容长度限制?</b></summary>
|
||||
|
||||
A:
|
||||
- 最短:约 500 字
|
||||
- 最长:约 50 万字
|
||||
- 推荐:1000-10000 字效果最佳
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Q: 可以商用吗?</b></summary>
|
||||
|
||||
A:
|
||||
- 本 Skill:MIT 开源,可自由使用
|
||||
- 生成内容:遵守 NotebookLM 服务条款
|
||||
- 原始内容:遵守原内容版权
|
||||
- 建议:仅用于个人学习研究
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Q: 为什么需要 MCP?</b></summary>
|
||||
|
||||
A: 微信公众号有反爬虫,MCP 用浏览器模拟绕过。其他内容源(网页、YouTube、PDF)不需要 MCP。
|
||||
</details>
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
[MIT License](LICENSE)
|
||||
|
||||
## 🙏 致谢
|
||||
|
||||
- [Google NotebookLM](https://notebooklm.google.com/) - AI 内容生成
|
||||
- [Microsoft markitdown](https://github.com/microsoft/markitdown) - 文件转换
|
||||
- [wexin-read-mcp](https://github.com/Bwkyd/wexin-read-mcp) - 微信抓取
|
||||
- [notebooklm-py](https://github.com/teng-lin/notebooklm-py) - NotebookLM CLI
|
||||
|
||||
## 📮 联系
|
||||
|
||||
- **Issues**: [GitHub Issues](https://github.com/joeseesun/anything-to-notebooklm/issues)
|
||||
- **Discussions**: [GitHub Discussions](https://github.com/joeseesun/anything-to-notebooklm/discussions)
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**如果觉得有用,请给个 ⭐ Star!**
|
||||
|
||||
Made with ❤️ by [Joe](https://github.com/joeseesun)
|
||||
|
||||
</div>
|
||||
632
axhub-make/skills/third-party/anything-to-notebooklm/SKILL.md
vendored
Normal file
632
axhub-make/skills/third-party/anything-to-notebooklm/SKILL.md
vendored
Normal file
@@ -0,0 +1,632 @@
|
||||
---
|
||||
name: anything-to-notebooklm
|
||||
description: 多源内容智能处理器:支持微信公众号、网页、YouTube、PDF、Markdown等,自动上传到NotebookLM并生成播客/PPT/思维导图等多种格式
|
||||
user-invocable: true
|
||||
homepage: https://github.com/joeseesun/anything-to-notebooklm
|
||||
---
|
||||
|
||||
# 多源内容 → NotebookLM 智能处理器
|
||||
|
||||
自动从多种来源获取内容,上传到 NotebookLM,并根据自然语言指令生成播客、PPT、思维导图等多种格式。
|
||||
|
||||
## 支持的内容源
|
||||
|
||||
### 1. 微信公众号文章
|
||||
通过 MCP 服务器自动抓取微信公众号文章内容(绕过反爬虫)
|
||||
|
||||
### 2. 任意网页链接
|
||||
支持任何公开可访问的网页(新闻、博客、文档等)
|
||||
|
||||
### 3. YouTube 视频
|
||||
自动提取 YouTube 视频的字幕和元数据
|
||||
|
||||
### 4. Office 文档
|
||||
- **Word (DOCX)** - 保留表格和格式
|
||||
- **PowerPoint (PPTX)** - 提取幻灯片和备注
|
||||
- **Excel (XLSX)** - 表格数据
|
||||
|
||||
### 5. 电子书与文档
|
||||
- **PDF** - 全文提取
|
||||
- **EPUB** - 电子书全文提取
|
||||
- **Markdown (.md)** - 原生支持
|
||||
|
||||
### 6. 图片与扫描件
|
||||
- **Images** (JPEG, PNG, GIF, WebP) - OCR 识别文字
|
||||
- 扫描的 PDF 文档 - OCR 提取文字
|
||||
|
||||
### 7. 音频文件
|
||||
- **Audio** (WAV, MP3) - 语音转文字
|
||||
|
||||
### 8. 结构化数据
|
||||
- **CSV** - 逗号分隔数据
|
||||
- **JSON** - JSON 数据
|
||||
- **XML** - XML 文档
|
||||
|
||||
### 9. 压缩包
|
||||
- **ZIP** - 自动解压并处理所有支持的文件
|
||||
|
||||
### 10. 纯文本
|
||||
直接输入或粘贴的文本内容
|
||||
|
||||
### 11. 搜索关键词
|
||||
通过 Web Search 搜索关键词,汇总多个来源的信息
|
||||
|
||||
## 前置条件
|
||||
|
||||
### 1. 安装 wexin-read-mcp
|
||||
|
||||
MCP 服务器已安装在:`~/.claude/skills/anything-to-notebooklm/wexin-read-mcp/`
|
||||
|
||||
**配置 MCP**(需要手动添加到 Claude 配置文件):
|
||||
|
||||
**macOS**: 编辑 `~/.claude/config.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"primaryApiKey": "any",
|
||||
"mcpServers": {
|
||||
"weixin-reader": {
|
||||
"command": "python",
|
||||
"args": [
|
||||
"/Users/joe/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置后需要重启 Claude Code。**
|
||||
|
||||
### 2. notebooklm 认证
|
||||
|
||||
首次使用前必须认证:
|
||||
|
||||
```bash
|
||||
notebooklm login
|
||||
notebooklm list # 验证认证成功
|
||||
```
|
||||
|
||||
## 触发方式
|
||||
|
||||
### 微信公众号文章
|
||||
- `/anything-to-notebooklm [微信文章链接]`
|
||||
- "把这篇微信文章传到NotebookLM"
|
||||
- "把这篇微信文章生成播客"
|
||||
|
||||
### 网页链接
|
||||
- "把这个网页做成播客 [URL]"
|
||||
- "这篇文章帮我做成PPT [URL]"
|
||||
- "帮我分析这个网页 [URL]"
|
||||
|
||||
### YouTube 视频
|
||||
- "把这个YouTube视频做成播客 [YouTube URL]"
|
||||
- "这个视频帮我生成思维导图 [YouTube URL]"
|
||||
|
||||
### 本地文件
|
||||
- "把这个PDF上传到NotebookLM /path/to/file.pdf"
|
||||
- "这个Markdown文件生成PPT /path/to/file.md"
|
||||
- "这个EPUB电子书生成播客 /path/to/book.epub"
|
||||
- "把这个Word文档做成思维导图 /path/to/doc.docx"
|
||||
- "这个PowerPoint生成Quiz /path/to/slides.pptx"
|
||||
- "把这个扫描PDF做成报告 /path/to/scan.pdf"(自动OCR)
|
||||
|
||||
### 搜索关键词
|
||||
- "搜索 'AI发展趋势' 并生成报告"
|
||||
- "搜索关于'量子计算'的资料做成播客"
|
||||
|
||||
### 混合使用
|
||||
- "把这篇文章、这个视频和这个PDF一起上传,生成一份报告"
|
||||
|
||||
## 自然语言 → NotebookLM 功能映射
|
||||
|
||||
| 用户说的话 | 识别意图 | NotebookLM 命令 |
|
||||
|-----------|---------|----------------|
|
||||
| "生成播客" / "做成音频" / "转成语音" | audio | `generate audio` |
|
||||
| "做成PPT" / "生成幻灯片" / "做个演示" | slide-deck | `generate slide-deck` |
|
||||
| "画个思维导图" / "生成脑图" / "做个导图" | mind-map | `generate mind-map` |
|
||||
| "生成Quiz" / "出题" / "做个测验" | quiz | `generate quiz` |
|
||||
| "做个视频" / "生成视频" | video | `generate video` |
|
||||
| "生成报告" / "写个总结" / "整理成文档" | report | `generate report` |
|
||||
| "做个信息图" / "可视化" | infographic | `generate infographic` |
|
||||
| "生成数据表" / "做个表格" | data-table | `generate data-table` |
|
||||
| "做成闪卡" / "生成记忆卡片" | flashcards | `generate flashcards` |
|
||||
|
||||
**如果没有明确指令**,默认只上传不生成任何内容,等待用户后续指令。
|
||||
|
||||
## 工作流程
|
||||
|
||||
### Step 1: 识别内容源类型
|
||||
|
||||
Claude 自动识别输入类型:
|
||||
|
||||
| 输入特征 | 识别为 | 处理方式 |
|
||||
|---------|-------|---------|
|
||||
| `https://mp.weixin.qq.com/s/` | 微信公众号 | MCP 工具抓取 |
|
||||
| `https://youtube.com/...` 或 `https://youtu.be/...` | YouTube | 直接传递给 NotebookLM |
|
||||
| `https://` 或 `http://` | 网页 | 直接传递给 NotebookLM |
|
||||
| `/path/to/file.pdf` | PDF 文件 | markitdown 转 Markdown → TXT |
|
||||
| `/path/to/file.epub` | EPUB 电子书 | markitdown 转 Markdown → TXT |
|
||||
| `/path/to/file.docx` | Word 文档 | markitdown 转 Markdown → TXT |
|
||||
| `/path/to/file.pptx` | PowerPoint | markitdown 转 Markdown → TXT |
|
||||
| `/path/to/file.xlsx` | Excel | markitdown 转 Markdown → TXT |
|
||||
| `/path/to/file.md` | Markdown | 直接上传 |
|
||||
| `/path/to/image.jpg` | 图片(OCR) | markitdown OCR → TXT |
|
||||
| `/path/to/audio.mp3` | 音频 | markitdown 转录 → TXT |
|
||||
| `/path/to/file.zip` | ZIP 压缩包 | 解压 → markitdown 批量转换 |
|
||||
| 关键词(无URL,无路径) | 搜索查询 | WebSearch → 汇总 → TXT |
|
||||
|
||||
### Step 2: 获取内容
|
||||
|
||||
**微信公众号**:
|
||||
- 使用 MCP 工具 `read_weixin_article`
|
||||
- 返回:title, author, publish_time, content
|
||||
- 保存为 TXT:`/tmp/weixin_{title}_{timestamp}.txt`
|
||||
|
||||
**网页/YouTube**:
|
||||
- 直接使用 URL 调用 `notebooklm source add [URL]`
|
||||
- NotebookLM 自动提取内容
|
||||
|
||||
**Office 文档/电子书/PDF**:
|
||||
- 使用 markitdown 转换为 Markdown
|
||||
- 命令:`markitdown /path/to/file.docx -o /tmp/converted.md`
|
||||
- 保存为 TXT:`/tmp/{filename}_converted_{timestamp}.txt`
|
||||
|
||||
**本地 Markdown**:
|
||||
- 直接上传:`notebooklm source add /path/to/file.md`
|
||||
|
||||
**图片(OCR)**:
|
||||
- markitdown 自动 OCR 识别文字
|
||||
- 提取 EXIF 元数据
|
||||
- 保存为 TXT
|
||||
|
||||
**音频文件**:
|
||||
- markitdown 自动转录语音为文字
|
||||
- 提取音频元数据
|
||||
- 保存为 TXT
|
||||
|
||||
**ZIP 压缩包**:
|
||||
- 自动解压到临时目录
|
||||
- 遍历所有支持的文件
|
||||
- 批量使用 markitdown 转换
|
||||
- 合并为单个 TXT 或多个 Source
|
||||
|
||||
**搜索关键词**:
|
||||
- 使用 WebSearch 工具搜索关键词
|
||||
- 汇总前 3-5 条结果
|
||||
- 保存为 TXT:`/tmp/search_{keyword}_{timestamp}.txt`
|
||||
|
||||
### Step 3: 上传到 NotebookLM
|
||||
|
||||
调用 `notebooklm` skill:
|
||||
|
||||
```bash
|
||||
notebooklm create "{title}" # 创建新笔记本
|
||||
notebooklm source add /tmp/weixin_xxx.txt --wait # 上传文件并等待处理完成
|
||||
```
|
||||
|
||||
**等待处理完成很重要**,否则后续生成会失败。
|
||||
|
||||
### Step 5: 根据意图生成内容(可选)
|
||||
|
||||
如果用户指定了处理意图,自动调用对应命令:
|
||||
|
||||
| 意图 | 命令 | 等待 | 下载 |
|
||||
|------|------|------|------|
|
||||
| audio | `notebooklm generate audio` | `artifact wait` | `download audio ./output.mp3` |
|
||||
| slide-deck | `notebooklm generate slide-deck` | `artifact wait` | `download slide-deck ./output.pdf` |
|
||||
| mind-map | `notebooklm generate mind-map` | `artifact wait` | `download mind-map ./map.json` |
|
||||
| quiz | `notebooklm generate quiz` | `artifact wait` | `download quiz ./quiz.md --format markdown` |
|
||||
| video | `notebooklm generate video` | `artifact wait` | `download video ./output.mp4` |
|
||||
| report | `notebooklm generate report` | `artifact wait` | `download report ./report.md` |
|
||||
| infographic | `notebooklm generate infographic` | `artifact wait` | `download infographic ./infographic.png` |
|
||||
| flashcards | `notebooklm generate flashcards` | `artifact wait` | `download flashcards ./cards.md --format markdown` |
|
||||
|
||||
**生成流程**:
|
||||
1. 发起生成请求(返回 task_id)
|
||||
2. 等待生成完成(`artifact wait <task_id>`)
|
||||
3. 下载生成的文件到本地
|
||||
4. 告知用户文件路径
|
||||
|
||||
## 完整示例
|
||||
|
||||
### 示例 1:微信公众号文章 → 播客
|
||||
|
||||
**用户输入**:
|
||||
```
|
||||
把这篇文章生成播客 https://mp.weixin.qq.com/s/abc123xyz
|
||||
```
|
||||
|
||||
**执行流程**:
|
||||
1. 识别为微信公众号链接
|
||||
2. MCP 工具抓取文章内容
|
||||
3. 创建 TXT 文件
|
||||
4. 上传到 NotebookLM
|
||||
5. 生成播客(`generate audio`)
|
||||
6. 下载播客到本地
|
||||
|
||||
**输出**:
|
||||
```
|
||||
✅ 微信文章已转换为播客!
|
||||
|
||||
📄 文章:深度学习的未来趋势
|
||||
👤 作者:张三
|
||||
📅 发布:2026-01-20
|
||||
|
||||
🎙️ 播客已生成:
|
||||
📁 文件:/tmp/weixin_深度学习的未来趋势_podcast.mp3
|
||||
⏱️ 时长:约 8 分钟
|
||||
📊 大小:12.3 MB
|
||||
```
|
||||
|
||||
### 示例 2:YouTube 视频 → 思维导图
|
||||
|
||||
**用户输入**:
|
||||
```
|
||||
这个视频帮我画个思维导图 https://www.youtube.com/watch?v=abc123
|
||||
```
|
||||
|
||||
**执行流程**:
|
||||
1. 识别为 YouTube 链接
|
||||
2. 直接传递给 NotebookLM(自动提取字幕)
|
||||
3. 生成思维导图(`generate mind-map`)
|
||||
4. 下载思维导图
|
||||
|
||||
**输出**:
|
||||
```
|
||||
✅ YouTube 视频已转换为思维导图!
|
||||
|
||||
🎬 视频:Understanding Quantum Computing
|
||||
⏱️ 时长:23 分钟
|
||||
|
||||
🗺️ 思维导图已生成:
|
||||
📁 文件:/tmp/youtube_quantum_computing_mindmap.json
|
||||
📊 节点数:45 个
|
||||
```
|
||||
|
||||
### 示例 3:搜索关键词 → 报告
|
||||
|
||||
**用户输入**:
|
||||
```
|
||||
搜索 'AI发展趋势 2026' 并生成报告
|
||||
```
|
||||
|
||||
**执行流程**:
|
||||
1. 识别为搜索查询
|
||||
2. WebSearch 搜索关键词
|
||||
3. 汇总前 5 条结果
|
||||
4. 创建 TXT 文件
|
||||
5. 上传到 NotebookLM
|
||||
6. 生成报告(`generate report`)
|
||||
|
||||
**输出**:
|
||||
```
|
||||
✅ 搜索结果已生成报告!
|
||||
|
||||
🔍 关键词:AI发展趋势 2026
|
||||
📊 来源:5 篇文章
|
||||
|
||||
📄 报告已生成:
|
||||
📁 文件:/tmp/search_AI发展趋势2026_report.md
|
||||
📝 章节:7 个
|
||||
📊 大小:15.2 KB
|
||||
```
|
||||
|
||||
### 示例 4:混合多源 → PPT
|
||||
|
||||
**用户输入**:
|
||||
```
|
||||
把这篇文章、这个视频和这个PDF一起做成PPT:
|
||||
- https://example.com/article
|
||||
- https://youtube.com/watch?v=xyz
|
||||
- /Users/joe/Documents/research.pdf
|
||||
```
|
||||
|
||||
**执行流程**:
|
||||
1. 创建新 Notebook
|
||||
2. 依次添加 3 个 Source
|
||||
3. 基于所有 Source 生成 PPT
|
||||
|
||||
**输出**:
|
||||
```
|
||||
✅ 多源内容已整合为PPT!
|
||||
|
||||
📚 内容源:
|
||||
1. 网页文章:AI in 2026
|
||||
2. YouTube:Future of AI
|
||||
3. PDF:Research Notes (12 页)
|
||||
|
||||
📊 PPT 已生成:
|
||||
📁 文件:/tmp/multi_source_slides.pdf
|
||||
📄 页数:25 页
|
||||
📦 大小:3.8 MB
|
||||
```
|
||||
|
||||
### 示例 5: EPUB 电子书 → 播客
|
||||
|
||||
**用户输入**:
|
||||
```
|
||||
把这本电子书做成播客 /Users/joe/Books/sapiens.epub
|
||||
```
|
||||
|
||||
**执行流程**:
|
||||
1. 识别为 EPUB 文件
|
||||
2. markitdown 转换为 Markdown
|
||||
3. 保存为 TXT
|
||||
4. 上传到 NotebookLM
|
||||
5. 生成播客
|
||||
|
||||
**输出**:
|
||||
```
|
||||
✅ EPUB 电子书已转换为播客!
|
||||
|
||||
📚 电子书:Sapiens: A Brief History of Humankind
|
||||
📄 页数:约 450 页
|
||||
📊 字数:约 15 万字
|
||||
|
||||
🎙️ 播客已生成:
|
||||
📁 文件:/tmp/sapiens_podcast.mp3
|
||||
⏱️ 时长:约 45 分钟(精华版)
|
||||
📊 大小:48.2 MB
|
||||
```
|
||||
|
||||
### 示例 6:Word 文档 → Quiz
|
||||
|
||||
**用户输入**:
|
||||
```
|
||||
这个Markdown生成Quiz /Users/joe/notes/machine_learning.md
|
||||
```
|
||||
|
||||
**执行流程**:
|
||||
1. 识别为本地 Markdown 文件
|
||||
2. 直接上传到 NotebookLM
|
||||
3. 生成 Quiz(`generate quiz`)
|
||||
|
||||
**输出**:
|
||||
```
|
||||
✅ Markdown 已转换为Quiz!
|
||||
|
||||
📄 文件:machine_learning.md
|
||||
📊 大小:8.5 KB
|
||||
|
||||
📝 Quiz 已生成:
|
||||
📁 文件:/tmp/machine_learning_quiz.md
|
||||
❓ 题目:15 道(10选择 + 5简答)
|
||||
```
|
||||
|
||||
## 错误处理
|
||||
|
||||
### URL 格式错误
|
||||
```
|
||||
❌ 错误:URL 格式不正确
|
||||
|
||||
必须是微信公众号文章链接:
|
||||
https://mp.weixin.qq.com/s/xxx
|
||||
|
||||
你提供的链接:https://example.com
|
||||
```
|
||||
|
||||
### 文章获取失败
|
||||
```
|
||||
❌ 错误:无法获取文章内容
|
||||
|
||||
可能原因:
|
||||
1. 文章已被删除
|
||||
2. 文章需要登录查看(暂不支持)
|
||||
3. 网络连接问题
|
||||
4. 微信反爬虫拦截(请稍后重试)
|
||||
|
||||
建议:
|
||||
- 检查链接是否正确
|
||||
- 等待 2-3 秒后重试
|
||||
- 或手动复制文章内容
|
||||
```
|
||||
|
||||
### NotebookLM 认证失败
|
||||
```
|
||||
❌ 错误:NotebookLM 认证失败
|
||||
|
||||
请运行以下命令重新登录:
|
||||
notebooklm login
|
||||
|
||||
然后验证:
|
||||
notebooklm list
|
||||
```
|
||||
|
||||
### 生成任务失败
|
||||
```
|
||||
❌ 错误:播客生成失败
|
||||
|
||||
可能原因:
|
||||
1. 文章内容太短(< 100 字)
|
||||
2. 文章内容太长(> 50万字)
|
||||
3. NotebookLM 服务异常
|
||||
|
||||
建议:
|
||||
- 检查文章长度是否适中
|
||||
- 稍后重试
|
||||
- 或尝试其他格式(如生成报告)
|
||||
```
|
||||
|
||||
## 高级功能
|
||||
|
||||
### 1. 多意图处理
|
||||
|
||||
用户可以一次性指定多个处理任务:
|
||||
|
||||
```
|
||||
这篇文章帮我生成播客和PPT https://mp.weixin.qq.com/s/abc123
|
||||
```
|
||||
|
||||
Skill 会依次执行:
|
||||
1. 生成播客
|
||||
2. 生成 PPT
|
||||
|
||||
### 2. 自定义 Notebook
|
||||
|
||||
默认每篇文章创建新 Notebook,也可以指定已有 Notebook:
|
||||
|
||||
```
|
||||
把这篇文章加到我的【AI研究】笔记本 https://mp.weixin.qq.com/s/abc123
|
||||
```
|
||||
|
||||
Skill 会:
|
||||
1. 搜索名为"AI研究"的 Notebook
|
||||
2. 将文章添加为新 Source
|
||||
3. 基于所有 Sources 生成内容
|
||||
|
||||
### 3. 自定义生成指令
|
||||
|
||||
为生成任务添加具体要求:
|
||||
|
||||
```
|
||||
这篇文章生成播客,要求:轻松幽默的风格,时长控制在5分钟
|
||||
```
|
||||
|
||||
Skill 会将要求作为 instructions 传给 NotebookLM。
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **频率限制**:
|
||||
- 每次请求间隔 > 2 秒,避免被微信封禁
|
||||
- NotebookLM 生成任务有并发限制(最多 3 个同时进行)
|
||||
|
||||
2. **内容长度**:
|
||||
- 微信文章通常 1000-5000 字,适合生成播客(3-8 分钟)
|
||||
- 超过 10000 字的长文可能需要更长生成时间
|
||||
- 少于 500 字的短文可能生成效果不佳
|
||||
|
||||
3. **版权遵守**:
|
||||
- 仅用于个人学习研究
|
||||
- 遵守微信公众号的版权规定
|
||||
- 生成的内容不得用于商业用途
|
||||
|
||||
4. **生成时间**:
|
||||
- 播客:2-5 分钟
|
||||
- 视频:3-8 分钟
|
||||
- PPT:1-3 分钟
|
||||
- 思维导图:1-2 分钟
|
||||
- Quiz/闪卡:1-2 分钟
|
||||
|
||||
5. **文件清理**:
|
||||
- TXT 源文件保存在 `/tmp/`,系统重启后自动清理
|
||||
- 生成的文件(MP3/PDF/MD 等)默认保存在 `/tmp/`
|
||||
- 可以指定自定义保存路径
|
||||
|
||||
## 相关 Skills
|
||||
|
||||
- `notebooklm` - NotebookLM 核心功能
|
||||
- `notebooklm-deep-analyzer` - 深度分析 NotebookLM 内容
|
||||
- `markitdown` - 转换其他格式文档
|
||||
|
||||
## 配置 MCP(重要)
|
||||
|
||||
⚠️ **第一次使用前必须配置**
|
||||
|
||||
编辑 `~/.claude/config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"primaryApiKey": "any",
|
||||
"mcpServers": {
|
||||
"weixin-reader": {
|
||||
"command": "python",
|
||||
"args": [
|
||||
"/Users/joe/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置后重启 Claude Code!**
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 1. MCP 工具未找到
|
||||
|
||||
```bash
|
||||
# 测试 MCP 服务器
|
||||
python ~/.claude/skills/anything-to-notebooklm/wexin-read-mcp/src/server.py
|
||||
|
||||
# 如果报错,检查依赖
|
||||
cd ~/.claude/skills/anything-to-notebooklm/wexin-read-mcp
|
||||
pip install -r requirements.txt
|
||||
playwright install chromium
|
||||
```
|
||||
|
||||
### 2. NotebookLM 命令失败
|
||||
|
||||
```bash
|
||||
# 检查认证状态
|
||||
notebooklm status
|
||||
|
||||
# 重新登录
|
||||
notebooklm login
|
||||
|
||||
# 验证
|
||||
notebooklm list
|
||||
```
|
||||
|
||||
### 3. 文件权限问题
|
||||
|
||||
```bash
|
||||
# 确保临时目录可写
|
||||
chmod 755 /tmp
|
||||
|
||||
# 测试写入
|
||||
touch /tmp/test.txt && rm /tmp/test.txt
|
||||
```
|
||||
|
||||
### 4. 生成任务卡住
|
||||
|
||||
```bash
|
||||
# 检查任务状态
|
||||
notebooklm artifact list
|
||||
|
||||
# 如果显示 "pending" 超过 10 分钟,取消重试
|
||||
# (目前 CLI 不支持取消,需要在网页端操作)
|
||||
```
|
||||
|
||||
## 典型使用场景
|
||||
|
||||
### 场景 1:快速学习
|
||||
|
||||
```
|
||||
我想学习这篇文章,帮我生成播客,上下班路上听
|
||||
链接:https://mp.weixin.qq.com/s/abc123
|
||||
```
|
||||
|
||||
→ 生成 8 分钟播客,通勤时间听完
|
||||
|
||||
### 场景 2:分享给团队
|
||||
|
||||
```
|
||||
这篇文章不错,做成PPT分享给团队
|
||||
https://mp.weixin.qq.com/s/abc123
|
||||
```
|
||||
|
||||
→ 生成 15 页 PPT,直接用于团队分享
|
||||
|
||||
### 场景 3:复习巩固
|
||||
|
||||
```
|
||||
这篇技术文章帮我出题,想测试一下掌握程度
|
||||
https://mp.weixin.qq.com/s/abc123
|
||||
```
|
||||
|
||||
→ 生成 10 道选择题 + 5 道简答题
|
||||
|
||||
### 场景 4:可视化理解
|
||||
|
||||
```
|
||||
这篇文章概念比较多,画个思维导图帮我理清结构
|
||||
https://mp.weixin.qq.com/s/abc123
|
||||
```
|
||||
|
||||
→ 生成思维导图,一目了然
|
||||
|
||||
---
|
||||
|
||||
**Skill 创建时间**:2026-01-25
|
||||
**最后更新**:2026-01-25
|
||||
**版本**:v1.0.0
|
||||
218
axhub-make/skills/third-party/anything-to-notebooklm/check_env.py
vendored
Normal file
218
axhub-make/skills/third-party/anything-to-notebooklm/check_env.py
vendored
Normal file
@@ -0,0 +1,218 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
环境检查脚本 - 验证 anything-to-notebooklm skill 所有依赖
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
# 颜色输出
|
||||
RED = '\033[0;31m'
|
||||
GREEN = '\033[0;32m'
|
||||
YELLOW = '\033[1;33m'
|
||||
BLUE = '\033[0;34m'
|
||||
NC = '\033[0m'
|
||||
|
||||
def print_status(status, message):
|
||||
"""打印状态信息"""
|
||||
if status == "ok":
|
||||
print(f"{GREEN}✅ {message}{NC}")
|
||||
elif status == "warning":
|
||||
print(f"{YELLOW}⚠️ {message}{NC}")
|
||||
elif status == "error":
|
||||
print(f"{RED}❌ {message}{NC}")
|
||||
else:
|
||||
print(f"{BLUE}ℹ️ {message}{NC}")
|
||||
|
||||
def check_python_version():
|
||||
"""检查 Python 版本"""
|
||||
version = sys.version_info
|
||||
version_str = f"{version.major}.{version.minor}.{version.micro}"
|
||||
|
||||
if version.major >= 3 and version.minor >= 9:
|
||||
print_status("ok", f"Python {version_str}")
|
||||
return True
|
||||
else:
|
||||
print_status("error", f"Python {version_str} (需要 3.9+)")
|
||||
return False
|
||||
|
||||
def check_module(module_name, import_name=None):
|
||||
"""检查 Python 模块是否已安装"""
|
||||
if import_name is None:
|
||||
import_name = module_name
|
||||
|
||||
try:
|
||||
__import__(import_name)
|
||||
print_status("ok", f"{module_name} 已安装")
|
||||
return True
|
||||
except ImportError:
|
||||
print_status("error", f"{module_name} 未安装")
|
||||
return False
|
||||
|
||||
def check_command(cmd):
|
||||
"""检查命令是否可用"""
|
||||
import shutil
|
||||
|
||||
if shutil.which(cmd):
|
||||
# 尝试获取版本
|
||||
import subprocess
|
||||
try:
|
||||
result = subprocess.run([cmd, "--version"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=5)
|
||||
version = result.stdout.split('\n')[0] if result.stdout else "unknown"
|
||||
print_status("ok", f"{cmd} 已安装 ({version})")
|
||||
except:
|
||||
print_status("ok", f"{cmd} 已安装")
|
||||
return True
|
||||
else:
|
||||
print_status("error", f"{cmd} 未找到")
|
||||
return False
|
||||
|
||||
def check_mcp_config():
|
||||
"""检查 MCP 配置"""
|
||||
config_path = Path.home() / ".claude" / "config.json"
|
||||
|
||||
if not config_path.exists():
|
||||
print_status("error", f"未找到 Claude 配置文件: {config_path}")
|
||||
return False
|
||||
|
||||
try:
|
||||
with open(config_path, 'r') as f:
|
||||
config = json.load(f)
|
||||
|
||||
if "mcpServers" in config and "weixin-reader" in config["mcpServers"]:
|
||||
print_status("ok", "MCP 服务器已配置")
|
||||
return True
|
||||
else:
|
||||
print_status("warning", "MCP 服务器未配置(需要手动添加)")
|
||||
return False
|
||||
except Exception as e:
|
||||
print_status("error", f"无法读取配置文件: {e}")
|
||||
return False
|
||||
|
||||
def check_mcp_server():
|
||||
"""检查 MCP 服务器文件"""
|
||||
skill_dir = Path(__file__).parent
|
||||
mcp_server = skill_dir / "wexin-read-mcp" / "src" / "server.py"
|
||||
|
||||
if mcp_server.exists():
|
||||
print_status("ok", f"MCP 服务器文件存在")
|
||||
return True
|
||||
else:
|
||||
print_status("error", f"MCP 服务器文件不存在: {mcp_server}")
|
||||
return False
|
||||
|
||||
def check_notebooklm_auth():
|
||||
"""检查 NotebookLM 认证状态"""
|
||||
import subprocess
|
||||
|
||||
try:
|
||||
result = subprocess.run(["notebooklm", "list"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10)
|
||||
|
||||
if result.returncode == 0:
|
||||
print_status("ok", "NotebookLM 已认证")
|
||||
return True
|
||||
else:
|
||||
print_status("warning", "NotebookLM 未认证(请运行 notebooklm login)")
|
||||
return False
|
||||
except subprocess.TimeoutExpired:
|
||||
print_status("warning", "NotebookLM 认证检查超时")
|
||||
return False
|
||||
except Exception as e:
|
||||
print_status("error", f"NotebookLM 认证检查失败: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
print(f"\n{BLUE}========================================{NC}")
|
||||
print(f"{BLUE} 环境检查 - anything-to-notebooklm{NC}")
|
||||
print(f"{BLUE}========================================{NC}\n")
|
||||
|
||||
results = []
|
||||
|
||||
# 1. Python 版本
|
||||
print(f"{YELLOW}[1/8] Python 版本{NC}")
|
||||
results.append(check_python_version())
|
||||
print()
|
||||
|
||||
# 2. 核心依赖
|
||||
print(f"{YELLOW}[2/9] 核心 Python 依赖{NC}")
|
||||
results.append(check_module("fastmcp"))
|
||||
results.append(check_module("playwright"))
|
||||
results.append(check_module("beautifulsoup4", "bs4"))
|
||||
results.append(check_module("lxml"))
|
||||
results.append(check_module("markitdown"))
|
||||
print()
|
||||
|
||||
# 3. Playwright 浏览器
|
||||
print(f"{YELLOW}[3/9] Playwright 可导入性{NC}")
|
||||
try:
|
||||
from playwright.sync_api import sync_playwright
|
||||
print_status("ok", "Playwright 可以正常导入")
|
||||
results.append(True)
|
||||
except Exception as e:
|
||||
print_status("error", f"Playwright 导入失败: {e}")
|
||||
results.append(False)
|
||||
print()
|
||||
|
||||
# 4. NotebookLM CLI
|
||||
print(f"{YELLOW}[4/9] NotebookLM CLI{NC}")
|
||||
results.append(check_command("notebooklm"))
|
||||
print()
|
||||
|
||||
# 5. markitdown CLI
|
||||
print(f"{YELLOW}[5/9] markitdown CLI{NC}")
|
||||
results.append(check_command("markitdown"))
|
||||
print()
|
||||
|
||||
# 6. Git 命令
|
||||
print(f"{YELLOW}[6/9] Git 命令{NC}")
|
||||
results.append(check_command("git"))
|
||||
print()
|
||||
|
||||
# 7. MCP 服务器文件
|
||||
print(f"{YELLOW}[7/9] MCP 服务器文件{NC}")
|
||||
results.append(check_mcp_server())
|
||||
print()
|
||||
|
||||
# 8. MCP 配置
|
||||
print(f"{YELLOW}[8/9] MCP 配置{NC}")
|
||||
results.append(check_mcp_config())
|
||||
print()
|
||||
|
||||
# 9. NotebookLM 认证
|
||||
print(f"{YELLOW}[9/9] NotebookLM 认证{NC}")
|
||||
results.append(check_notebooklm_auth())
|
||||
print()
|
||||
|
||||
# 总结
|
||||
print(f"{BLUE}========================================{NC}")
|
||||
passed = sum(results)
|
||||
total = len(results)
|
||||
|
||||
if passed == total:
|
||||
print(f"{GREEN}✅ 所有检查通过 ({passed}/{total})!环境配置完整。{NC}")
|
||||
elif passed >= total * 0.8:
|
||||
print(f"{YELLOW}⚠️ 大部分检查通过 ({passed}/{total}),但有些问题需要修复。{NC}")
|
||||
else:
|
||||
print(f"{RED}❌ 检查失败 ({passed}/{total}),请运行 install.sh 重新安装。{NC}")
|
||||
|
||||
print(f"{BLUE}========================================{NC}\n")
|
||||
|
||||
if passed < total:
|
||||
print("💡 修复建议:")
|
||||
print(" 1. 运行安装脚本:./install.sh")
|
||||
print(" 2. 配置 MCP:编辑 ~/.claude/config.json")
|
||||
print(" 3. 认证 NotebookLM:notebooklm login")
|
||||
print()
|
||||
|
||||
sys.exit(0 if passed == total else 1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
167
axhub-make/skills/third-party/anything-to-notebooklm/install.sh
vendored
Normal file
167
axhub-make/skills/third-party/anything-to-notebooklm/install.sh
vendored
Normal file
@@ -0,0 +1,167 @@
|
||||
#!/bin/bash
|
||||
|
||||
# anything-to-notebooklm Skill Installer
|
||||
# 自动安装所有依赖并配置环境
|
||||
|
||||
set -e # 遇到错误立即退出
|
||||
|
||||
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SKILL_NAME="anything-to-notebooklm"
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} 多源内容 → NotebookLM 安装程序${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 1. 检查 Python 版本
|
||||
echo -e "${YELLOW}[1/6] 检查 Python 环境...${NC}"
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo -e "${RED}❌ 未找到 Python3,请先安装 Python 3.9+${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_VERSION=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
|
||||
REQUIRED_VERSION="3.9"
|
||||
|
||||
if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$PYTHON_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then
|
||||
echo -e "${RED}❌ Python 版本过低(当前 $PYTHON_VERSION,需要 3.9+)${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ Python $PYTHON_VERSION${NC}"
|
||||
|
||||
# 2. 检查并克隆 wexin-read-mcp
|
||||
echo ""
|
||||
echo -e "${YELLOW}[2/6] 安装 MCP 服务器...${NC}"
|
||||
MCP_DIR="$SKILL_DIR/wexin-read-mcp"
|
||||
|
||||
if [ -d "$MCP_DIR" ]; then
|
||||
echo -e "${GREEN}✅ MCP 服务器已存在${NC}"
|
||||
else
|
||||
echo "正在克隆 wexin-read-mcp..."
|
||||
git clone https://github.com/Bwkyd/wexin-read-mcp.git "$MCP_DIR"
|
||||
echo -e "${GREEN}✅ MCP 服务器克隆完成${NC}"
|
||||
fi
|
||||
|
||||
# 3. 安装 Python 依赖
|
||||
echo ""
|
||||
echo -e "${YELLOW}[3/6] 安装 Python 依赖...${NC}"
|
||||
|
||||
# 安装 MCP 服务器依赖
|
||||
if [ -f "$MCP_DIR/requirements.txt" ]; then
|
||||
echo "安装 MCP 依赖..."
|
||||
pip3 install -r "$MCP_DIR/requirements.txt" -q
|
||||
echo -e "${GREEN}✅ MCP 依赖安装完成${NC}"
|
||||
fi
|
||||
|
||||
# 安装 Skill 依赖(包括 markitdown)
|
||||
if [ -f "$SKILL_DIR/requirements.txt" ]; then
|
||||
echo "安装 Skill 依赖(包括 markitdown 文件转换工具)..."
|
||||
pip3 install -r "$SKILL_DIR/requirements.txt" -q
|
||||
echo -e "${GREEN}✅ Skill 依赖安装完成${NC}"
|
||||
echo -e "${GREEN}✅ markitdown 已安装(支持 15+ 文件格式转换)${NC}"
|
||||
fi
|
||||
|
||||
# 4. 安装 Playwright 浏览器
|
||||
echo ""
|
||||
echo -e "${YELLOW}[4/6] 安装 Playwright 浏览器...${NC}"
|
||||
echo "这可能需要几分钟,请耐心等待..."
|
||||
|
||||
if python3 -c "from playwright.sync_api import sync_playwright" 2>/dev/null; then
|
||||
playwright install chromium
|
||||
echo -e "${GREEN}✅ Playwright 浏览器安装完成${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Playwright 导入失败,请检查安装${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5. 检查并安装 notebooklm
|
||||
echo ""
|
||||
echo -e "${YELLOW}[5/6] 检查 NotebookLM CLI...${NC}"
|
||||
|
||||
if command -v notebooklm &> /dev/null; then
|
||||
NOTEBOOKLM_VERSION=$(notebooklm --version 2>/dev/null || echo "unknown")
|
||||
echo -e "${GREEN}✅ NotebookLM CLI 已安装 ($NOTEBOOKLM_VERSION)${NC}"
|
||||
else
|
||||
echo "正在安装 notebooklm-py..."
|
||||
pip3 install git+https://github.com/teng-lin/notebooklm-py.git -q
|
||||
|
||||
if command -v notebooklm &> /dev/null; then
|
||||
echo -e "${GREEN}✅ NotebookLM CLI 安装完成${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ NotebookLM CLI 安装失败${NC}"
|
||||
echo "请手动安装:pip3 install git+https://github.com/teng-lin/notebooklm-py.git"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 6. 配置指导
|
||||
echo ""
|
||||
echo -e "${YELLOW}[6/6] 配置指导${NC}"
|
||||
echo ""
|
||||
|
||||
CLAUDE_CONFIG="$HOME/.claude/config.json"
|
||||
CONFIG_SNIPPET=" \"weixin-reader\": {
|
||||
\"command\": \"python\",
|
||||
\"args\": [
|
||||
\"$MCP_DIR/src/server.py\"
|
||||
]
|
||||
}"
|
||||
|
||||
echo -e "${BLUE}📝 下一步:配置 MCP 服务器${NC}"
|
||||
echo ""
|
||||
echo "请编辑 $CLAUDE_CONFIG"
|
||||
echo ""
|
||||
echo "在 \"mcpServers\" 中添加:"
|
||||
echo -e "${GREEN}$CONFIG_SNIPPET${NC}"
|
||||
echo ""
|
||||
echo "完整配置示例:"
|
||||
echo -e "${GREEN}{
|
||||
\"primaryApiKey\": \"any\",
|
||||
\"mcpServers\": {
|
||||
$CONFIG_SNIPPET
|
||||
}
|
||||
}${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查是否已配置
|
||||
if [ -f "$CLAUDE_CONFIG" ]; then
|
||||
if grep -q "weixin-reader" "$CLAUDE_CONFIG"; then
|
||||
echo -e "${GREEN}✅ 检测到已有 weixin-reader 配置${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 未检测到 weixin-reader 配置,请手动添加${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 未找到 Claude 配置文件,请手动创建${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}🔐 NotebookLM 认证${NC}"
|
||||
echo ""
|
||||
echo "首次使用前,请运行:"
|
||||
echo -e "${GREEN} notebooklm login${NC}"
|
||||
echo -e "${GREEN} notebooklm list # 验证认证成功${NC}"
|
||||
echo ""
|
||||
|
||||
# 最终检查
|
||||
echo ""
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${GREEN}✅ 安装完成!${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
echo "📦 安装位置:$SKILL_DIR"
|
||||
echo ""
|
||||
echo "⚠️ 重要提醒:"
|
||||
echo " 1. 配置 MCP 服务器后需要重启 Claude Code"
|
||||
echo " 2. 首次使用前运行 notebooklm login"
|
||||
echo ""
|
||||
echo "🚀 使用示例:"
|
||||
echo " 把这篇文章生成播客 https://mp.weixin.qq.com/s/xxx"
|
||||
echo ""
|
||||
71
axhub-make/skills/third-party/anything-to-notebooklm/package.sh
vendored
Normal file
71
axhub-make/skills/third-party/anything-to-notebooklm/package.sh
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 打包 anything-to-notebooklm skill 用于分享
|
||||
# 生成一个不包含大文件的精简版 tar.gz
|
||||
|
||||
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SKILL_NAME="anything-to-notebooklm"
|
||||
OUTPUT_DIR="${1:-$HOME/Desktop}"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
OUTPUT_FILE="$OUTPUT_DIR/${SKILL_NAME}_${TIMESTAMP}.tar.gz"
|
||||
|
||||
# 颜色
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} 打包 ${SKILL_NAME} Skill${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 要打包的文件列表
|
||||
FILES=(
|
||||
"SKILL.md"
|
||||
"README.md"
|
||||
"install.sh"
|
||||
"check_env.py"
|
||||
"requirements.txt"
|
||||
".gitignore"
|
||||
)
|
||||
|
||||
# 创建临时目录
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
TEMP_SKILL="$TEMP_DIR/$SKILL_NAME"
|
||||
mkdir -p "$TEMP_SKILL"
|
||||
|
||||
echo "📦 正在打包文件..."
|
||||
|
||||
# 复制文件
|
||||
for file in "${FILES[@]}"; do
|
||||
if [ -f "$SKILL_DIR/$file" ]; then
|
||||
cp "$SKILL_DIR/$file" "$TEMP_SKILL/"
|
||||
echo " ✓ $file"
|
||||
fi
|
||||
done
|
||||
|
||||
# 创建 tar.gz
|
||||
cd "$TEMP_DIR"
|
||||
tar -czf "$OUTPUT_FILE" "$SKILL_NAME"
|
||||
|
||||
# 清理
|
||||
rm -rf "$TEMP_DIR"
|
||||
|
||||
# 显示结果
|
||||
FILE_SIZE=$(du -h "$OUTPUT_FILE" | cut -f1)
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ 打包完成!${NC}"
|
||||
echo ""
|
||||
echo "📦 文件:$OUTPUT_FILE"
|
||||
echo "📊 大小:$FILE_SIZE"
|
||||
echo ""
|
||||
echo "📤 分享说明:"
|
||||
echo " 用户收到文件后,执行:"
|
||||
echo " cd ~/.claude/skills/"
|
||||
echo " tar -xzf ${SKILL_NAME}_${TIMESTAMP}.tar.gz"
|
||||
echo " cd ${SKILL_NAME}"
|
||||
echo " ./install.sh"
|
||||
echo ""
|
||||
echo "💡 注意:wexin-read-mcp 会在安装时自动克隆,无需打包"
|
||||
echo ""
|
||||
11
axhub-make/skills/third-party/anything-to-notebooklm/requirements.txt
vendored
Normal file
11
axhub-make/skills/third-party/anything-to-notebooklm/requirements.txt
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# Core MCP dependencies
|
||||
fastmcp>=0.1.0
|
||||
playwright>=1.40.0
|
||||
beautifulsoup4>=4.12.0
|
||||
lxml>=4.9.0
|
||||
|
||||
# File format conversion
|
||||
markitdown[all]>=0.0.1
|
||||
|
||||
# NotebookLM (will be installed from PyPI if available, or from git)
|
||||
# notebooklm-py
|
||||
Reference in New Issue
Block a user