Repository navigation
v1.0.2
DDtoolkit v1.0.2
个人向 VTuber 帖子 / 账号证据归档工具 —— 定时抓取 B 站与微博动态、账号统计并归档到本地 SQLite,桌面端浏览与管理。
从 v1.0.1 到 v1.0.2 共 34 篇 devlog(085–118),主线是五件事:
① 未登录也能用起来(检索 / 账号信息 / 粉丝数 / 直播状态 / 第三方历史可用,
内容抓取如实标注"需要登录");② 顶栏与设置窗口的重做(状态岛 + 两栏设置 +
主题偏好);③ 关闭窗口 = 隐藏到系统托盘(后台抓取照常、界面停止渲染与轮询);
④ 数据目录看得见、也搬得走(占用体检 + 图片缓存上限 + 库维护 + 一键迁移到别的盘);
⑤ 应用内更新(设置里检查 → 下载 → 重启安装,安装包带签名校验)。
另有若干界面打磨与一处功能下线(空闲语录轮播,等库中真有条目再上线)。
数据库无迁移(仍是 f004),覆盖安装即可。
🔓 未登录可用范围(不再"必须登录才能用")
实测澄清了一条长期口径:匿名也能拿到 B 站的签名密钥(nav 接口本身不要求登录),
所以下面这些未登录就能用:本地浏览与归档、候选检索、B 站检索与 uid 直查、
账号信息与粉丝数、直播状态、第三方历史(日历/弹幕索引)。
内容抓取(投稿 / 动态)与微博必须登录 —— 匿名请求会被平台按 IP 拦(-412),
所以应用改成未登录时不发这类请求,并在界面上只标不藏(功能照常可见,
点下去说明"需要登录",顶栏给一个「未登录 · N 项受限」的入口,说明窗先列"现在能做什么")。
✨ 顶栏:一个状态岛收编所有信息
原来顶栏是"三套并存"(轮询胶囊 + 瞬时消息覆写 + 完成报告弹窗),风控冷却只在日志里。现在统一成一个控件:
- 六类信息按优先级
告警 > 进行中 > 已完成 > 提示汇总:任务进度、第三方同步、
完成报告、登录失效、风控冷却(带剩余秒数,到点自动消失)、操作结果; - 完成报告不再自动弹窗 —— 变成通知里一条常驻条目,点「查看详情」才打开原来的对话框;
- 自动节拍不占顶栏(动态流轮询这类"没有终局"的任务不再刷顶栏),这条从散落判断
变成了具名规则 + 反向用例; - 面板是浮层(不挤动右栏),Esc 收起,条目可点。
⚙️ 设置:齿轮 → 两栏设置窗口
- IconRail 底端齿轮打开独立设置窗口(左分类 + 右内容):外观 / 抓取设置 / 数据源 / 关于;
- 抓取设置按用途分小组(风控与节流、开播信息抓取、定期动态轮询、每日定时任务、收录首屏),
只把关键项摆在明面上;调优类的收进页尾「高级设置(默认收起)」(19 项一个没少,只是不挡路); - 排版与控件也重做了一遍:字段名加粗放大、说明与行距拉开层次;数字项改成左减右加的整行
步进条(键盘照样能直接输入,到上下界箭头自动置灰);开关改成不带外框的浮动滑块
(与项目其它浮片按钮同一套质感); - 抓取参数改完下一轮生效、不用重启(账号间隔、风控冷却、开播状态刷新间隔、动态更新最快间隔、
账号信息刷新周期、收录首屏页数、第三方源开关…),每项都写明取值范围与生效时机,
越界会被后端拒绝并给出中文原因; - 「关于」页如实列出"哪些不能改、为什么"(数据目录、端口、迁移版本、日志等 ——
它们改了要重启,放进"可保存"的界面就是骗人); - 主题:浅色 / 跟随系统(立即生效)。深色主题尚未实现,界面照实说明,
不做一个"点了没反应"的开关。
📌 直播预约进日历
动态里的直播预约会落到直播日历:有预约的日子格子上出现「预约」徽章、时刻与标题
(有场次时压成一行小字),悬停浮层里单独列出预约条目与预约人数。
🖥️ 关闭窗口 = 隐藏到系统托盘(后台照抓)
- 点 ✕ 不再退出:窗口隐藏到系统托盘,后台抓取照常进行,界面停止刷新与轮询
(这就是"不用渲染前端"的实处); - 首次点 ✕ 会问一次(最小化到托盘 / 直接退出)+「记住我的选择」,之后按选择执行;
想改可以到「设置 → 外观 → 关闭窗口时」; - 隐藏 10 分钟后自动释放界面内存(销毁 WebView),唤回时自动恢复到你离开的位置与视图;
- 托盘:左键单击唤回,右键菜单「显示主界面 / 后台运行中 / 退出」;
- 再点一次程序图标 = 唤回已隐藏的窗口(不会开出第二个实例)。
- 后台照抓是刻意的:隐藏期间后端保持尽可能快的抓取节奏(不降频)——这是为后续
「把消息推送到其他平台」留的前提; - 托盘挂起时的资源占用也压过一轮:深休眠看门狗不再每秒唤醒(离 10 分钟还早时 30 秒看一眼),
分词词典不再开机预热(省约 56MB 常驻内存,代价是首次用词云多等约 0.7 秒)。
🗂️ 数据目录:看得见占用、也能搬到别的盘
- 「设置 → 关于」新增存储占用面板:数据库 / 图片缓存(带上限)/ 日志 / 合计 / 磁盘剩余,
可用空间偏紧时挂一枚「空间偏紧」徽章;手工留下的旧备份也会单独提示; - 两个当场能动手的按钮:「清理图片缓存」(全清,缓存可再生)·「整理数据库」
(回收 WAL + 把空闲页还给系统); - 图片缓存现在有容量上限(默认 300MB,按"最久没用"淘汰)——以前只管时间不管体积,
它是数据目录里涨得最快的一块; - 数据目录可以搬到其他盘:「关于 → 迁移到其他盘…」选个目录即可。迁移是可回滚的:
复制 → 逐文件校验 → 切换 → 用新目录启动后端并探活;任何一步失败都会自动回退到原目录,
而且旧目录全程不动(成功后由你决定要不要删)。迁移过程写在<数据目录>\logs\shell.log里; - 启动时的数据目录优先级:环境变量
DDTOOLKIT_DATA_DIR> 应用内迁移记录 > 默认位置。
用环境变量指定即视为"便携/自定义安装",此时不提供应用内迁移入口(整个文件夹搬走即可)。
🔄 应用内更新(不用再手动下载)
- 「设置 → 关于 → 应用更新」有**「检查更新」:会显示最新版本、更新说明,并支持
下载完直接重启安装;启动后也会静默检查一次**,发现新版本时顶栏给一条提示
(不会自动下载,更新与否由你决定); - 更新包有签名校验:签名不对的包不会被安装;
- 连不上 GitHub 时会给明确原因 + 「打开发布页」手动下载;如果检测到本机有代理在监听,
会自动改用该代理重试一次; - 便携版不自动覆盖:只提示有新版本并打开下载页,由你解压替换整个目录。
🐛 修掉两个实测问题(发布前由你实测发现)
- 选了「最小化到托盘」后,托盘右键「退出」退不掉 —— 根因是托盘退出只发了一个事件等
前端确认,而前端并没有监听它(深休眠唤醒后更收不到)。现在托盘退出不再依赖前端:
没任务在跑就直接退出(并清理后端子进程),只有真有抓取任务在跑时才唤回窗口让你确认
(退出=中断本轮 / 最小化到托盘=让它跑完)。 - 设置窗口的排版与文案 —— 选项胶囊不再被挤成竖排单字(说明一行、选项一整行);
文案里误写的 Markdown 标记(**粗体**)已清掉,并加了一条用例专门扫这类文案。
🎨 界面打磨
- 顶栏标题加粗;列表页筛选钮的文字真正居中且与左栏那枚样式统一;
- 展示页药丸的平台徽标「+」不 hover 时不占位(徽章紧贴下方分割线,hover 才展开);
- 设置窗口改版为左侧分类 + 右侧内容(导航由后端的参数分组自动生成)。
🔧 工程与验证(维护者)
- 一键发布
scripts/release.py:预检 → 版本号六处同步 → 门禁 → 构建 → 产物校验 →
提交/tag → 推送 → Release → 报告,失败即停、可续跑; - 常驻上游冒烟(含冷进程 + 空数据目录)、真实产物 fixtures、文档漂移门禁;
- UI 探针扩到 14 条(含"隐藏后是否真的停表""迁移入口只在桌面端出现"这类行为断言);
- 后端用例 461 条 / 前端单测 260 条 / 桌面壳
cargo test27 条。
📦 资产
DDtoolkit_1.0.2_x64-setup.exe— Windows NSIS 安装包(用户级安装)DDtoolkit-portable-win64.zip— 便携版(解压即用,含后端 onedir)DDtoolkit_1.0.2_x64-setup.nsis.zip+latest.json— 应用内更新的载体与清单
(签名已内嵌在latest.json里;手工下载请用上面两项)
数据目录:安装版默认 %APPDATA%\com.ddtoolkit.app;设了 DDTOOLKIT_DATA_DIR 就用它
(便携/自定义安装),也可以在「设置 → 关于」里迁移到其他盘。
可直接覆盖安装(后端目录层级自 v0.9.2 起已修正)。
⚠️ 升级说明
- 数据库无迁移:仍是 f004,首次启动不需要额外等待;
- 关闭窗口的行为变了:以前点 ✕ 是退出,现在默认问一次(可记住为"最小化到托盘")。
想让它恢复"直接退出",在设置 → 外观里改成「直接退出」即可;
托盘右键「退出」任何时候都能退出应用(有抓取任务在跑时会先问一句); - 空闲语录轮播暂时下线:顶栏空置时只显示「数据服务运行中」,不再轮换那几句占位语录
(等库中有真实条目——弹幕热词 / 名场面 / 倒计时——再接回来); - 内容抓取与微博仍需登录态;未登录时相关按钮会说明原因,而不是静默失败。
🔧 技术栈
- 后端:Python 3.14 + FastAPI + SQLAlchemy 2.0 + SQLite(WAL) + APScheduler + Alembic(迁移链 f004)
- 前端:Vite + React 18 + TypeScript + Tailwind v4 + ECharts 6 + Radix
- 桌面壳:Tauri v2(托盘 + 拉起后端 + 注入空闲端口 + Job Object 进程看门狗)
⚖️ 许可
MIT License(见 LICENSE)。字体:阿里妈妈方圆体(官方许可免费商用 + 允许嵌入)。