更新验证器提价
This commit is contained in:
483
docs/API.md
Normal file
483
docs/API.md
Normal file
@@ -0,0 +1,483 @@
|
||||
# API文档
|
||||
|
||||
本文档提供了ArticleReplaceBatch系统的API参考。
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
- [配置管理器 API](#配置管理器-api)
|
||||
- [服务层 API](#服务层-api)
|
||||
- [工具 API](#工具-api)
|
||||
- [UI组件 API](#ui组件-api)
|
||||
- [命令行接口](#命令行接口)
|
||||
|
||||
---
|
||||
|
||||
## 配置管理器 API
|
||||
|
||||
### ConfigManager
|
||||
|
||||
配置管理器单例类,用于统一管理应用配置。
|
||||
|
||||
#### 类方法
|
||||
|
||||
##### `__new__(cls) -> ConfigManager`
|
||||
创建或返回ConfigManager单例实例。
|
||||
|
||||
**返回值:**
|
||||
- `ConfigManager`: 单例实例
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from config_manager import config_manager
|
||||
|
||||
# 获取单例实例
|
||||
manager = config_manager
|
||||
```
|
||||
|
||||
##### `get(section: str, option: str, fallback: str = '') -> str`
|
||||
获取配置值。
|
||||
|
||||
**参数:**
|
||||
- `section`: 配置节名称
|
||||
- `option`: 配置项名称
|
||||
- `fallback`: 默认值(默认为空字符串)
|
||||
|
||||
**返回值:**
|
||||
- `str`: 配置值
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
workflow_id = config_manager.get('Coze', 'workflow_id')
|
||||
```
|
||||
|
||||
##### `get_int(section: str, option: str, fallback: int = 0) -> int`
|
||||
获取整数配置值。
|
||||
|
||||
**参数:**
|
||||
- `section`: 配置节名称
|
||||
- `option`: 配置项名称
|
||||
- `fallback`: 默认值(默认为0)
|
||||
|
||||
**返回值:**
|
||||
- `int`: 整数配置值
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
max_threads = config_manager.get_int('General', 'max_threads')
|
||||
```
|
||||
|
||||
##### `set(section: str, option: str, value: Any) -> None`
|
||||
设置配置值。
|
||||
|
||||
**参数:**
|
||||
- `section`: 配置节名称
|
||||
- `option`: 配置项名称
|
||||
- `value`: 配置值
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
config_manager.set('General', 'max_threads', '5')
|
||||
```
|
||||
|
||||
##### `save() -> None`
|
||||
保存配置到文件。
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
config_manager.save()
|
||||
```
|
||||
|
||||
##### `reload() -> None`
|
||||
重新加载配置文件。
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
config_manager.reload()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 服务层 API
|
||||
|
||||
### WebScrapingService
|
||||
|
||||
网页抓取服务,提供异步网页内容提取功能。
|
||||
|
||||
#### 类方法
|
||||
|
||||
##### `__init__(self, max_workers: int = 3)`
|
||||
初始化网页抓取服务。
|
||||
|
||||
**参数:**
|
||||
- `max_workers`: 最大工作线程数(默认为3)
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.services.web_scraping import WebScrapingService
|
||||
|
||||
service = WebScrapingService(max_workers=5)
|
||||
```
|
||||
|
||||
##### `extract_content_async(self, links: List[str], max_retries: int = 3) -> List[Tuple[str, str, List[str]]]`
|
||||
异步提取多个链接的内容。
|
||||
|
||||
**参数:**
|
||||
- `links`: 链接列表
|
||||
- `max_retries`: 最大重试次数(默认为3)
|
||||
|
||||
**返回值:**
|
||||
- `List[Tuple[str, str, List[str]]]`: 提取结果列表,每个元组包含(标题、内容、图片URLs)
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
links = [
|
||||
"https://www.toutiao.com/article/123",
|
||||
"https://www.toutiao.com/article/456"
|
||||
]
|
||||
results = service.extract_content_async(links)
|
||||
for title, content, images in results:
|
||||
print(f"标题: {title}")
|
||||
print(f"内容长度: {len(content)}")
|
||||
print(f"图片数量: {len(images)}")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ImageProcessingService
|
||||
|
||||
图片处理服务,提供异步图片下载和处理功能。
|
||||
|
||||
#### 类方法
|
||||
|
||||
##### `__init__(self, max_workers: int = 5)`
|
||||
初始化图片处理服务。
|
||||
|
||||
**参数:**
|
||||
- `max_workers`: 最大工作线程数(默认为5)
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.services.image_processing import ImageProcessingService
|
||||
|
||||
service = ImageProcessingService(max_workers=5)
|
||||
```
|
||||
|
||||
##### `process_images_async(self, image_urls: List[str], base_filename: str, save_dir: str) -> bool`
|
||||
异步处理多个图片。
|
||||
|
||||
**参数:**
|
||||
- `image_urls`: 图片URL列表
|
||||
- `base_filename`: 基础文件名
|
||||
- `save_dir`: 保存目录
|
||||
|
||||
**返回值:**
|
||||
- `bool`: 是否全部成功
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
image_urls = [
|
||||
"https://example.com/img1.jpg",
|
||||
"https://example.com/img2.jpg"
|
||||
]
|
||||
success = service.process_images_async(image_urls, "test", "output")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### AIService
|
||||
|
||||
AI服务基类,提供AI调用功能。
|
||||
|
||||
#### CozeAIService
|
||||
|
||||
Coze AI服务实现。
|
||||
|
||||
#### 类方法
|
||||
|
||||
##### `__init__(self)`
|
||||
初始化Coze AI服务。
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.services.ai_service import CozeAIService
|
||||
|
||||
service = CozeAIService()
|
||||
```
|
||||
|
||||
##### `call_article_workflow(self, parameters: Dict[str, Any]) -> str`
|
||||
调用Coze文章工作流。
|
||||
|
||||
**参数:**
|
||||
- `parameters`: 参数字典
|
||||
|
||||
**返回值:**
|
||||
- `str`: AI生成的结果
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
result = service.call_article_workflow({"article": "测试文章内容"})
|
||||
```
|
||||
|
||||
##### `get_stats(self) -> Dict[str, Any]`
|
||||
获取服务统计信息。
|
||||
|
||||
**返回值:**
|
||||
- `Dict[str, Any]`: 包含调用次数、总时间、平均时间的统计信息
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
stats = service.get_stats()
|
||||
print(f"调用次数: {stats['call_count']}")
|
||||
print(f"平均时间: {stats['avg_time']:.2f}s")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 工具 API
|
||||
|
||||
### Validator
|
||||
|
||||
数据验证器,提供各种数据验证功能。
|
||||
|
||||
#### 静态方法
|
||||
|
||||
##### `validate_url(url: str) -> bool`
|
||||
验证URL格式。
|
||||
|
||||
**参数:**
|
||||
- `url`: URL字符串
|
||||
|
||||
**返回值:**
|
||||
- `bool`: URL是否有效
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.utils.validation import Validator
|
||||
|
||||
is_valid = Validator.validate_url("https://www.example.com")
|
||||
```
|
||||
|
||||
##### `validate_article_url(url: str) -> bool`
|
||||
验证文章URL(头条、微信、网易等)。
|
||||
|
||||
**参数:**
|
||||
- `url`: 文章URL
|
||||
|
||||
**返回值:**
|
||||
- `bool`: URL是否为支持的文章链接
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
is_valid = Validator.validate_article_url("https://www.toutiao.com/article/123")
|
||||
```
|
||||
|
||||
##### `validate_string(value: Any, min_length: int = 0, max_length: Optional[int] = None) -> bool`
|
||||
验证字符串。
|
||||
|
||||
**参数:**
|
||||
- `value`: 待验证的值
|
||||
- `min_length`: 最小长度(默认为0)
|
||||
- `max_length`: 最大长度(可选)
|
||||
|
||||
**返回值:**
|
||||
- `bool`: 字符串是否有效
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
is_valid = Validator.validate_string("测试", min_length=1, max_length=10)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ArticleValidator
|
||||
|
||||
文章数据验证器。
|
||||
|
||||
#### 静态方法
|
||||
|
||||
##### `validate_title(title: str) -> bool`
|
||||
验证文章标题。
|
||||
|
||||
**参数:**
|
||||
- `title`: 文章标题
|
||||
|
||||
**返回值:**
|
||||
- `bool`: 标题是否有效
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.utils.validation import ArticleValidator
|
||||
|
||||
is_valid = ArticleValidator.validate_title("测试标题")
|
||||
```
|
||||
|
||||
##### `validate_content(content: str, min_length: int = 100) -> bool`
|
||||
验证文章内容。
|
||||
|
||||
**参数:**
|
||||
- `content`: 文章内容
|
||||
- `min_length`: 最小长度(默认为100)
|
||||
|
||||
**返回值:**
|
||||
- `bool`: 内容是否有效
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
is_valid = ArticleValidator.validate_content("测试内容...", min_length=50)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## UI组件 API
|
||||
|
||||
### LogTextHandler
|
||||
|
||||
自定义日志处理器,将日志输出到CustomTkinter文本框。
|
||||
|
||||
#### 类方法
|
||||
|
||||
##### `__init__(self, text_widget, level=logging.NOTSET)`
|
||||
初始化日志处理器。
|
||||
|
||||
**参数:**
|
||||
- `text_widget`: CustomTkinter文本框组件
|
||||
- `level`: 日志级别(默认为NOTSET)
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.ui.log_handler import LogTextHandler
|
||||
|
||||
handler = LogTextHandler(text_widget)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 命令行接口
|
||||
|
||||
### CLI Usage
|
||||
|
||||
使用`cli.py`提供的命令行接口。
|
||||
|
||||
#### 基本用法
|
||||
|
||||
```bash
|
||||
python cli.py --excel 文章链接.xlsx --threads 3
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- `--excel`, `-e`: Excel文件路径(包含文章链接)
|
||||
- `--link`, `-l`: 单个文章链接
|
||||
- `--threads`, `-t`: 线程数(默认为1)
|
||||
- `--service`, `-s`: AI服务(默认为coze)
|
||||
- `--type`, `-T`: 生成类型("短篇"或"文章")
|
||||
- `--template`: 使用的模板名称
|
||||
- `--verbose`, `-v`: 显示详细日志
|
||||
- `--config`: 配置文件路径
|
||||
|
||||
#### 示例
|
||||
|
||||
**处理Excel文件:**
|
||||
```bash
|
||||
python cli.py --excel 文章链接.xlsx --threads 3 --type 文章
|
||||
```
|
||||
|
||||
**处理单个链接:**
|
||||
```bash
|
||||
python cli.py --link https://www.toutiao.com/article/123
|
||||
```
|
||||
|
||||
**使用详细日志:**
|
||||
```bash
|
||||
python cli.py --excel 文章链接.xlsx --verbose
|
||||
```
|
||||
|
||||
**使用自定义配置:**
|
||||
```bash
|
||||
python cli.py --excel 文章链接.xlsx --config custom_config.ini
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 异常处理
|
||||
|
||||
### ValidationError
|
||||
|
||||
数据验证错误异常。
|
||||
|
||||
**示例:**
|
||||
```python
|
||||
from src.utils.validation import validate_and_raise, ArticleValidator
|
||||
|
||||
try:
|
||||
validate_and_raise(data, ArticleValidator.validate_article_data, "文章数据验证失败")
|
||||
except ValidationError as e:
|
||||
print(f"验证失败: {e}")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 1. 使用配置管理器
|
||||
|
||||
```python
|
||||
# 推荐:使用ConfigManager
|
||||
from config_manager import config_manager
|
||||
|
||||
workflow_id = config_manager.get('Coze', 'workflow_id')
|
||||
|
||||
# 不推荐:直接访问CONFIG
|
||||
from config import CONFIG
|
||||
workflow_id = CONFIG['Coze']['workflow_id']
|
||||
```
|
||||
|
||||
### 2. 使用服务层
|
||||
|
||||
```python
|
||||
# 推荐:使用服务层
|
||||
from src.services.web_scraping import web_scraping_service
|
||||
|
||||
results = web_scraping_service.extract_content_async(links)
|
||||
|
||||
# 不推荐:直接调用底层函数
|
||||
from get_web_content import extract_content_with_retry
|
||||
results = [extract_content_with_retry(link) for link in links]
|
||||
```
|
||||
|
||||
### 3. 验证输入数据
|
||||
|
||||
```python
|
||||
# 推荐:使用验证器
|
||||
from src.utils.validation import Validator
|
||||
|
||||
if Validator.validate_article_url(url):
|
||||
process_url(url)
|
||||
|
||||
# 不推荐:不验证直接使用
|
||||
process_url(url)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 版本信息
|
||||
|
||||
- **当前版本**: 1.0.0
|
||||
- **Python版本**: 3.10+
|
||||
- **最后更新**: 2026-03-07
|
||||
|
||||
---
|
||||
|
||||
## 联系方式
|
||||
|
||||
如有问题或建议,请通过以下方式联系:
|
||||
- 提交Issue
|
||||
- 发送Pull Request
|
||||
- 联系项目维护者
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**维护者**: opencode
|
||||
423
docs/DEPLOYMENT_GUIDE.md
Normal file
423
docs/DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,423 @@
|
||||
# 部署指南
|
||||
|
||||
本文档提供了ArticleReplaceBatch项目的部署指南。
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
- [环境要求](#环境要求)
|
||||
- [本地部署](#本地部署)
|
||||
- [服务器部署](#服务器部署)
|
||||
- [容器化部署](#容器化部署)
|
||||
- [常见问题](#常见问题)
|
||||
|
||||
---
|
||||
|
||||
## 环境要求
|
||||
|
||||
### 系统要求
|
||||
|
||||
- **操作系统**: Windows 10+, Linux (Ubuntu 20.04+), macOS 10.15+
|
||||
- **Python版本**: 3.10 或更高版本
|
||||
- **内存**: 最低 2GB,推荐 4GB+
|
||||
- **磁盘空间**: 最低 1GB
|
||||
|
||||
### 依赖要求
|
||||
|
||||
见 `requirements.txt` 文件。
|
||||
|
||||
---
|
||||
|
||||
## 本地部署
|
||||
|
||||
### 1. 获取代码
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd ArticleReplaceBatch
|
||||
```
|
||||
|
||||
### 2. 创建虚拟环境
|
||||
|
||||
```bash
|
||||
python -m venv venv
|
||||
|
||||
# Windows
|
||||
venv\Scripts\activate
|
||||
|
||||
# Linux/Mac
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
### 3. 安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 4. 配置环境
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# 编辑 .env 文件,填写必要的配置
|
||||
```
|
||||
|
||||
### 5. 初始化配置
|
||||
|
||||
```bash
|
||||
python -c "from config import CONFIG; print('配置初始化完成')"
|
||||
```
|
||||
|
||||
### 6. 运行应用
|
||||
|
||||
```bash
|
||||
# GUI模式
|
||||
python ArticleReplace.py
|
||||
|
||||
# 命令行模式
|
||||
python cli.py --help
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 服务器部署
|
||||
|
||||
### 1. 安装系统依赖
|
||||
|
||||
**Ubuntu/Debian:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y python3 python3-venv python3-pip
|
||||
sudo apt install -y xvfb # 无GUI运行需要
|
||||
```
|
||||
|
||||
**CentOS/RHEL:**
|
||||
```bash
|
||||
sudo yum install -y python3 python3-venv python3-pip
|
||||
sudo yum install -y xorg-x11-server-Xvfb
|
||||
```
|
||||
|
||||
### 2. 创建部署目录
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/article-replace
|
||||
sudo chown $USER:$USER /opt/article-replace
|
||||
cd /opt/article-replace
|
||||
```
|
||||
|
||||
### 3. 部署应用
|
||||
|
||||
```bash
|
||||
# 复制代码到部署目录
|
||||
git clone <repository-url> .
|
||||
git checkout main
|
||||
|
||||
# 创建虚拟环境
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# 安装依赖
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 4. 配置环境
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# 编辑 .env 文件
|
||||
nano .env
|
||||
```
|
||||
|
||||
### 5. 创建服务文件
|
||||
|
||||
**创建 systemd 服务文件:**
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/article-replace.service
|
||||
```
|
||||
|
||||
**服务文件内容:**
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Article Replace Batch Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
WorkingDirectory=/opt/article-replace
|
||||
Environment="PATH=/opt/article-replace/venv/bin"
|
||||
ExecStart=/opt/article-replace/venv/bin/python cli.py --excel /path/to/articles.xlsx --threads 3
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### 6. 启动服务
|
||||
|
||||
```bash
|
||||
# 重新加载systemd
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# 启动服务
|
||||
sudo systemctl start article-replace
|
||||
|
||||
# 设置开机自启
|
||||
sudo systemctl enable article-replace
|
||||
|
||||
# 查看状态
|
||||
sudo systemctl status article-replace
|
||||
|
||||
# 查看日志
|
||||
sudo journalctl -u article-replace -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 容器化部署
|
||||
|
||||
### 1. 创建 Dockerfile
|
||||
|
||||
```dockerfile
|
||||
FROM python:3.11-slim
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 安装系统依赖
|
||||
RUN apt-get update && apt-get install -y \
|
||||
xvfb \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 复制依赖文件
|
||||
COPY requirements.txt .
|
||||
|
||||
# 安装Python依赖
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# 复制应用代码
|
||||
COPY . .
|
||||
|
||||
# 创建必要目录
|
||||
RUN mkdir -p logs backups articles picture
|
||||
|
||||
# 暴露端口(如果需要)
|
||||
# EXPOSE 8000
|
||||
|
||||
# 设置环境变量
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
|
||||
# 默认命令
|
||||
CMD ["python", "cli.py", "--help"]
|
||||
```
|
||||
|
||||
### 2. 创建 .dockerignore
|
||||
|
||||
```
|
||||
.git
|
||||
.gitignore
|
||||
__pycache__
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
venv
|
||||
.env
|
||||
logs/
|
||||
backups/
|
||||
archive/
|
||||
build/
|
||||
dist/
|
||||
*.spec
|
||||
.DS_Store
|
||||
```
|
||||
|
||||
### 3. 构建镜像
|
||||
|
||||
```bash
|
||||
docker build -t article-replace:latest .
|
||||
```
|
||||
|
||||
### 4. 运行容器
|
||||
|
||||
```bash
|
||||
# 交互式运行
|
||||
docker run -it --rm \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-v $(pwd)/logs:/app/logs \
|
||||
article-replace:latest \
|
||||
python cli.py --excel /app/data/articles.xlsx --threads 3
|
||||
|
||||
# 后台运行
|
||||
docker run -d \
|
||||
--name article-replace \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-v $(pwd)/logs:/app/logs \
|
||||
article-replace:latest \
|
||||
python cli.py --excel /app/data/articles.xlsx --threads 3
|
||||
|
||||
# 查看日志
|
||||
docker logs -f article-replace
|
||||
```
|
||||
|
||||
### 5. 使用 Docker Compose
|
||||
|
||||
**创建 docker-compose.yml:**
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
article-replace:
|
||||
build: .
|
||||
container_name: article-replace
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./logs:/app/logs
|
||||
- ./config:/app/config
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
command: python cli.py --excel /app/data/articles.xlsx --threads 3
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
**启动服务:**
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f
|
||||
|
||||
# 停止服务
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 日志管理
|
||||
|
||||
```bash
|
||||
# 查看应用日志
|
||||
tail -f logs/article_replace.log
|
||||
|
||||
# 清理旧日志
|
||||
find logs/ -name "*.log" -mtime +7 -delete
|
||||
```
|
||||
|
||||
### 备份管理
|
||||
|
||||
```bash
|
||||
# 备份配置
|
||||
cp config.ini backups/config_$(date +%Y%m%d).ini
|
||||
|
||||
# 备份数据
|
||||
tar -czf backups/data_$(date +%Y%m%d).tar.gz articles/ picture/
|
||||
```
|
||||
|
||||
### 性能监控
|
||||
|
||||
```bash
|
||||
# 查看进程状态
|
||||
ps aux | grep ArticleReplace
|
||||
|
||||
# 查看内存使用
|
||||
top -p $(pgrep -f ArticleReplace)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **环境变量**: 不要将敏感信息提交到版本控制系统
|
||||
2. **文件权限**: 确保 `.env` 文件权限设置为 600
|
||||
3. **防火墙**: 如果暴露端口,配置防火墙规则
|
||||
4. **更新**: 定期更新依赖包以修复安全漏洞
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 无GUI环境下如何运行?
|
||||
|
||||
A: 使用命令行模式或 xvfb。
|
||||
|
||||
```bash
|
||||
# 使用命令行模式
|
||||
python cli.py --excel articles.xlsx --threads 3
|
||||
|
||||
# 或使用 xvfb (Linux)
|
||||
xvfb-run -a python ArticleReplace.py
|
||||
```
|
||||
|
||||
### Q: 如何处理依赖冲突?
|
||||
|
||||
A: 使用虚拟环境隔离依赖。
|
||||
|
||||
```bash
|
||||
python -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### Q: 如何设置开机自启?
|
||||
|
||||
A: 使用 systemd 服务(Linux)或任务计划程序(Windows)。
|
||||
|
||||
### Q: 内存不足怎么办?
|
||||
|
||||
A: 增加系统内存或减少并发线程数。
|
||||
|
||||
```bash
|
||||
# 减少线程数
|
||||
python cli.py --excel articles.xlsx --threads 1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 升级指南
|
||||
|
||||
### 1. 备份数据
|
||||
|
||||
```bash
|
||||
# 备份配置和数据
|
||||
cp config.ini backups/
|
||||
tar -czf backups/data_backup_$(date +%Y%m%d).tar.gz articles/ picture/
|
||||
```
|
||||
|
||||
### 2. 获取新版本
|
||||
|
||||
```bash
|
||||
git pull origin main
|
||||
```
|
||||
|
||||
### 3. 更新依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt --upgrade
|
||||
```
|
||||
|
||||
### 4. 验证升级
|
||||
|
||||
```bash
|
||||
python dev.py test
|
||||
```
|
||||
|
||||
### 5. 重启服务
|
||||
|
||||
```bash
|
||||
sudo systemctl restart article-replace
|
||||
# 或
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**最后更新**: 2026-03-07
|
||||
**维护者**: opencode
|
||||
361
docs/DEVELOPER_GUIDE.md
Normal file
361
docs/DEVELOPER_GUIDE.md
Normal file
@@ -0,0 +1,361 @@
|
||||
# 开发者指南
|
||||
|
||||
本文档提供了ArticleReplaceBatch项目的开发者指南。
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
- [开发环境搭建](#开发环境搭建)
|
||||
- [项目结构](#项目结构)
|
||||
- [代码规范](#代码规范)
|
||||
- [测试指南](#测试指南)
|
||||
- [贡献指南](#贡献指南)
|
||||
- [常见问题](#常见问题)
|
||||
|
||||
---
|
||||
|
||||
## 开发环境搭建
|
||||
|
||||
### 1. 克隆项目
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd ArticleReplaceBatch
|
||||
```
|
||||
|
||||
### 2. 创建虚拟环境
|
||||
|
||||
```bash
|
||||
# 使用venv
|
||||
python -m venv venv
|
||||
|
||||
# Windows
|
||||
venv\Scripts\activate
|
||||
|
||||
# Linux/Mac
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
### 3. 安装依赖
|
||||
|
||||
```bash
|
||||
# 安装核心依赖
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 安装开发依赖
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
### 4. 配置环境变量
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# 编辑 .env 文件,填写必要的配置
|
||||
```
|
||||
|
||||
### 5. 验证安装
|
||||
|
||||
```bash
|
||||
# 运行测试
|
||||
python dev.py test
|
||||
|
||||
# 检查代码
|
||||
python dev.py lint
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
ArticleReplaceBatch/
|
||||
├── src/ # 源代码
|
||||
│ ├── ui/ # UI组件
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── main_window.py # 主窗口
|
||||
│ │ ├── main_frame.py # 主页面
|
||||
│ │ ├── config_frame.py # 配置页面
|
||||
│ │ ├── disclaimer_frame.py # 免责声明
|
||||
│ │ └── log_handler.py # 日志处理器
|
||||
│ ├── services/ # 服务层
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── web_scraping.py # 网页抓取服务
|
||||
│ │ ├── image_processing.py # 图片处理服务
|
||||
│ │ └── ai_service.py # AI服务
|
||||
│ └── utils/ # 工具
|
||||
│ ├── __init__.py
|
||||
│ └── validation.py # 数据验证
|
||||
├── tests/ # 测试
|
||||
│ ├── __init__.py
|
||||
│ ├── conftest.py # pytest配置
|
||||
│ ├── test_config.py # 配置测试
|
||||
│ ├── test_main_process.py # 主流程测试
|
||||
│ ├── test_images_edit.py # 图片处理测试
|
||||
│ ├── test_config_manager.py # 配置管理器测试
|
||||
│ ├── test_ui.py # UI测试
|
||||
│ ├── test_integration.py # 集成测试
|
||||
│ ├── test_services.py # 服务测试
|
||||
│ └── test_performance.py # 性能测试
|
||||
├── scripts/ # 开发脚本
|
||||
│ ├── __init__.py
|
||||
│ ├── format_code.py # 代码格式化
|
||||
│ └── run_tests.py # 测试运行
|
||||
├── docs/ # 文档
|
||||
│ └── API.md # API文档
|
||||
├── examples/ # 示例
|
||||
│ └── sample_data.json # 示例数据
|
||||
├── archive/ # 备份归档
|
||||
├── backups/ # 备份文件
|
||||
├── logs/ # 日志文件
|
||||
├── .env.example # 环境变量模板
|
||||
├── .gitignore # Git配置
|
||||
├── pyproject.toml # 项目配置
|
||||
├── requirements.txt # 依赖列表
|
||||
├── config_manager.py # 配置管理器
|
||||
├── cli.py # 命令行接口
|
||||
├── dev.py # 开发工具
|
||||
├── ArticleReplace.py # GUI应用
|
||||
├── README.md # 项目说明
|
||||
├── CHANGELOG.md # 更新日志
|
||||
└── DEVELOPER_GUIDE.md # 开发者指南
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 代码规范
|
||||
|
||||
### Python代码风格
|
||||
|
||||
项目遵循以下代码风格指南:
|
||||
|
||||
1. **PEP 8**: Python代码风格指南
|
||||
2. **类型提示**: 使用类型注解
|
||||
3. **文档字符串**: 使用docstring
|
||||
4. **命名规范**: 遵循PEP 8命名约定
|
||||
|
||||
### 格式化工具
|
||||
|
||||
```bash
|
||||
# 格式化代码
|
||||
python dev.py format
|
||||
|
||||
# 或分别运行
|
||||
black .
|
||||
isort .
|
||||
```
|
||||
|
||||
### 代码检查
|
||||
|
||||
```bash
|
||||
# 代码检查
|
||||
python dev.py lint
|
||||
|
||||
# 类型检查
|
||||
python dev.py typecheck
|
||||
```
|
||||
|
||||
### 命名约定
|
||||
|
||||
- **类名**: PascalCase(如`WebScrapingService`)
|
||||
- **函数名**: snake_case(如`extract_content`)
|
||||
- **常量名**: UPPER_CASE(如`MAX_THREADS`)
|
||||
- **私有变量**: _leading_underscore(如`_config`)
|
||||
|
||||
---
|
||||
|
||||
## 测试指南
|
||||
|
||||
### 运行测试
|
||||
|
||||
```bash
|
||||
# 运行所有测试
|
||||
python dev.py test
|
||||
|
||||
# 运行特定测试
|
||||
pytest tests/test_config.py -v
|
||||
|
||||
# 生成覆盖率报告
|
||||
pytest tests/ --cov=. --cov-report=html
|
||||
```
|
||||
|
||||
### 编写测试
|
||||
|
||||
测试文件应放在`tests/`目录下,命名为`test_*.py`。
|
||||
|
||||
```python
|
||||
import pytest
|
||||
from src.services.web_scraping import WebScrapingService
|
||||
|
||||
class TestWebScrapingService:
|
||||
"""测试网页抓取服务"""
|
||||
|
||||
def test_service_creation(self):
|
||||
"""测试创建服务"""
|
||||
service = WebScrapingService(max_workers=5)
|
||||
assert service.max_workers == 5
|
||||
|
||||
def test_extract_content(self):
|
||||
"""测试提取内容"""
|
||||
from unittest.mock import patch
|
||||
|
||||
service = WebScrapingService()
|
||||
|
||||
with patch('src.services.web_scraping.extract_content_with_retry') as mock:
|
||||
mock.return_value = ("标题", "内容", [])
|
||||
|
||||
results = service.extract_content_async(["http://example.com"])
|
||||
|
||||
assert len(results) == 1
|
||||
```
|
||||
|
||||
### 测试覆盖率
|
||||
|
||||
目标测试覆盖率:> 70%
|
||||
|
||||
```bash
|
||||
# 查看覆盖率报告
|
||||
pytest tests/ --cov=. --cov-report=term-missing
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 贡献指南
|
||||
|
||||
### 提交代码
|
||||
|
||||
1. 确保代码通过所有测试
|
||||
2. 确保代码通过格式检查
|
||||
3. 更新相关文档
|
||||
4. 提交Pull Request
|
||||
|
||||
### Commit Message格式
|
||||
|
||||
```
|
||||
<type>(<scope>): <subject>
|
||||
|
||||
<body>
|
||||
|
||||
<footer>
|
||||
```
|
||||
|
||||
**Type:**
|
||||
- `feat`: 新功能
|
||||
- `fix`: 修复bug
|
||||
- `docs`: 文档更新
|
||||
- `style`: 代码格式(不影响功能)
|
||||
- `refactor`: 重构
|
||||
- `test`: 测试相关
|
||||
- `chore`: 构建/工具相关
|
||||
|
||||
**示例:**
|
||||
```
|
||||
feat(services): 添加批量图片处理功能
|
||||
|
||||
- 新增ImageProcessingService类
|
||||
- 支持异步处理多个图片
|
||||
- 添加进度回调功能
|
||||
|
||||
Closes #123
|
||||
```
|
||||
|
||||
### Pull Request流程
|
||||
|
||||
1. Fork项目
|
||||
2. 创建特性分支
|
||||
3. 提交更改
|
||||
4. 推送到分支
|
||||
5. 创建Pull Request
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 如何添加新的AI服务?
|
||||
|
||||
A: 在`src/services/ai_service.py`中创建新的服务类,继承`AIService`基类。
|
||||
|
||||
```python
|
||||
class CustomAIService(AIService):
|
||||
def __init__(self):
|
||||
super().__init__("custom")
|
||||
|
||||
def call(self, parameters):
|
||||
# 实现自定义AI调用
|
||||
pass
|
||||
```
|
||||
|
||||
### Q: 如何添加新的UI组件?
|
||||
|
||||
A: 在`src/ui/`中创建新的模块,然后在`main_window.py`中引入使用。
|
||||
|
||||
### Q: 如何调试问题?
|
||||
|
||||
A: 使用日志系统,设置日志级别为DEBUG。
|
||||
|
||||
```python
|
||||
import logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
```
|
||||
|
||||
### Q: 如何打包应用?
|
||||
|
||||
A: 使用PyInstaller。
|
||||
|
||||
```bash
|
||||
python dev.py build
|
||||
```
|
||||
|
||||
### Q: 性能优化建议?
|
||||
|
||||
A:
|
||||
1. 使用异步处理
|
||||
2. 添加缓存机制
|
||||
3. 批量处理数据
|
||||
4. 优化数据库查询
|
||||
|
||||
---
|
||||
|
||||
## 开发工具
|
||||
|
||||
### dev.py
|
||||
|
||||
统一的开发工具入口。
|
||||
|
||||
```bash
|
||||
# 查看帮助
|
||||
python dev.py --help
|
||||
|
||||
# 可用命令
|
||||
python dev.py format # 格式化代码
|
||||
python dev.py test # 运行测试
|
||||
python dev.py lint # 代码检查
|
||||
python dev.py typecheck # 类型检查
|
||||
python dev.py build # 打包应用
|
||||
python dev.py clean # 清理构建
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 资源链接
|
||||
|
||||
- [Python文档](https://docs.python.org/3/)
|
||||
- [pytest文档](https://docs.pytest.org/)
|
||||
- [CustomTkinter文档](https://customtkinter.com/)
|
||||
- [项目CHANGELOG](../CHANGELOG.md)
|
||||
- [API文档](./API.md)
|
||||
|
||||
---
|
||||
|
||||
## 联系方式
|
||||
|
||||
如有问题,请通过以下方式联系:
|
||||
- 提交Issue
|
||||
- 发送Pull Request
|
||||
- 联系项目维护者
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**最后更新**: 2026-03-07
|
||||
**维护者**: opencode
|
||||
106
docs/QUICKSTART.md
Normal file
106
docs/QUICKSTART.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 快速开始指南
|
||||
|
||||
本文档提供了ArticleReplaceBatch的快速开始指南。
|
||||
|
||||
---
|
||||
|
||||
## 安装
|
||||
|
||||
### 1. 克隆项目
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd ArticleReplaceBatch
|
||||
```
|
||||
|
||||
### 2. 安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 3. 配置环境
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# 编辑 .env 文件,填写必要的配置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 基本使用
|
||||
|
||||
### GUI模式
|
||||
|
||||
```bash
|
||||
python ArticleReplace.py
|
||||
```
|
||||
|
||||
### 命令行模式
|
||||
|
||||
```bash
|
||||
# 处理Excel文件
|
||||
python cli.py --excel 文章链接.xlsx --threads 3
|
||||
|
||||
# 处理单个链接
|
||||
python cli.py --link https://www.toutiao.com/article/123
|
||||
|
||||
# 查看帮助
|
||||
python cli.py --help
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 配置说明
|
||||
|
||||
主要配置文件:`config.ini`
|
||||
|
||||
### Coze配置
|
||||
|
||||
```ini
|
||||
[Coze]
|
||||
workflow_id = your_workflow_id
|
||||
access_token = your_access_token
|
||||
is_async = true
|
||||
```
|
||||
|
||||
### 常规配置
|
||||
|
||||
```ini
|
||||
[General]
|
||||
max_threads = 3
|
||||
min_article_length = 100
|
||||
articles_path = articles
|
||||
images_path = picture
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 开发
|
||||
|
||||
### 运行测试
|
||||
|
||||
```bash
|
||||
python dev.py test
|
||||
```
|
||||
|
||||
### 代码格式化
|
||||
|
||||
```bash
|
||||
python dev.py format
|
||||
```
|
||||
|
||||
### 代码检查
|
||||
|
||||
```bash
|
||||
python dev.py lint
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 更多信息
|
||||
|
||||
- [完整文档](../README.md)
|
||||
- [API文档](./API.md)
|
||||
- [开发者指南](./DEVELOPER_GUIDE.md)
|
||||
- [部署指南](./DEPLOYMENT_GUIDE.md)
|
||||
38
docs/README.md
Normal file
38
docs/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# 文档索引
|
||||
|
||||
本文档提供了ArticleReplaceBatch项目的所有文档索引。
|
||||
|
||||
---
|
||||
|
||||
## 用户文档
|
||||
|
||||
- [快速开始指南](QUICKSTART.md) - 快速上手指南
|
||||
- [项目说明](../README.md) - 项目概述和功能介绍
|
||||
- [更新日志](../CHANGELOG.md) - 版本变更历史
|
||||
|
||||
## 开发文档
|
||||
|
||||
- [开发者指南](DEVELOPER_GUIDE.md) - 开发环境搭建和贡献指南
|
||||
- [API文档](API.md) - API参考手册
|
||||
- [部署指南](DEPLOYMENT_GUIDE.md) - 部署和运维指南
|
||||
|
||||
## 重构文档
|
||||
|
||||
- [P0级重构报告](../REFACTORING_REPORT.md) - P0级任务执行报告
|
||||
- [P1级任务报告](../P1_REPORT.md) - P1级任务执行报告
|
||||
- [重构总结](../SYSTEM_REFACTORING_SUMMARY.md) - 系统重构总结
|
||||
- [最终总结](../FINAL_SUMMARY.md) - 最终总结报告
|
||||
|
||||
## 交付文档
|
||||
|
||||
- [交付文档](../DELIVERY_DOCUMENT.md) - 完整交付文档
|
||||
- [交付清单](../DELIVERY_CHECKLIST.md) - 交付物清单
|
||||
|
||||
## 示例
|
||||
|
||||
- [示例数据](../examples/sample_data.json) - 示例数据文件
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**最后更新**: 2026-03-07
|
||||
Reference in New Issue
Block a user