diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..1fd21eb --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +# Wiki Sync Tool 配置文件示例 +# 复制此文件为 .env 并修改其中的值 + +# 你的 MediaWiki API 地址 +WIKI_API_URL=https://your-wiki-site.com/api.php \ No newline at end of file diff --git a/.gitignore b/.gitignore index 906d727..1259b4c 100644 --- a/.gitignore +++ b/.gitignore @@ -161,4 +161,5 @@ cython_debug/ # 自定义忽略项 last_sync_timestamp.txt -wiki_sync_output/ \ No newline at end of file +wiki_sync_output/ +.env \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c37e849 --- /dev/null +++ b/README.md @@ -0,0 +1,133 @@ +# Wiki Sync Tool + +一个用于同步和跟踪 MediaWiki 网站变更的 Python 工具。该工具可以自动获取 wiki 页面的最新更改,生成易于阅读的 diff 文件,并保存页面的完整内容以供离线查阅。 + +## 功能特点 + +- 🔄 自动同步 MediaWiki 网站的最新更改 +- 📝 生成带语法高亮的 HTML diff 文件,清晰展示变更内容 +- 💾 保存页面完整内容供离线查阅 +- ⏰ 支持增量同步,只获取上次同步后的新变更 +- 🔍 支持按时间点或特定页面进行同步 +- 📁 自动组织输出文件到时间戳目录 + +## 安装 + +1. 确保你已经安装了 Python 3.6+ +2. 克隆此仓库: + ```bash + git clone + cd wiki-sync-tool + ``` +3. 安装依赖: + ```bash + pip install requests python-dotenv + ``` + +## 配置 + +创建一个 `.env` 文件并配置你的 MediaWiki API 地址: + +```env +WIKI_API_URL=https://your-wiki-site.com/api.php +``` + +或者复制提供的示例配置文件: + +```bash +cp .env.example .env +``` + +然后编辑 `.env` 文件中的 `WIKI_API_URL` 值。 + +## 使用方法 + +### 基本全量同步 + +同步自上次运行以来的所有更改: + +```bash +python sync.py --run +``` + +首次运行时,会同步过去 24 小时内的更改。 + +### 指定时间起点同步 + +从指定时间开始同步: + +```bash +python sync.py --since 2025-11-28T00:00:00Z --run +``` + +### 同步特定页面 + +只同步特定页面的最新更改: + +```bash +python sync.py --title "Main Page" --run +``` + +### 同步特定页面并更新时间戳 + +同步特定页面并在完成后更新全局时间戳: + +```bash +python sync.py --title "Main Page" --update-timestamp --run +``` + +### 查看帮助 + +```bash +python sync.py --help +``` + +## 输出文件 + +每次运行都会在 `wiki_sync_output` 目录下创建一个以时间戳命名的子目录,包含生成的文件: + +- `页面标题-时间戳-revid.diff.html` - 页面变更的 HTML diff 文件 +- `页面标题-时间戳-revid.full.txt` - 页面的完整内容 + +### Diff 文件示例 + +Diff 文件展示了页面的变更内容,具有以下特性: + +- 绿色背景表示新增内容 +- 红色背景表示删除内容 +- 左侧彩色竖线标识变更类型 +- +/- 标记清晰显示变更位置 +- 删除内容带有删除线效果 + +![Diff 示例截图](example-diff.png) + +## 技术细节 + +### Diff 标记说明 + +工具会对 MediaWiki 的原生 diff 输出进行处理: + +- 将 `` 和 `` 标签转换为标准的 `` 标签 +- 将 `data-marker` 属性转换为实际的 +/- 符号 +- 应用自定义 CSS 样式增强视觉效果 + +### 目录组织 + +``` +wiki_sync_output/ +├── 20251203_152702/ +│ ├── Main_Page-20251203_152645-12345.diff.html +│ ├── Main_Page-20251203_152645-12345.full.txt +│ ├── Another_Page-20251203_152650-12346.diff.html +│ └── Another_Page-20251203_152650-12346.full.txt +└── 20251203_153127/ + └── ... +``` + +## 许可证 + +MIT License + +## 贡献 + +欢迎提交 Issue 和 Pull Request。 \ No newline at end of file diff --git a/sync.py b/sync.py index 05fd727..b842e95 100644 --- a/sync.py +++ b/sync.py @@ -14,9 +14,11 @@ import argparse from pathlib import Path from datetime import datetime import requests +from dotenv import load_dotenv # ==================== 配置区 ==================== -WIKI_API_URL = "https://wiki.projectdiablo2.com/w/api.php" # ← 改成你的国外 wiki +load_dotenv() +WIKI_API_URL = os.getenv("WIKI_API_URL") # 从.env文件加载 OUTPUT_DIR = Path("wiki_sync_output") OUTPUT_DIR.mkdir(exist_ok=True)