181 lines
4.6 KiB
Markdown
181 lines
4.6 KiB
Markdown
# Wiki Sync Tool - Enhanced Version
|
||
|
||
一个用于同步和跟踪 MediaWiki 网站变更的 Python 工具,支持双语对比和精确的行号定位。
|
||
|
||
## 功能特点
|
||
|
||
- 🔄 自动同步 MediaWiki 网站的最新更改
|
||
- 📝 生成带语法高亮的 HTML diff 文件,清晰展示变更内容
|
||
- 💾 保存页面完整内容供离线查阅
|
||
- ⏰ 支持增量同步,只获取上次同步后的新变更
|
||
- 🔍 支持按时间点或特定页面进行同步
|
||
- 📁 自动组织输出文件到时间戳目录
|
||
- 🌐 **新增**:自动同步中文翻译版本
|
||
- 🎯 **新增**:精确的行号映射,点击英文行自动定位到中文对应行
|
||
- 📊 **新增**:生成精美的双语对比网页
|
||
- 🎨 **新增**:现代化的UI设计,支持同步滚动和高亮显示
|
||
|
||
## 安装
|
||
|
||
1. 确保你已经安装了 Python 3.6+
|
||
2. 克隆此仓库:
|
||
```bash
|
||
git clone <repository-url>
|
||
cd wiki-sync-tool
|
||
```
|
||
3. 安装依赖:
|
||
```bash
|
||
pip install requests python-dotenv
|
||
```
|
||
|
||
## 配置
|
||
|
||
创建一个 `.env` 文件并配置你的 MediaWiki API 地址:
|
||
|
||
```env
|
||
# 英文版 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
|
||
```
|
||
|
||
或者复制提供的示例配置文件:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 基本全量同步
|
||
|
||
同步自上次运行以来的所有更改:
|
||
|
||
```bash
|
||
python sync.py --run
|
||
```
|
||
|
||
首次运行时,会同步过去 24 小时内的更改。
|
||
|
||
### 指定时间起点同步
|
||
|
||
从指定时间开始同步:
|
||
|
||
```bash
|
||
python sync.py --since 2025-11-28T00:00:00Z --run
|
||
```
|
||
|
||
### 同步特定页面
|
||
|
||
只同步特定页面的最新更改:
|
||
|
||
```bash
|
||
python sync.py --title "Amazon Basin" --run
|
||
```
|
||
|
||
### 同步特定页面并更新时间戳
|
||
|
||
同步特定页面并在完成后更新全局时间戳:
|
||
|
||
```bash
|
||
python sync.py --title "Amazon Basin" --update-timestamp --run
|
||
```
|
||
|
||
### 查看帮助
|
||
|
||
```bash
|
||
python sync.py --help
|
||
```
|
||
|
||
## 输出文件
|
||
|
||
每次运行都会在 `wiki_sync_output` 目录下创建一个以时间戳命名的子目录,包含生成的文件:
|
||
|
||
- `页面标题-时间戳-revid.diff.html` - MediaWiki原生HTML diff文件
|
||
- `页面标题-时间戳-revid.diff.txt` - 文本格式的diff(类似git diff)
|
||
- `页面标题-时间戳-revid.full.txt` - 页面的最新完整内容
|
||
- `页面标题-时间戳-revid.old.txt` - 页面的历史版本内容(如果有变更)
|
||
- `页面标题-时间戳-revid.cn.txt` - 中文翻译内容(如果找到)
|
||
- `页面标题-时间戳-revid.comparison.html` - **双语对比网页**(如果找到中文翻译)
|
||
|
||
### 双语对比网页特性
|
||
|
||
生成的双语对比网页具有以下高级功能:
|
||
|
||
1. **精确行号映射**:
|
||
- 英文diff中的每一行都标注了对应的中文行号
|
||
- 点击英文任意行,自动高亮并滚动到对应的中文行
|
||
|
||
2. **交互式体验**:
|
||
- 鼠标悬停时预览对应的中文行
|
||
- 点击时高亮显示对应关系
|
||
- 平滑滚动动画效果
|
||
|
||
3. **视觉设计**:
|
||
- 现代化的UI设计
|
||
- 标准的diff配色(绿色新增、红色删除、灰色未变更)
|
||
- 响应式布局,支持移动端查看
|
||
|
||
4. **同步滚动**:
|
||
- 左右两栏滚动位置自动同步
|
||
- 便于对比相同位置的内容
|
||
|
||
### 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解析器,能够精确提取:
|
||
- Hunk头部的行号范围信息
|
||
- 每一行变更对应的旧版本和新版本行号
|
||
- 增删改上下文行的准确位置
|
||
|
||
### 中文页面搜索策略
|
||
|
||
1. 首先尝试精确匹配页面标题
|
||
2. 如果失败,则进行模糊搜索
|
||
3. 支持标题中的空格和特殊字符处理
|
||
|
||
### 目录组织
|
||
|
||
```
|
||
wiki_sync_output/
|
||
├── 20251211_152702/
|
||
│ ├── Amazon_Basin-20251211_152645-12345.diff.html
|
||
│ ├── Amazon_Basin-20251211_152645-12345.diff.txt
|
||
│ ├── Amazon_Basin-20251211_152645-12345.full.txt
|
||
│ ├── Amazon_Basin-20251211_152645-12345.old.txt
|
||
│ ├── Amazon_Basin-20251211_152645-12345.cn.txt
|
||
│ └── Amazon_Basin-20251211_152645-12345.comparison.html
|
||
└── 20251211_153127/
|
||
└── ...
|
||
```
|
||
|
||
## 许可证
|
||
|
||
MIT License
|
||
|
||
## 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request。 |