# weibo-chat-auto **Repository Path**: jon-bruce/weibo-chat-auto ## Basic Information - **Project Name**: weibo-chat-auto - **Description**: 自动抓取微博网页聊天群的历史消息,支持多群、定时运行、按天导出和本地可视化查看。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-31 - **Last Updated**: 2026-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Weibo Group Chat Archiver — 自动归档微博群聊消息,原生桌面应用 + AI 摘要与问答

Tauri Node Puppeteer Platform License Stars

快速开始 · 功能 · AI 功能 · 截图

--- 自动归档微博网页聊天群的历史消息 — **原生桌面应用**(应用内扫码登录,无需手动配 Cookie)或本地查看器,支持多群、定时归档、按天导出,内置 AI 每日摘要与 Agentic 问答。 --- ## 🎬 演示 ![演示](docs/demo.gif) > 演示中的用户名、群名与头像均为脱敏示例。 --- ## ✨ 功能 | 归档 | 查看器 | | --- | --- | | 🗂 多群支持(`config.json` 配置) | 🎨 Linear 风格深色界面 | | 🖥 原生桌面应用(应用内扫码登录) | 🔀 多群切换 | | 🍪 Cookie 自动保持登录 | 📅 日历选择 + 60s 自动刷新 | | 📡 API 分页拉取全部历史 | 🔥 时段热力图 / 用户 / 媒体筛选 | | ➕ 增量归档(断点续传) | 🔍 搜索就地高亮 + n/N 跳转(保留上下文) | | 📆 按日期导出 JSON | 📊 统计面板(日活 / 排行 / 时段 / 词频) | | ⏰ 定时任务 + 手动 Sync Now | 🧹 红包 / 噪声消息过滤 | | | 🎯 上下文聚焦面板(追一条消息的来龙去脉) | | | 💬 引用可跳转、标注原作者;@提及高亮 | | | 🤖 AI 每日摘要 + Agentic Q&A 问答 | | | 🖼 图片代理(绕过防盗链)、视频链接、分享卡片 | --- ## 🚀 快速开始 ```bash git clone https://github.com/alloevil/weibo-chat-auto.git cd weibo-chat-auto ``` | 方式 | 命令 | 说明 | |------|------|------| | **桌面应用** | `./run-desktop.sh` | 原生 app,应用内扫码登录,无需手动配 Cookie | | **网页版** | `./setup.sh` | 浏览器查看器 http://localhost:3456 | 首次运行会自动安装所需依赖(Rust/Bun/npm)。 ### 🖥 桌面应用(macOS) ```bash ./run-desktop.sh ``` 一条命令完成:检测环境 → 安装依赖 → 编译 → 启动。打开后点击 🔑 登录,扫码即可开始归档。 ### 🌐 网页版 ```bash ./setup.sh # 首次:安装 + 配置 + 扫码登录 npm run view # 之后:启动查看器 ```
桌面应用架构 - **Tauri v2** 原生窗口 + WKWebView - **Sidecar**:Bun 编译 `viewer-server.js` 为 ~60MB 独立二进制,app 启动时自动拉起 - **登录**:Rust 打开 WebView → 扫码 → `cookies_for_url()` 提取 HttpOnly Cookie → 自动保存 - **IPC**:WKWebView 不注入 Tauri IPC,改用 HTTP 信号中转 - **图片**:微博 CDN 检查 Referer,本地 `/api/sinaimg?url=` 代理绕过
手动安装(分步说明) #### 1️⃣ 安装依赖 ```bash npm install ``` #### 2️⃣ 保存 Cookie ```bash npm run save-cookies ``` 会弹出一个**独立浏览器窗口**(与日常 Chrome 隔离),打开微博聊天页:用微博 App 扫码 → 手机确认 → 跳转到聊天列表后 Cookie 自动写入 `cookies.json`。 #### 3️⃣ 配置群聊 复制模板并填入群名(须与微博中**完全一致**): ```bash cp config.example.json config.json ``` ```json { "chromePath": "", "groups": ["群名称A", "群名称B"] } ``` > `chromePath` 留空即自动探测系统中的 Chrome;仅在 Chrome 装在非默认位置时才需手动填写。 #### 4️⃣ 运行 & 查看 ```bash npm run archive # 首次拉取最近 7 天,之后增量更新 npm run view # 启动查看器 → http://localhost:3456 ```
--- ## 🔁 日常使用 平时保持查看器开着即可: ```bash npm run view ``` 打开 http://localhost:3456 → 点 **Sync Now** 同步最新消息(页面每 60s 自动刷新)。
读记录小技巧 - **🎯 上下文**:每条消息头部的链接,点开右侧面板看它的来龙去脉(被回复的原消息 + 前后邻域 + 后续回复) - **引用跳转**:引用气泡标出原作者,点击可跳到原消息并高亮 - **搜索定位**:搜索不隐藏其它消息,就地高亮匹配,用 `n` / `N` 在结果间跳转 - **未读分隔线**:再次打开时,「以下为新消息」标出上次离开后的增量
Cookie 维护 Cookie 有时效(约几天~两周),但**归档器每次成功运行都会自动续期**: | 方式 | 效果 | | --- | --- | | ✅ 保持定时任务运行 | Cookie 自动续期,基本不会过期(推荐) | | 🖱 每天点一次 Sync Now | 手动保活 | | 🔄 `npm run save-cookies` | 已过期时重新扫码(不影响已归档数据) |
--- ## 🤖 AI 功能 查看器内置两个 AI 功能:**每日摘要** 和 **Agentic Q&A 问答**。需配置 OpenAI 兼容的 API。 ### 配置 页面右上角 ⚙️ → 填写: | 字段 | 说明 | |------|------| | Base URL | API 地址(如 `https://api.deepseek.com/v1`) | | API Key | 密钥 | | Model | 模型名(如 `deepseek-chat`) | | Vision | 摘要时是否分析图片 | 配置保存到本地 `ai-config.json`(不会提交到 git)。 ### Q&A 问答 在工具栏的问答输入框中提问,支持自然语言时间("最近"、"昨天"、"上周")和人名筛选。 **Agent 模式**(默认):LLM 迭代搜索,自主决定关键词和搜索范围,多轮查找直到信息充分。
技术方案 采用 Agentic Search 模式,loop 机制参考: - [Hermes Agent](https://github.com/NousResearch/hermes-agent) — IterationBudget + grace call - [Pi-Multi-Agent](https://github.com/jwangkun/Pi-Multi-Agent) — state machine + retry with backoff + timeout - LedgerAgent 论文 — 结构化状态累积 详见 [`docs/agent-qa.md`](docs/agent-qa.md) **Benchmark (Agent vs Legacy):** | 指标 | Agent | Legacy | |------|-------|--------| | 平均延迟 | 20.5s | 10.1s | | 成功率 | 100% | 100% | | 日期推理 | 正确 | 偶尔错误 | | 搜索覆盖 | 多轮扩展 | 单次 | | 答案质量 | 高 | 中 |
--- ## 📸 预览截图
点击展开截图 **消息视图** — 时段热力图、引用气泡(标原作者)、@提及高亮、每条「🎯 上下文」入口 ![消息视图](docs/screenshot-messages.png) **上下文聚焦** — 点 🎯 弹出右侧面板:被回复的原消息 + 前后邻域 + 后续回复 ![上下文面板](docs/screenshot-context.png) **统计面板** — 每日消息量、活跃用户排行 ![统计面板](docs/screenshot-stats.png) > 截图中的用户名、群名与头像均为脱敏示例。
---
✅ 前置要求 | 必需 | 说明 | | --- | --- | | 🖥 **macOS / Linux / WSL** | 归档与查看器跨平台运行;定时任务自动安装仅 macOS(Linux 见 cron 说明) | | 🟢 **Node.js 18+** | [brew install node](https://brew.sh)(macOS)/ `apt install nodejs`(Linux)/ [nodejs.org](https://nodejs.org) | | 🌐 **Google Chrome** | 归档器用它登录并抓取消息;路径自动探测 | | 📱 **微博账号 + 手机 App** | 首次需用 App 扫码登录网页版 | | 🦀 **Rust + Bun** | 仅桌面应用需要;`./run-desktop.sh` 会自动安装 | > Windows 用户请在 [WSL](https://learn.microsoft.com/windows/wsl/install) 中使用;桌面应用目前仅在 macOS 验证。
⏰ 定时自动运行 **macOS** — `./setup.sh` 安装时会询问是否启用,也可手动管理 launchd 任务: ```bash launchctl list | grep weibo # 查看状态 launchctl unload ~/Library/LaunchAgents/com.allo.weibo-chat-archive.plist # 停用 launchctl load ~/Library/LaunchAgents/com.allo.weibo-chat-archive.plist # 启用 ``` **Linux / WSL** — 用 cron(`crontab -e`),每小时归档一次: ```bash 0 * * * * cd /path/to/weibo-chat-auto && node auto-archive-simple.js >> logs/archive.log 2>&1 ``` > 启用后定时归档会顺带刷新 Cookie,基本不会过期。
📁 项目结构 ```text weibo-chat-auto/ ├── setup.sh # 网页版一键安装脚本 ├── run-desktop.sh # 桌面应用一键启动(装依赖→编译→运行) ├── config.example.json # 群聊配置模板 ├── config.json # 实际配置(不提交) ├── auto-archive-simple.js # 主归档脚本 ├── save-cookies.js # Cookie 保存工具 ├── viewer-server.js # 本地查看器服务器 ├── viewer.html # 查看器页面(单页应用,Linear 深色主题) ├── qa-agent.mjs # Agentic Q&A 模块 ├── benchmark-qa.mjs # Agent vs Legacy 对比测试 ├── src-tauri/ # Tauri v2 桌面应用(Rust) │ ├── src/lib.rs # 窗口、sidecar 拉起、应用内登录 │ └── tauri.conf.json ├── sidecar/build.mjs # 用 Bun 把 viewer-server 编译为独立二进制 ├── cookies.json # 登录凭据(不提交) ├── ai-config.json # AI 配置(不提交) ├── state/ # 归档状态(不提交) ├── output/ # 归档数据(不提交) │ └── 群名/ │ └── weibo_chat_2026-05-01.json ├── cache/images/ # 图片缓存(不提交) ├── docs/ # 文档和截图 │ └── agent-qa.md # Agent Q&A 技术方案 └── package.json ```
🧾 输出数据格式 每条消息: ```json { "id": 123456789, "from_uid": 12345, "user": "用户名", "avatar": "https://...", "timestamp": 1778000000000, "time": "2026/05/11 12:00:00", "date": "2026-05-11", "content": "消息内容", "type": 321, "pics": ["https://upload.api.weibo.com/2/mss/msget?source=...&fid=..."], "share": { "url": "http://weibo.com/...", "title": "...", "author": "...", "pics": ["https://wx1.sinaimg.cn/large/..."], "reposts": 100, "comments": 50, "likes": 200 } } ```
--- ## 🛠 故障排除
Cookie 失效(同步报错、日历不更新、日志出现"未找到群聊") ```bash npm run save-cookies ``` 扫码登录后 Cookie 自动保存。 **为什么过期?** 独立浏览器不共享日常登录态,微博 Cookie 本身有时效。长期不运行归档(如定时任务被停用)就会过期。保持定时任务运行可自动续期。
页面加载失败 检查 `config.json` 中的 `chromePath` 是否正确,并确认已安装 Google Chrome。
图片不显示 图片经本地服务器代理加载(依赖有效 Cookie),Cookie 过期后无法显示。重新 `npm run save-cookies` 即可。
--- ## 🔒 隐私声明 > **本工具仅供归档自己参与的群聊消息,请勿用于侵犯他人隐私。** - 归档数据包含群内所有成员的消息内容、用户名和头像 - 请妥善保管 `cookies.json` 和 `output/`,切勿公开分享 - 代码仅供学习交流,使用者自行承担风险 - 请遵守微博服务条款和相关法律法规 --- ## 📄 License [MIT](LICENSE) ---

⭐ 觉得有用?给个 Star 吧!