修正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',
|
||||
|
||||
Reference in New Issue
Block a user