|
|
||
|---|---|---|
| .claude | ||
| .vscode | ||
| .env.example | ||
| .gitignore | ||
| CLAUDE.md | ||
| README.md | ||
| sync.py | ||
| target.txt | ||
README.md
Wiki Sync Tool - Enhanced Version
一个用于同步和跟踪 MediaWiki 网站变更的 Python 工具,支持双语对比和精确的行号定位。
功能特点
- 🔄 自动同步 MediaWiki 网站的最新更改
- 📝 生成带语法高亮的 HTML diff 文件,清晰展示变更内容
- 💾 保存页面完整内容供离线查阅
- ⏰ 支持增量同步,只获取上次同步后的新变更
- 🔍 支持按时间点或特定页面进行同步
- 📁 智能文件组织,区分新页面和变更页面
- 🌐 新增:自动同步中文翻译版本
- 🎯 新增:精确的行号映射,点击英文行自动定位到中文对应行
- 📊 新增:生成精美的双语对比网页
- 🎨 新增:现代化的UI设计,支持同步滚动和高亮显示
- 🧭 新增:导航浮窗功能,快速跳转到变更点
- 🗂️ 新增:分类存储,主文件和参考文件分开管理
安装
- 确保你已经安装了 Python 3.6+
- 克隆此仓库:
git clone <repository-url> cd wiki-sync-tool - 安装依赖:
pip install requests python-dotenv
配置
创建一个 .env 文件并配置你的 MediaWiki API 地址:
# 英文版 Project Diablo 2 Wiki API 地址
WIKI_API_URL_EN=https://wiki.projectdiablo2.com/w/api.php
# 中文版 Project Diablo 2 Wiki API 地址
WIKI_API_URL_CN=https://wiki.projectdiablo2.cn/w/api.php
或者复制提供的示例配置文件:
cp .env.example .env
使用方法
基本全量同步
同步自上次运行以来的所有更改:
python sync.py --run
首次运行时,会同步过去 24 小时内的更改。
指定时间起点同步
从指定时间开始同步:
python sync.py --since 2025-11-28T00:00:00Z --run
同步特定页面
只同步特定页面的最新更改:
python sync.py --title "Amazon Basin" --run
同步特定页面并更新时间戳
同步特定页面并在完成后更新全局时间戳:
python sync.py --title "Amazon Basin" --update-timestamp --run
查看帮助
python sync.py --help
输出文件
每次运行都会在 wiki_sync_output 目录下创建一个以时间戳命名的子目录,并按照以下结构组织文件:
wiki_sync_output/[时间戳]/
├── new_pages/ # 新创建的页面目录
│ └── [页面名].full.txt # 只保存页面的完整内容
│
└── changed_pages/ # 有变更的页面目录
├── [页面名].full.txt # 页面的最新完整内容
├── [页面名].cn.txt # 对应的中文翻译内容
├── [页面名].comparison.html # 双语对比页面(带导航功能)
│
└── files/ # 参考文件目录
├── [页面名].diff.html # 官方 MediaWiki diff HTML
├── [页面名].diff.txt # 文本格式的 diff
└── [页面名].old.txt # 历史版本内容
文件说明
主要文件(日常使用):
.full.txt- 页面的完整内容(新页面和变更页面都有).cn.txt- 中文翻译内容(仅变更页面).comparison.html- 双语对比网页(仅变更页面)
参考文件(技术细节):
.diff.html- MediaWiki原生HTML diff.diff.txt- 文本格式的diff(类似git diff).old.txt- 页面的历史版本内容
双语对比网页特性
生成的双语对比网页具有以下高级功能:
-
导航浮窗 🧭
- 左侧浮窗显示所有变更点的导航列表
- 点击导航项可快速跳转到对应位置
- 滚动页面时自动高亮当前可见的变更
- 支持使用 Ctrl+1~9 快速跳转到对应编号的变更
-
精确行号映射:
- 英文diff中的每一行都标注了对应的中文行号
- 点击英文任意行,自动高亮并滚动到对应的中文行
-
交互式体验:
- 鼠标悬停时预览对应的中文行
- 点击时高亮显示对应关系
- 平滑滚动动画效果
-
视觉设计:
- 现代化的UI设计
- 标准的diff配色(绿色新增、红色删除、灰色未变更)
- 响应式布局,支持移动端查看
-
字符级diff高亮:
- 显示精确到字符级别的变更差异
- 新增内容使用绿色背景高亮
- 删除内容使用红色背景高亮
Diff 文件示例
文本diff格式示例:
--- old_version
+++ new_version
@@ -10,7 +10,7 @@
This is line 10
-This line will be removed
+This line will be added
This is line 12
HTML diff特性:
- 绿色背景表示新增内容
- 红色背景表示删除内容
- 左侧彩色竖线标识变更类型
- +/- 标记清晰显示变更位置
- 删除内容带有删除线效果
技术细节
智能文件组织策略
工具根据页面是否为新建来组织文件:
-
新页面:判断依据是diff文本以"新创建页面"开头
- 只保存
.full.txt文件 - 不生成中英对比(因为不存在变更)
- 只保存
-
变更页面:
- 保存主要文件在
changed_pages目录 - 将技术细节文件放在
files子目录
- 保存主要文件在
行号解析机制
工具使用自定义的diff解析器,能够精确提取:
- Hunk头部的行号范围信息
- 每一行变更对应的旧版本和新版本行号
- 增删改上下文行的准确位置
导航系统实现
-
动态生成导航项:
- 扫描所有
.change-block元素 - 自动提取变更类型(新增/替换/删除)
- 生成预览文本和行号信息
- 扫描所有
-
模板字符串修复:
- 使用正确的
"${changeId}"语法 - 确保选择器能够正确匹配DOM元素
- 使用正确的
中文页面搜索策略
- 首先尝试精确匹配页面标题
- 如果失败,则进行模糊搜索
- 支持标题中的空格和特殊字符处理
使用说明
查看新页面:
- 进入
new_pages目录 - 查看对应的
.full.txt文件获取页面完整内容
处理变更页面:
- 主要查看
changed_pages目录下的文件 - 使用
.comparison.html进行双语对比和导航 - 查阅
.cn.txt获取中文翻译参考 - 参考
.full.txt获取最新的英文内容
技术细节参考:
- 查看
files目录了解详细的变更信息 - 包含官方diff、文本diff和历史版本
目录组织示例
wiki_sync_output/
├── 20251211_221150/
│ ├── new_pages/ # 新创建的页面
│ │ └── New_Page-20251211_220123-12345.full.txt
│ │
│ └── changed_pages/ # 有变更的页面
│ ├── To Do-20251211_124712-21941.full.txt
│ ├── To Do-20251211_124712-21941.cn.txt
│ ├── To Do-20251211_124712-21941.comparison.html
│ │
│ └── files/ # 参考文件
│ ├── To Do-20251211_124712-21941.diff.html
│ ├── To Do-20251211_124712-21941.diff.txt
│ └── To Do-20251211_124712-21941.old.txt
│
└── 20251211_193512/
└── ...
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request。