wikit命令行工具
由Go语言驱动的跨平台(Windows / Linux / macOS)的 Wikidot 维基备份工具。它产出的备份兼容 WikiComma 归档格式:相同的目录结构、逐字节相同的文件内容。备份可直接导入ProjectWikit维基迁移引擎使用。有任何问题请联系Kakushi。
GitHub仓库:https://github.com/kakushi-w/wikit
能备份哪些数据?
wikit 几乎抓取 Wikidot 维基对外暴露的全部内容:
站点元数据(meta/site.json)
- 域名
- 全局站点 ID
- Slug(小写 unix 名)
- 主页
- 语言
页面元数据(meta/pages/<名字>.json)
- 全局页面 ID
- 页面名
- 标题
- 评分
- 标签
- 父页面
- 关联的论坛讨论串 ID
- 是否锁定
- 最后更新时间
- 完整修订列表
- 投票与投票者(每个用户的赞/踩)
- 附件列表
附件元数据与内容
- 全局文件 ID
- 文件名
- 原始 URL
- 大小(可读格式与字节数)
- MIME 类型与服务器报告的内容类型
- 上传者(数字 ID)
- 上传时间
- 附件原始字节(files/<页名>/<file_id>)
页面修订
- 全局修订 ID
- 页内修订编号
- 时间戳
- 作者(数字 ID)
- 变更标志(flags)
- 修订注释
- 每个修订的完整维基源码文本(压缩在 pages/<名字>.7z 中)
论坛 — 分类(meta/forum/category/<id>.json)
- 标题、描述、全局 ID
- 最后发帖时间
- 帖子总数、讨论串总数
- 最后发帖人(数字 ID)
论坛 — 讨论串(meta/forum/<分类>/<串>.json)
- 全局 ID、标题、描述
- 创建时间 / 创建者
- 最后发帖时间 / 最后发帖人
- 帖子数、是否置顶、是否锁定
- 完整的嵌套帖子树
论坛 — 帖子
- 全局 ID、标题、作者、时间戳
- 最后编辑时间 / 最后编辑者
- 每个帖子修订的HTML 内容(压缩在 forum/<分类>/<串>.7z 中)
- 嵌套回复(递归树结构)
用户(_users/<bucket>.json)
- 显示名与用户名 slug
- 注册日期
- 账户类型(如 Pro)
- 活跃度 / karma 等级
- (用户按 id » 13 分桶存储。)
安装
Linux / macOS
curl -fsSL https://raw.githubusercontent.com/kakushi-w/wikit/main/install.sh | shWindows(PowerShell)
irm https://raw.githubusercontent.com/kakushi-w/wikit/main/install.ps1 | iex装完新开一个终端,直接运行 wikit。
手动安装:前往Releases 页面下载对应二进制,运行一次 wikit install 即可。
用法
wikit backup all # 备份 config.json 里的所有 wiki
wikit backup <名字> [名字...] # 备份指定的 wiki,用空格分隔多个wiki
# 不在 config 里的名字会按
# https://<名字>.wikidot.com 抓取命令行参数(覆盖 config.json 的值)
-c, --config <路径> 配置文件(默认 ./config.json 或 $WIKIT_CONFIG)
--base-dir <路径> 覆盖 base_directory
--bucket-size <n> 限速令牌桶容量
--refill-seconds <n> 限速令牌桶填满秒数
--delay-ms <n> 任务之间的延迟(毫秒)
--max-jobs <n> 同时备份的最大 wiki 数
--user-cache <n> 用户信息缓存有效期(秒)
--http-proxy <s> http 代理:host:port 或 host:port:user:password
--socks-proxy <s> socks 代理:host:port
--no-update-check 不检查是否有新版本
--refresh-votes 备份完成后,批量刷新页面评分/投票
--scheme <s> url 未写协议时的默认协议:http 或 https(默认 https)
--keep-removed 保留已从 sitemap 中消失的页面(不删除)刷新评分与投票
普通扫描看不到评分/投票的变化(它们不会更新页面时间戳),本地存的评分会过期。—refresh-votes 在备份后刷新它们,只重写页面元数据:
wikit backup scp-wiki --refresh-votes更新
wikit update # 下载并安装最新版
wikit update --check # 只检查有没有新版,不安装
wikit version # 显示当前版本每次 backup 跑完后,wikit会做一次版本检查,有新版就打印一行提示。可用 —no-update-check 或 WIKIT_NO_UPDATE_CHECK=1 关闭。
配置
config.json 格式:
{
"base_directory": "/data",
"wikis": [ { "name": "scp-wiki", "url": "https://scp-wiki.wikidot.com" } ],
"ratelimit": { "bucket_size": 60, "refill_seconds": 60 },
"delay_ms": 200,
"user_list_cache_freshness": 86400,
"http_proxy": null,
"socks_proxy": null,
"refresh_votes": false,
"scheme": "https",
"keep_removed": false
}refresh_votes、scheme、keep_removed 既可写在这里,也可用对应的命令行参数覆盖(带了参数以参数为准)。keep_removed 会保留已从 wiki 删除的页面,不从本地归档中移除。
每个 wiki 的 url 可选(省略则推导 https://<名字>.wikidot.com),它同时决定该 wiki 的协议:url 里写了 http: 或 https: 就原样使用,所以不同 wiki 可以用不同协议。scheme 只是「url 没写协议的 wiki(以及命令行裸名字)」的默认值;默认 wiki 是 HTTP 站点才把它设成 http。
"wikis": [
{ "name": "a" }, // https://a.wikidot.com
{ "name": "b", "url": "http://b.example.com" } // http,自定义域名
]只有 backup all 必须要有配置文件(它从中读取 wiki 列表)。当你显式指定 wiki 名字(wikit backup <名字> …)且本地没有 config.json 时,wikit 会用上面这套相同的默认值内置运行,在你运行命令的当前目录下创建一个 wikit_data 文件夹来存放备份,其余参数同上。可以用 —base-dir(以及其他覆盖参数)在不写配置文件的情况下调整,或用 -c <路径> 指向一个配置文件。用 -c 指定一个不存在的配置文件会报错。