a61bb7bb34e0f1e9a3ce1cfd78e8320635dd2e4f
首先实现了配置文件存在性检查,当config.ini不存在时给出明确提示并退出程序。接着添加了完整的必填配置项校验逻辑,会列出所有缺失的配置节和配置项并终止运行。同时新增了完整的项目说明文档README.md,包含功能特性、使用流程、配置说明、API细节等完整内容。
洛克王国远行商人商品定时邮件推送
自动获取洛克王国远行商人商品数据,并在每个时段开始时通过邮件通知收件人。
功能特性
- 定时推送:每天4个时段自动发送商品信息邮件
- 智能重试:API未返回商品数据时,每分钟自动重试(最多30次)
- 延迟触发:时段开始后延迟2分钟再请求API,确保数据已更新
- 配置校验:启动时检查配置文件完整性和必要性
- HTML邮件:包含商品图片、价格、限购信息的美观邮件模板
- 多收件人:支持同时发送给多个邮箱地址
时段说明
远行商人商品按时段轮换,每天共4个时段:
| 时段 | 时间范围 | 邮件发送时间 |
|---|---|---|
| 上午场 | 08:00 - 12:00 | 08:02 |
| 下午场 | 12:00 - 16:00 | 12:02 |
| 傍晚场 | 16:00 - 20:00 | 16:02 |
| 夜间场 | 20:00 - 24:00 | 20:02 |
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置
复制示例配置文件并填写你的邮箱信息:
copy config.example.ini config.ini
编辑 config.ini,填写以下必要配置:
[smtp]
# SMTP 服务器地址(QQ邮箱为 smtp.qq.com)
host = smtp.qq.com
# SMTP 端口(SSL通常为465,STARTTLS通常为587)
port = 465
# 是否使用 SSL
use_ssl = true
# 发件人邮箱
sender = your_email@qq.com
# 发件人邮箱授权码(非登录密码,需在邮箱设置中生成)
password = your_authorization_code
# 收件人邮箱(多个用逗号分隔)
recipients = recipient1@example.com, recipient2@example.com
[api]
# API 地址(使用默认值即可)
url = https://rocom-api.ovofish.com/api/shop
# API Key(使用公开免费的Key即可)
key = sk-f2141ba4be3a9832106d2dc4042454666e354414d3ed0ce9
3. 运行
python main.py
程序启动后会:
- 检查配置文件完整性
- 显示当前配置信息
- 注册定时任务
- 如果当前处于营业时段(且已过2分钟缓冲),立即执行一次推送
- 持续运行,按
Ctrl+C退出
API说明
本项目使用洛克王国远行商人商品API:
- 接口地址:
https://rocom-api.ovofish.com/api/shop - 认证方式:Header中携带
X-API-Key - 公开Key:
sk-f2141ba4be3a9832106d2dc4042454666e354414d3ed0ce9(免费使用)
API响应状态
| 状态 | 说明 | 程序行为 |
|---|---|---|
success |
成功获取商品数据 | 发送邮件 |
loading |
前置引擎工作中(时段前2分钟) | 等待1分钟后重试 |
closed |
未营业(00:00-08:00) | 等待1分钟后重试 |
error |
获取商品信息失败 | 等待1分钟后重试 |
| 空商品列表 | 无商品数据 | 等待1分钟后重试 |
邮件效果
邮件包含以下信息:
- 商品图片
- 商品名称
- 价格(洛克贝)
- 限购数量
- 下架时间
示例邮件主题:洛克王国远行商人 - 下午场 商品提醒
配置说明
邮箱配置
| 配置项 | 说明 | 示例 |
|---|---|---|
host |
SMTP服务器地址 | smtp.qq.com |
port |
SMTP端口 | 465(SSL)或 587(STARTTLS) |
use_ssl |
是否使用SSL | true |
sender |
发件人邮箱 | your_email@qq.com |
password |
邮箱授权码 | xxxxxxxxxxxx |
recipients |
收件人邮箱(逗号分隔) | a@example.com, b@example.com |
获取QQ邮箱授权码
- 登录QQ邮箱
- 进入「设置」→「账户」
- 找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」
- 开启「IMAP/SMTP服务」
- 生成授权码(16位字符串)
错误处理
配置文件缺失
[ERROR] 配置文件 config.ini 不存在
[HINT] 请复制 config.example.ini 为 config.ini 并填写配置
配置项缺失
[ERROR] 配置文件缺少以下必要配置项:
- [smtp] password
- [api] url
[HINT] 请检查 config.ini 并补充缺失的配置
API请求失败
程序会自动重试,每分钟尝试一次,最多重试30次:
[INFO] 第 1 次尝试: status=loading, 商品数=0,1分钟后重试...
日志输出
程序运行时会输出详细日志:
[时间] 执行任务: 下午场- 任务开始[INFO] 第 1 次尝试: status=success, 商品数=3- API请求结果[OK] 邮件已发送 -> recipient@example.com- 邮件发送成功[ERROR] 邮件发送失败: ...- 邮件发送失败
注意事项
- 邮箱授权码:不是邮箱登录密码,需要在邮箱设置中单独生成
- 网络环境:确保能访问
rocom-api.ovofish.com - 程序持续运行:需要保持程序运行才能按时发送邮件
- 时区设置:程序使用系统时区(Asia/Shanghai)
- 安全提示:
config.ini包含敏感信息,已在.gitignore中忽略
依赖
- Python 3.6+
- requests - HTTP请求库
- schedule - 定时任务库
许可证
MIT License
Description
Languages
Python
100%