SKILL.md
油价调价提醒#
能做什么:盯住国内成品油调价窗口日(发改委每 10 个工作日调一次),只在调价日当天自动检查调价通知是否发布,一发布就推送新价格、涨跌幅度和下一次调价日期;日常不联网不运行,按调价日历动态调度 cron。
- 带脚本:是(纯 Python 标准库,无第三方依赖)
- 联不联网:联网(搜油价网 soyoujia.cn,免费)
- 写不写文件:会读写同目录下的
oil_notify_config.json(推送参数)、oil_notify.log(运行日志)、crontab.bak(crontab 备份),并重写用户 crontab 里的油提醒调度行
用法#
python3 oil_notify.py # 正常跑:在调价日检查通知并推送,然后重写下次 cron
python3 oil_notify.py --dry-run # 只打印,不推送、不改 cron
python3 oil_notify.py --sim-date 2026-11-12 # 模拟指定日期测试各分支
第一次安装#
-
把本文件夹放到固定位置(例如
~/oil-notify)。 -
复制配置模板并填好推送参数:
cp oil_notify_config.json.example oil_notify_config.json # 编辑 oil_notify_config.json:qq_user_id / one_bot_url / one_bot_token也可以不建配置文件,改用环境变量
QQ_USER_ID、ONE_BOT_URL、ONE_BOT_TOKEN。 -
先手动跑一次,把 cron 装好(会算出下一次调价窗口日并写入 crontab):
cd ~/oil-notify && python3 oil_notify.py -
确认
crontab -l | grep oil_notify里有一行0 17 <日> <月> * cd ... && python3 oil_notify.py >> oil_notify.log 2>&1。
机制说明#
- 数据源:搜油价网
https://www.soyoujia.cn/(首页有「距下次调整还有 N 天(M月D日)」倒计时,省份页有近 3 个月调价表)。 - 调价规律:发改委调价日 17:00 左右发布调价通知(要调价时;搁浅时 15:00 左右),24 时生效。默认 17:00 查询。
- 动态调度:脚本每次跑完把 crontab 里的调度行重写为下一次调价窗口日(只写一条,不克隆旧行,并有
crontab.bak备份)。 - 防漏:窗口日 17:00 若页面还没更新,自动改到次日 08:00 补查一次;非调价日误触发只校准日期、不推送。
- 推送内容:新价格(89/92/95/98 汽油 + 0 号柴油)、较上次涨跌幅、下一次调价窗口日。
通知(可选)#
默认推送到 OneBot 兼容网关(如 NapCat / Lagrange 的 HTTP API)。在 oil_notify_config.json 填:
{
"qq_user_id": "123456789",
"one_bot_url": "http://127.0.0.1:3000/send_private_msg",
"one_bot_token": "你的OneBot访问token"
}
不想要推送时把 qq_user_id 留空,脚本只写日志不发送。cron 行里不写任何密钥,token 只放在 oil_notify_config.json(该文件不要分享给任何人)。
用途与依赖
作者没写,这些是平台读文件后整理的,以文件为准。
使用示例
请求:帮我把这个油价提醒装到 ~/oil-notify,调价那天推到我的 QQ 上。
预期
把文件夹放到 ~/oil-notify,复制 oil_notify_config.json.example 为 oil_notify_config.json,填入 qq_user_id、one_bot_url、one_bot_token;先执行 python3 oil_notify.py 验证一次,脚本会抓取搜油价网首页算出生效日与窗口日,写入日志,并把 crontab 中 oil_notify 那一行设为下次窗口日 17:00。之后每到窗口日运行:若省份页最新调价行日期在当天前后 1 天内,就推送一条包含各油品新价格、涨跌幅和下次窗口日的 QQ 消息,并把 cron 改到下一个窗口日;若通知还没出,改到次日 08:00 补查,不推送。想先看效果可以用 --dry-run 或 --sim-date 2026-11-12。
- 适用场景
- 想在每次油价调整通知发布后第一时间收到 QQ 提醒
- 希望提醒任务只在调价窗口日运行、不常驻轮询
- 需要把调价日调度自动滚动到下一次窗口日,不用手动改 cron
- 想先手动跑一次或模拟指定日期,验证各分支是否正常
- 想把推送目标从默认的本地 OneBot 网关改成自己的地址和 token
- 输入
- 技能文件夹的部署位置(例如 ~/oil-notify)
- 接收提醒的 QQ 号(qq_user_id 或环境变量 QQ_USER_ID)
- OneBot 推送接口地址(one_bot_url,默认 http://127.0.0.1:3000/send_private_msg)
- OneBot 访问 token(one_bot_token 或环境变量 ONE_BOT_TOKEN)
- 是否启用推送(qq_user_id 留空则只写日志不发送)
- 可选:用 --sim-date 指定的模拟日期用于测试
- 输出
- 一条 QQ 私聊消息:各油品新价格、较上次涨跌幅、下一次调价窗口日(仅在通知已发布时发送)
- oil_notify.log 运行日志(抓取结果、窗口日判断、cron 改写结果、推送响应)
- 被重写后的用户 crontab,其中 oil_notify 调度行指向下一次窗口日 17:00 或次日 08:00
- crontab.bak,改写前的 crontab 备份
- 运行环境
- Python 3(仅用标准库),需系统提供 crontab 命令并由 cron 定时触发
- 依赖
- 无需第三方 Python 包
- 系统 cron / crontab 命令
- OneBot 兼容网关(如 NapCat、Lagrange 的 HTTP API),仅推送时需要

