开源:一稿多投工具(仅4M,支持9大平台)

功能说明

DraftDepot 稿仓是一个一稿多投工具。

使用此工具写的文章可以一键发布到9大平台:

  • 微信公众号
  • 知乎
  • CSDN
  • 开源中国
  • 博客园
  • 掘金
  • 51CTO
  • InfoQ
  • 阿里云开发者社区

(目前多为技术平台,后续将增加更多平台)

本工具仅负责把文章灌注到目标平台,不直接发布文章(想发布文章需用户手动操作,以便用户在文章发布前确认文章内容是否正确)

文章内的图像也会同步上传到目标平台(多次发布文章时,同一个图片不会重复上传)

特性描述

本工具基于 WebView2 技术研发,仅支持Windows 10/11操作系统

编译后仅一个4MB左右的可执行文件

使用成本很低。

其他特性:

  • 本地存储:数据目录 %APPDATA%\DraftDepot
  • 富文本编辑器:基于 ++roosterjs++
  • 代码块高亮:基于++shiki++
    代码着色
  • WebView2 运行时 ≥ 115.0.1901.177(缺失或过旧时程序会弹窗引导下载)
  • 图片即贴即存:粘贴或拖入的图像自动落盘到数据目录
  • 自动保存:改动后 2 秒内入库
  • 分类与文章管理:分类树支持多层嵌套,右键改名/删除

开源地址

源码仓库:https://github.com/xland/DraftDepot

下载地址:https://github.com/xland/DraftDepot/releases

关键技术

DraftDepot 为每个平台配一份脚本,这个脚本主要干三件事:

  • 认页面------等这个网站的编辑器渲染出来,找到文章标题框和正文框在哪;
  • 填内容------把文章标题和正文写入目标平台的编辑框,写进去还得让对方页面"认账"(有的是 Vue 受控组件,有的是 CodeMirror / ByteMD 编辑器,写法各不相同);
  • 搬图片------图像原本存在本机,所以脚本要把图像文件取出来、传到该网站的图床、再把地址换回去。传过的记在库里,下次不重复传。

这些看上去是三件事,背后靠这么几项技术撑着:

  • 脚本怎么进对方的页面:WebView2 提供了脚本注入技术(AddScriptToExecuteOnDocumentCreated)。这是整个方案的入口:对方页面的每一屏、每一次跳转都会自动带上我们的脚本。
  • 脚本怎么向本机要东西:脚本跑在网页里,要文章正文、要记"这张图传过了"、要给主界面发通知,都得问 C++。
  • 网页里的脚本怎么读本机文件:网页是碰不到硬盘的。这里的办法是让 C++ 回包时额外附带一个"目录句柄",脚本拿到的是 File System Access 的 FileSystemDirectoryHandle,之后就能自己按文件名取图片文件,不用每张图都来回问一次。
  • 图片为什么不重复传:每传成功一张,就把"文件名 + 平台 + 图床地址"写进 SQLite中。下次同一张图再出现(重发、或别的文章用到它),先用旧地址,省一趟上传,对方图床也不堆重复副本。
  • 图片怎么缩放:C++ 侧用系统自带的 WIC 组件缩放的,且每次都基于原图重新生成,所以缩小后再放大不会失真。

除此之外,还有几个关键点:

为什么一个exe就完成了本应用的所有功能:

因为界面本身、九份站点脚本、数据库引擎,全都被当成"资源"编进了 exe,运行时从 exe 自己身上取。

主界面自己是怎么跑起来的:

WebView2 把 https://app.localhost/* 这类请求拦截下来,从资源或本机数据目录应答,所以一个 exe 就能独立运行