工商银行黄金价格监控与推送脚本

这是一个基于 Node.js 的自动化脚本用于定时监控中国工商银行ICBC官网的黄金递延T+D价格并通过 ServerChan方糖服务将价格提醒推送至微信。脚本支持价格突破报警、多维度趋势分析、防骚扰冷却机制以及收盘价记录等功能。

核心功能

  • 定时抓取:自动请求工商银行黄金价格页面,并使用 axios + cheerio 解析实时价格(无需浏览器)。
  • 智能推送
    • 变化触发:当价格在设定时间窗口内波动超过阈值时推送。
    • 特殊价位:可设置一组目标价位,当价格“穿过”任一目标价时立即推送特殊提醒。
    • 收盘推送:在每日收盘时段(可配置)自动记录并推送收盘价。
  • 趋势分析:自动计算并报告一小时变化量、七日变化量,以及七日、十四日、二十八日的价格趋势(上涨/下跌/持平)。
  • 灵活配置:所有运行参数(如采样间隔、价格阈值、禁用时段、冷却时间等)均在脚本内 CONFIG 对象中集中管理,易于修改。
  • 数据持久化:自动将价格历史、收盘价、开盘价及推送状态保存至本地 JSON 文件。
  • 多Key推送:支持配置多个 ServerChan SendKey向多个微信终端同时推送消息。

🚀 快速开始

1. 获取项目

git clone http://43.135.34.133:53000/LiuEnder/goldworm_js
cd gold-price-monitor

2. 安装项目依赖

npm install

此步骤将安装 axioscheerioserverchan-sdk

3. 配置环境变量

脚本运行需要一个关键环境变量:

  1. ServerChan 推送密钥 (PUSH_KEYT)
    • 前往 https://sc3.ft07.com/ 登录并获取您的 SendKey
    • 设置环境变量以下为Linux/macOS示例永久生效请添加到 ~/.bashrc~/.zshrc
    export PUSH_KEYT="SCTxxxxxx...你的SendKey"
    # 如果需要配置多个Key用分号(;)分隔
    # export PUSH_KEYT="Key1;Key2;Key3"
    

4. 运行脚本

# 直接运行一次(测试用)
node GoldPriceV6cooldown.js

# 或使用 npm 脚本
npm start

首次运行会创建数据文件 gold_data.json 并开始监控。检查控制台输出以确认运行成功。

⚙️ 详细配置

脚本的主要行为由文件顶部的 CONFIG 对象控制。您可以根据需要修改:

const CONFIG = {
  changeThresholdYuan: 1.0, // 触发普通推送的1小时价格变化阈值元/克)
  changeWindowMinutes: 60,  // 计算变化量的时间窗口(分钟)
  sampleIntervalMinutes: 2, // 抓取价格的采样间隔(分钟)
  pricePrecisionDigits: 2,  // 价格显示和计算的小数位数
  enableTimedPush: true,    // 是否启用定时推送(变化触发和收盘推送)
  enableSpecialAlert: true, // 是否启用特殊价格提醒
  pushIntervalMinutes: 60,  // 普通推送的最小间隔(分钟),防骚扰
  forcePushTest: false,     // 设为 true 可测试推送功能,运行一次即退出
  disabledWindows: [12001500], // 禁止推送的时间段,格式 [开始时间结束时间],如 12001500 表示 12:00-15:00
  enableSpecialForcePush: true, // 特殊价格提醒是否忽略禁用时间段
  enableSpecialBypassInterval: true, // 特殊价格提醒是否忽略推送间隔限制
  coolDownMinutesForSinglePrice: 90, // 单个特殊价位的默认冷却时间(分钟)
  resetOtherSpecialCooldownOnHit: true, // 触发一个特殊价位时,是否重置其他价位的冷却
  // 为特定价位设置独立的冷却时间(分钟),未配置的价位使用默认值
  specialPriceCoolDownMinutes: {
    // “600”: 120, // 例如当价格达到600元时冷却时间设为120分钟
  },
};

特殊价格目标设置CONFIG 对象下方,找到 SPECIAL_PRICE_TARGETS 数组,将您关心的价位填入。

const SPECIAL_PRICE_TARGETS = [500, 520, 550]; // 例如设置500、520、550元为目标价位

🏃 生产环境部署

建议使用进程管理工具(如 PM2)来保证脚本持续运行。

  1. 全局安装 PM2

    npm install -g pm2
    
  2. 使用 PM2 启动服务(确保已在项目目录中):

    # 启动并命名进程
    pm2 start GoldPriceV6cooldown.js --name gold-monitor
    # 设置开机自启根据PM2提示操作
    pm2 startup
    pm2 save
    
  3. 常用 PM2 命令

    pm2 logs gold-monitor      # 查看实时日志
    pm2 status                 # 查看所有进程状态
    pm2 stop gold-monitor     # 停止服务
    pm2 restart gold-monitor  # 重启服务
    pm2 monit                 # 打开监控面板
    

通过 Crontab 或青龙面板调度 如果您希望脚本在特定时间运行(而非持续后台运行),可以配置定时任务。例如,每天在交易时间运行:

# 每天9点到22点每30分钟运行一次
*/30 9-22 * * * cd /path/to/your/project && node GoldPriceV6cooldown.js >> /tmp/gold_monitor.log 2>&1

请注意,脚本内部已包含定时循环逻辑 (sampleIntervalMinutes)如果通过外部Cron调用通常只需调用一次脚本会自行循环并在收盘时间退出。

📁 文件说明

  • GoldPriceV6cooldown.js - 主脚本文件
  • gold_data.json - 运行时自动生成的数据文件(记录价格历史、推送状态等)
  • package.json - 项目依赖定义
  • .gitignore - Git忽略文件配置
  • README.md - 本说明文件

⚠️ 重要注意事项

  1. 合规使用:本工具仅用于个人学习与技术研究。请合理设置请求频率,避免对工商银行服务器造成不必要的压力。使用请遵守网站相关规定。
  2. 选择器更新:如果目标网页结构改版,可能需要更新脚本中的 PRICE_SELECTOR 变量。您可以使用浏览器的开发者工具检查元素。
  3. 推送频率限制:免费版 ServerChan 有推送次数限制,请合理配置 pushIntervalMinutescoolDownMinutesForSinglePrice 等参数。
  4. 环境变量安全:务必通过环境变量设置 PUSH_KEYT,切勿将其直接写入代码或提交至版本库。

🔧 故障排查

  • 抓取失败/解析失败:确认网络可访问目标页面;如果网页结构改版,检查并更新脚本中的 PRICE_SELECTOR
  • 无推送:检查 PUSH_KEYT 环境变量是否设置正确;查看控制台日志确认价格是否成功抓取及触发条件是否满足。
  • 推送过于频繁:调整 CONFIG.pushIntervalMinutesCONFIG.changeThresholdYuan 参数。

📄 开源协议

本项目基于 GPLv3 协议开源。

Description
No description provided
Readme GPL-3.0 125 KiB
Languages
JavaScript 62.2%
HTML 37.8%