Are you an LLM? You can read better optimized documentation at /misc/architecture.md for this page in Markdown format
整体架构
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端框架 | Nuxt 3 + Vue 3 | 服务端渲染 + 单页应用 |
| UI 样式 | Tailwind CSS | 原子化 CSS |
| 数据表格 | AG-Grid | 文章列表展示 |
| 本地存储 | IndexedDB (Dexie) | 文章数据、HTML 内容、元数据缓存 |
| 后端服务 | Nitro | Nuxt 的服务端引擎 |
| 数据持久化 | KV Storage | 登录会话等服务端数据 |
系统架构
┌─────────────────────────────────────────────────┐
│ 浏览器端 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ Vue 组件 │ │ Composables│ │ IndexedDB │ │
│ │ (页面/UI) │→ │ (业务逻辑) │→ │ (本地数据缓存) │ │
│ └──────────┘ └─────┬────┘ └───────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ │ Downloader/Exporter │ │
│ │ (下载与导出引擎) │ │
│ └───────────┬───────────┘ │
└──────────────────────┼───────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌────────────┐ ┌─────────┐ ┌──────────┐
│ Nitro 服务端│ │代理节点池│ │微信公众号API│
│ (登录/搜索) │ │(CF Workers)│ │ │
└────────────┘ └─────────┘ └──────────┘1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
核心模块
登录认证
用户通过微信扫码登录公众号后台,服务端获取并存储 Cookie 和 Token,生成 auth-key 返回客户端。后续所有对微信接口的请求都通过服务端代理,自动注入认证信息。
文章获取
通过公众号后台的文章搜索接口分页拉取文章列表(每页最多 20 条),文章链接和基本信息存储在浏览器的 IndexedDB 中。
内容下载
文章 HTML 内容通过代理节点池下载。ProxyManager 管理多个代理节点,采用最少失败 + 最久未用的策略选择最优节点,单节点连续失败 5 次后自动冷却 10 分钟。
数据导出
根据用户选择的格式,从 IndexedDB 中读取缓存数据进行转换和打包:
- Excel/JSON:直接从缓存数据生成
- HTML:解析文章中的图片和样式表,通过代理下载后替换 URL,打包为 ZIP
- Markdown/TXT/Word:将 HTML 通过 TurndownService 转换后输出
Credentials 系统
阅读量和评论数据需要微信用户身份才能获取。通过 wxdown-service 程序在本地拦截微信客户端的请求,提取认证参数并同步到网站。Credentials 有效期约 25 分钟。
数据流向
微信公众号后台 ──→ Nitro 服务端 ──→ 浏览器(文章列表)
│
微信文章页面 ──→ 代理节点 ──→ 浏览器(文章内容)──→ IndexedDB
│
导出引擎 ──→ 本地文件1
2
3
4
5
2
3
4
5
部署架构
| 部署方式 | 服务端 | 代理节点 | 数据存储 |
|---|---|---|---|
| 公共网站 | Cloudflare Pages | Cloudflare Workers | 浏览器 IndexedDB + Cloudflare KV |
| Docker | 本地容器 | 自建 Workers | 浏览器 IndexedDB + 文件系统 KV |
| Vercel | Vercel Functions | 自建 Workers | 浏览器 IndexedDB + Vercel KV |
