修正ssl连接功能;修改默认参数。
This commit is contained in:
32
GoldPrice.js
32
GoldPrice.js
@@ -1,31 +1,20 @@
|
||||
//我需要一个定时获取浏览器中黄金价格并推送到微信的程序
|
||||
//网站网址:https://mybank.icbc.com.cn/icbc/newperbank/perbank3/gold/goldaccrual_query_out.jsp
|
||||
//黄金价格在页面中,需要获取到黄金价格并推送到微信
|
||||
//黄金价格的selector为:#activeprice_080020000521
|
||||
//黄金价格的单位为:元/克
|
||||
//黄金价格的更新时间为:每半小时检测一次,变化量小于1元/克则不推送。
|
||||
//根据你的判断使用合适的算法计算价格趋势。
|
||||
//根据你的判断使用外部json储存或其他方式储存数据。
|
||||
//一个数组,记录三十天的收盘价格,用于计算七日价格变化量,七天价格趋势,十四天价格趋势,二十八天价格趋势,趋势类型:1.上涨 2.下跌 3.持平。
|
||||
//推送格式为:当前黄金价格为:xx元/克;一小时变化量为:xx元/克;七日价格变化量为:xx元/克;七日价格趋势为:xx;十四日价格趋势为:xx;二十八日价格趋势为:xx。
|
||||
//该脚本需要使用NodeJS编写,并使用Puppeteer库来获取页面内容。同时留出一个数组,用作特殊价格时的设置,当黄金价格达到该价格时,推送提醒。数组格式为:[价格1,价格2,价格3,价格4,价格5,价格6,价格7]
|
||||
//特殊提醒格式为:特殊提醒:黄金价格达到xx元/克;七日价格趋势:xx。
|
||||
//需要使用ServerChan来推送信息,ServerChan的sendkey使用环境变量,变量名为:PUSH_KEYT
|
||||
//程序每天由crontab定时启动,启动时间由外部的青龙面板设置,设置为每天晚上22:30后关闭。
|
||||
|
||||
// 此下为信息推送用程序例子
|
||||
// import {scSend} from 'serverchan-sdk';
|
||||
// const response = await scSend('sendkey', 'title', 'desp', { tags: '黄金价格' });
|
||||
// console.log('Response:', response);
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const axios = require('axios');
|
||||
const cheerio = require('cheerio');
|
||||
const https = require('https');
|
||||
const crypto = require('crypto');
|
||||
|
||||
const TARGET_URL = 'https://mybank.icbc.com.cn/icbc/newperbank/perbank3/gold/goldaccrual_query_out.jsp';
|
||||
const PRICE_SELECTOR = '#activeprice_080020000521';
|
||||
const DATA_FILE = path.join(__dirname, 'gold_data.json');
|
||||
|
||||
// 自定义 HTTPS Agent:允许不安全证书,并启用旧版 SSL 重协商兼容
|
||||
const insecureHttpsAgent = new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT || 0,
|
||||
});
|
||||
|
||||
// ServerChan Key 配置:优先使用直接设置,否则使用环境变量
|
||||
// 支持多个key,使用分号(;)分割
|
||||
const SERVER_CHAN_KEY_DIRECT = ''; // 直接设置 ServerChan Key,有值时禁用环境变量,多个key用分号分割
|
||||
@@ -39,9 +28,9 @@ const SPECIAL_PRICE_TARGETS = [];
|
||||
const CONFIG = {
|
||||
changeThresholdYuan: 1.0,
|
||||
changeWindowMinutes: 60,
|
||||
sampleIntervalMinutes: 2,
|
||||
sampleIntervalMinutes: 1,
|
||||
pricePrecisionDigits: 2,
|
||||
enableTimedPush: true, // 定时推送开关(变化量触发和收盘推送)
|
||||
enableTimedPush: false, // 定时推送开关(变化量触发和收盘推送)
|
||||
enableSpecialAlert: true, // 特殊价格提醒开关
|
||||
pushIntervalMinutes: 60, // 推送间隔(分钟),防止频繁推送
|
||||
forcePushTest: false, // 测试强制推送:为 true 时每次运行必推送一次并立即退出
|
||||
@@ -138,6 +127,7 @@ async function fetchCurrentPrice() {
|
||||
console.log('[gold] fetching html to parse price...');
|
||||
const resp = await axios.get(TARGET_URL, {
|
||||
timeout: 60000,
|
||||
httpsAgent: insecureHttpsAgent,
|
||||
headers: {
|
||||
// 部分站点会根据 UA 返回不同内容,给一个常见 UA 更稳
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
|
||||
|
||||
21
package-lock.json
generated
21
package-lock.json
generated
@@ -9,8 +9,9 @@
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.13.6",
|
||||
"cheerio": "^1.1.2",
|
||||
"serverchan-sdk": "^1.0.0"
|
||||
"cheerio": "^1.2.0",
|
||||
"npm-check-updates": "^19.6.3",
|
||||
"serverchan-sdk": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
@@ -22,6 +23,7 @@
|
||||
"version": "1.13.6",
|
||||
"resolved": "https://r.cnpmjs.org/axios/-/axios-1.13.6.tgz",
|
||||
"integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.11",
|
||||
"form-data": "^4.0.5",
|
||||
@@ -49,6 +51,7 @@
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://r.cnpmjs.org/cheerio/-/cheerio-1.2.0.tgz",
|
||||
"integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cheerio-select": "^2.1.0",
|
||||
"dom-serializer": "^2.0.0",
|
||||
@@ -476,6 +479,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/npm-check-updates": {
|
||||
"version": "19.6.3",
|
||||
"resolved": "https://r.cnpmjs.org/npm-check-updates/-/npm-check-updates-19.6.3.tgz",
|
||||
"integrity": "sha512-VAt9Bp26eLaymZ0nZyh5n/by+YZIuegXlvWR0yv1zBqd984f8VnEnBbn+1lS3nN5LyEjn62BJ+yYgzNSpb6Gzg==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"ncu": "build/cli.js",
|
||||
"npm-check-updates": "build/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.0.0",
|
||||
"npm": ">=8.12.1"
|
||||
}
|
||||
},
|
||||
"node_modules/nth-check": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://r.cnpmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
"name": "gold-price-monitor",
|
||||
"version": "1.0.0",
|
||||
"description": "A script to monitor ICBC gold price and push notifications via ServerChan.",
|
||||
"main": "GoldPriceV6cooldown.js",
|
||||
"main": "GoldPrice.js",
|
||||
"scripts": {
|
||||
"start": "node GoldPriceV6cooldown.js"
|
||||
"start": "node GoldPrice.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.13.6",
|
||||
"cheerio": "^1.1.2",
|
||||
"serverchan-sdk": "^1.0.0"
|
||||
"cheerio": "^1.2.0",
|
||||
"npm-check-updates": "^19.6.3",
|
||||
"serverchan-sdk": "^1.0.6"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user