# offline-bookmark **Repository Path**: chenwh/offline-bookmark ## Basic Information - **Project Name**: offline-bookmark - **Description**: 可以独立部署的私人收藏夹,支持一键收藏来着微信,头条,知乎的文章,支持MCP方式和AI工具做集成,也可做成自定义技能加入AI助手,让AI帮你整理收藏夹。让你的收藏夹内容不再吃灰,想用的时候找不到 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-07 - **Last Updated**: 2026-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网页抓取转Markdown知识库 一个将网页内容抓取并转换为Markdown格式,自动建立索引的知识库系统。 ## 功能特性 - 🌐 **多平台支持**: 微信公众号、头条、知乎、CSDN、掘金、简书等 - 📝 **自动转换**: 智能提取网页正文,转换为Markdown格式 - 🏷️ **自动标签**: 根据内容自动生成3-5个关键词标签 - 📄 **自动摘要**: 自动生成150字以内的文章摘要 - 💾 **本地存储**: Markdown文件保存在knowledge目录,索引存储在SQLite数据库 - 🔍 **全文搜索**: 支持标题、标签、摘要、描述的全文搜索 - 📊 **统计分析**: 文章数量、来源分布、热门标签等统计信息 - 🖥️ **管理界面**: 提供可视化的索引数据管理后台 - 🤖 **MCP 支持**: 通过 Model Context Protocol 对接外部 AI 智能体(OpenClaw、Claude Desktop 等) ## 目录结构 ``` claude-01/ ├── app.js # 主应用入口 (Express Web 服务) ├── cli.js # 命令行工具 ├── mcp-server.js # MCP 服务器 (对接 AI 智能体) ├── package.json # 项目配置 ├── data/ │ └── index.db # SQLite数据库文件(自动生成) ├── knowledge/ # Markdown文件存储目录 │ └── *.md ├── public/ # 前端静态文件 │ ├── index.html # 首页 │ └── admin.html # 管理后台 ├── src/ # 核心模块 │ ├── scraper.js # 网页抓取模块 │ ├── converter.js # HTML转Markdown转换器 │ ├── database.js # 数据库管理模块 │ └── tagger.js # 自动标签生成模块 └── tests/ # 测试用例 ├── tagger.test.js ├── database.test.js ├── converter.test.js ├── scraper.test.js └── api.test.js ``` ## 安装依赖 ```bash npm install ``` ## 启动服务 ```bash npm start ``` 服务启动后: - 访问 http://localhost:3000 使用Web界面 - 访问 http://localhost:3000/admin.html 进入管理后台 ## Docker 部署 ### 方式一:使用 Docker 命令 ```bash # 构建镜像 docker build -t web-scraper-to-md . # 运行容器 docker run -d -p 3000:3000 --name web-scraper web-scraper-to-md # 查看日志 docker logs -f web-scraper # 停止容器 docker stop web-scraper # 删除容器 docker rm web-scraper ``` ### 方式二:使用 Docker Compose(推荐) ```bash # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down # 重新构建并启动 docker-compose up -d --build ``` ### 方式三:使用 npm 脚本 ```bash # 构建镜像 npm run docker:build # 运行容器 npm run docker:run # 使用 docker-compose 启动 npm run docker:compose # 停止 docker-compose npm run docker:stop ``` ### 方式四:使用构建脚本 **Linux/Mac:** ```bash ./docker-build.sh ``` **Windows:** ```bash docker-build.bat ``` ### 数据持久化 Docker Compose 默认挂载以下目录: - `./knowledge` - Markdown 文件存储 - `./data` - 数据库文件 如需自定义挂载路径,修改 `docker-compose.yml` 中的 `volumes` 配置。 ### 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | `NODE_ENV` | production | 运行环境 | | `PORT` | 3000 | 服务端口 | ## API接口 ### 1. 抓取网页并保存 **POST** `/api/scrape` 请求体: ```json { "url": "https://mp.weixin.qq.com/s/xxxxx" } ``` 响应: ```json { "success": true, "message": "网页已成功抓取并保存到知识库", "data": { "id": 1, "title": "文章标题", "url": "https://mp.weixin.qq.com/s/xxxxx", "source": "微信", "tags": ["标签1", "标签2", "标签3"], "filePath": "[微信]文章标题-1234567890.md", "createdAt": "2026-05-31T09:30:00.000Z" } } ``` ### 2. 获取文章列表 **GET** `/api/articles` 查询参数: - `page`: 页码(默认1) - `pageSize`: 每页数量(默认20) - `source`: 来源筛选(微信、头条、知乎等) - `orderBy`: 排序字段(created_at、title、source) - `order`: 排序方向(ASC、DESC) ### 3. 获取文章详情 **GET** `/api/articles/:id` ### 4. 更新文章索引 **PUT** `/api/articles/:id` 请求体: ```json { "title": "新标题", "source": "微信", "summary": "摘要内容(最多150字)", "tags": "标签1, 标签2, 标签3", "author": "作者" } ``` ### 5. 删除文章 **DELETE** `/api/articles/:id` ### 6. 批量删除文章 **DELETE** `/api/articles` 请求体: ```json { "ids": [1, 2, 3] } ``` ### 7. 搜索文章 **GET** `/api/search?q=关键词` ### 6. 获取统计信息 **GET** `/api/stats` ### 7. 获取热门标签 **GET** `/api/tags?limit=20` ## 命令行工具 (CLI) ```bash # 抓取网页 node cli.js # 列出所有文章 node cli.js --list # 查看统计信息 node cli.js --stats # 搜索文章 node cli.js --search # 删除文章 node cli.js --delete # 更新文章索引 node cli.js --update --title "新标题" --tags "tag1, tag2" # 显示帮助 node cli.js --help ``` ## MCP 服务器 (对接 AI 智能体) 本项目支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io) 协议,可以对接 OpenClaw、Claude Desktop 等外部 AI 智能体,让 AI 帮你管理知识库。 ### 启动 MCP 服务器 ```bash npm run mcp # 或 node mcp-server.js ``` ### 对接 Claude Desktop 编辑 Claude Desktop 配置文件 (`claude_desktop_config.json`): **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` ```json { "mcpServers": { "knowledge-base": { "command": "node", "args": ["D:/项目/02项目资料/2026/AI知识库/claude-01/mcp-server.js"] } } } ``` 配置后重启 Claude Desktop,即可在对话中使用知识库工具。 ### 对接 OpenClaw 在 OpenClaw 中添加 MCP 服务器配置: - **命令**: `node` - **参数**: `mcp-server.js` 的完整路径 - **传输方式**: stdio ### 可用工具 配置完成后,AI 智能体可以调用以下工具: | 工具 | 说明 | 参数 | |------|------|------| | `scrape-webpage` | 抓取网页并保存到知识库 | `url` | | `search-articles` | 全文搜索文章 | `query`, `limit?` | | `list-articles` | 列出文章 | `page?`, `pageSize?`, `source?` | | `get-article` | 获取文章详情和 Markdown 内容 | `id` | | `delete-article` | 删除文章 | `id` | | `get-stats` | 获取统计信息 | 无 | | `get-tags` | 获取热门标签 | `limit?` | ### 使用示例 配置完成后,你可以直接用自然语言让 AI 帮你操作: - "帮我抓取这篇文章:https://mp.weixin.qq.com/s/xxxxx" - "搜索关于 JavaScript 的文章" - "知识库里有多少篇文章?" - "删除 ID 为 5 的文章" ## 数据库结构 ### articles表 | 字段 | 类型 | 说明 | |------|------|------| | id | INTEGER | 主键,自增 | | title | TEXT | 文章标题 | | url | TEXT | 原文URL,唯一 | | source | TEXT | 来源(微信、头条、知乎等) | | tags | TEXT | 标签,逗号分隔 | | summary | TEXT | 摘要,最多150字 | | description | TEXT | 文章描述 | | author | TEXT | 作者 | | file_path | TEXT | Markdown文件路径 | | created_at | DATETIME | 创建时间 | | updated_at | DATETIME | 更新时间 | ## 管理后台 访问 http://localhost:3000/admin.html 进入管理后台,功能包括: - **查看列表**: 分页展示所有索引数据 - **搜索筛选**: 按关键词、来源筛选文章 - **编辑索引**: 修改标题、来源、摘要、标签等字段 - **删除索引**: 单个或批量删除索引数据 - **排序功能**: 按创建时间、更新时间、标题排序 - **批量操作**: 支持全选、批量删除 ## 使用示例 ### 使用curl抓取微信文章 ```bash curl -X POST http://localhost:3000/api/scrape \ -H "Content-Type: application/json" \ -d '{"url": "https://mp.weixin.qq.com/s/xxxxx"}' ``` ### 使用JavaScript调用 ```javascript const response = await fetch('http://localhost:3000/api/scrape', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ url: 'https://mp.weixin.qq.com/s/xxxxx' }), }); const result = await response.json(); console.log(result); ``` ## 运行测试 ```bash # 运行所有测试 npm test # 运行特定模块测试 npx jest tests/tagger.test.js npx jest tests/database.test.js npx jest tests/converter.test.js npx jest tests/scraper.test.js npx jest tests/api.test.js ``` ## 注意事项 1. **微信文章**: 部分微信文章可能需要关注公众号才能访问完整内容 2. **反爬虫**: 频繁抓取可能触发网站的反爬虫机制,建议适当控制请求频率 3. **图片处理**: 图片链接保留原始URL,需要网络访问才能查看 4. **编码问题**: 部分网页可能存在编码问题,已做基本处理 ## 扩展功能 如需增强功能,可以考虑: 1. **AI标签**: 接入AI API(如OpenAI)生成更精准的标签 2. **图片下载**: 将网络图片下载到本地 3. **定时抓取**: 支持RSS订阅,定时抓取新内容 4. **导出功能**: 支持导出为PDF、EPUB等格式 5. **浏览器插件**: 开发Chrome插件,一键抓取当前页面 ## 许可证 MIT License