修复变量分割及token有效期

This commit is contained in:
CHERWING 2024-05-14 04:22:05 +08:00 committed by GitHub
parent c3fc6c00db
commit 9470ebe788
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -11,7 +11,7 @@
*/
//===============脚本版本=================//
let local_version = "2024.05.13";
let local_version = "2024.05.14";
//=======================================//
const APP_NAME = '网易生活研究社小程序'
const ENV_NAME = 'WYSHYJS'
@ -22,7 +22,7 @@ const Notify = 1 //0为关闭通知,1为打开通知,默认为1
const axios = require('axios');
const parser = require("@babel/parser");
const fs = require('fs');
// const path = require('path');
const path = require('path');
const xpath = require('xpath')
, XmldomParser = require('xmldom').DOMParser;
const domParser = new XmldomParser({
@ -51,6 +51,11 @@ let token_new = ''
let new_token = ''
let orderNum = ''
let signOperatingId = ''
let isLogin = false
let num = 0
let userToken = ''
let CASH_TOKEN = {}
let CASH_PATH = './WYSHYJS_cash.json'
console.log(`✨✨✨ ${APP_NAME} ✨✨✨
` +
@ -72,8 +77,11 @@ console.log(`✨✨✨ ${APP_NAME} ✨✨✨
'✨✨✨ @Author CHERWIN✨✨✨')
//=======================================//
UserCookieArr = ENV_SPLIT(UserCookie)
!(async () => {
if (!(await Envs())) {
if (!(UserCookieArr)) {
console.log(`未定义${ENV_NAME}变量`)
process.exit();
} else {
// 版本检测
await getVersion();
@ -94,16 +102,42 @@ console.log(`✨✨✨ ${APP_NAME} ✨✨✨
for (let index = 0; index < UserCookieArr.length; index++) {
one_msg = ''
let send_UID = ''
let num = index + 1
num = index + 1
Log(`\n================ 开始第 ${num} 个账号 --------------->>>>>`)
// console.log(UserCookieArr[index])
let split_info = UserCookieArr[index].split("@")
let split_info = UserCookieArr[index].split("@");
userId = split_info[0];
userToken = split_info[1];
CASH_TOKEN = readUserData(CASH_PATH);
if (!CASH_TOKEN[userId] || !CASH_TOKEN[userId]['envToken']) {
console.log('未发现envtoken缓存开始生成缓存文件');
const newData = {};
newData[userId] = {
"envToken": userToken
};
saveUserData(CASH_PATH, newData);
} else {
if (userToken != CASH_TOKEN[userId]['envToken']) {
console.log('环境变量有更新,开始更新缓存,使用新环境变量');
const newData = {};
newData[userId] = {
"envToken": userToken
};
saveUserData(CASH_PATH, newData);
userToken = split_info[1];
} else if (CASH_TOKEN[userId]['newToken']) {
console.log('存在newToken使用新token');
userToken = CASH_TOKEN[userId]['newToken'];
}
}
// console.log(userId)
// console.log(userToken)
let len_split_info = split_info.length
let last_info = split_info[len_split_info - 1]
// await getMemberInfo(2 * 1000);
delay()
await start();
await $.wait(2000);
@ -124,45 +158,6 @@ console.log(`✨✨✨ ${APP_NAME} ✨✨✨
.catch((e) => log(e))
.finally(() => $.done())
async function downloadFile(fileUrl, downloadPath) {
try {
const response = await axios({
method: 'get',
url: fileUrl,
responseType: 'stream' // 指定响应类型为流
});
// 创建可写流,用于保存下载的文件
const fileStream = fs.createWriteStream(downloadPath);
// 监听 'data' 事件,将数据写入文件流
response.data.pipe(fileStream);
// 返回 Promise在文件下载完成时 resolve
return new Promise((resolve, reject) => {
fileStream.on('finish', function() {
console.log('更新成功!✅,请重新运行脚本');
process.exit();
resolve();
});
// 监听 'error' 事件,处理错误
fileStream.on('error', function(err) {
console.error('更新失败❌,请手动更新:', error);
console.error('写入文件时发生错误:', err);
reject(err);
});
});
} catch (error) {
console.error('下载文件时发生错误:', error);
throw error;
}
}
/**
* 开始脚本
* @returns {Promise<boolean>}
@ -171,7 +166,7 @@ async function start() {
await getMemberInfo(2 * 1000);
await $.wait(2000)
if (userUnionid == '') {
if (isLogin == false) {
Log(`账号【${num}】登录异常,自动跳过任务!❌`);
return false;
}
@ -403,7 +398,7 @@ async function signResult(baseUrl, baseHost) {
let result = response.data
let success = result.success;
if (success == true) {
// console.log(result)
console.log(result)
let data = result.data
signResult = data.signResult
if (signResult == 1) {
@ -467,10 +462,23 @@ async function getMemberInfo(timeout = 2000) {
userPhone = result.phone
userUnionid = result.unionId
userOpenid = result.openid
Log(`>手机号:【${userPhone}】,登录成功: ✅ `)
// Log(`>手机号:【${userPhone}】`)
// Log(`>unionId【${userUnionid}】`)
// Log(`>openid【${userOpenid}】`)
let userNewToken = result.token
if (userPhone != undefined){
isLogin = true
Log(`>手机号:【${userPhone}】,登录成功: ✅ `)
const newData = {};
newData[userId] = {
"oldToken":userToken,
"newToken":userNewToken
};
saveUserData(CASH_PATH, newData)
// Log(`>手机号:【${userPhone}】`)
// Log(`>unionId【${userUnionid}】`)
// Log(`>openid【${userOpenid}】`)
}else{
isLogin = false
}
} else {
addNotifyStr(`登录失败❌,原因是:${data.msg}`, true)
}
@ -744,27 +752,31 @@ async function send_wxpusher(UID, send_msg, title, help = false) {
// ============================================变量检查============================================ \\
async function Envs() {
if (UserCookie) {
if (UserCookie.includes('&')) {
var amp_parts = UserCookie.split('&');
for (var i = 0; i < amp_parts.length; i++) {
if (amp_parts[i].includes('#')) {
var hash_parts = amp_parts[i].split('#');
for (var j = 0; j < hash_parts.length; j++) {
UserCookieArr.push(hash_parts[j]);
}
} else {
UserCookieArr.push(amp_parts[i]);
}
}
console.log(UserCookieArr)
return true;
} else if (UserCookie.includes('#')) {
hash_parts = UserCookie.split('#');
UserCookieArr.push(hash_parts);
console.log(UserCookieArr)
return true;
} else {
var out_str = UserCookie.toString();
UserCookieArr.push(out_str);
console.log(UserCookieArr)
return true;
}
} else {
console.log(`\n 系统变量【KWW】未定义❌`)
@ -772,6 +784,29 @@ async function Envs() {
}
return true;
}
function ENV_SPLIT(input_str) {
var parts = [];
if (input_str.includes('&')) {
var amp_parts = input_str.split('&');
for (var i = 0; i < amp_parts.length; i++) {
if (amp_parts[i].includes('#')) {
var hash_parts = amp_parts[i].split('#');
for (var j = 0; j < hash_parts.length; j++) {
parts.push(hash_parts[j]);
}
} else {
parts.push(amp_parts[i]);
}
}
return parts;
} else if (input_str.includes('#')) {
var hash_parts = input_str.split('#');
return hash_parts;
} else {
var out_str = input_str.toString();
return [out_str];
}
}
// ============================================发送消息============================================ \\
async function SendMsg(message) {
@ -852,6 +887,95 @@ function getUA() {
return `jdapp;iPhone;${$.appVersion};${$.osVersion};${$.UUID};M/5.0;${network};ADID/;model/${$.mobile};addressid/;appBuild/${$.build};jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS ${$.osVersion.replace(/\./g, "_")} like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1;`
}
function saveUserData(fileName, newData) {
try {
let data;
try {
// 读取现有的 JSON 文件(如果存在)
data = JSON.parse(fs.readFileSync(fileName, 'utf8'));
} catch (err) {
// 如果文件不存在,创建所需目录并一个新的空 JSON 文件
if (err.code === 'ENOENT') {
const directory = path.dirname(fileName);
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory, { recursive: true });
}
data = {};
} else {
throw err;
}
}
// 检查是否已存在相同的键,如果存在,合并数据
for (const key in newData) {
if (newData.hasOwnProperty(key)) {
if (data.hasOwnProperty(key)) {
// 如果键已存在,将新数据合并到现有数据中
Object.assign(data[key], newData[key]);
} else {
// 如果键不存在,直接插入新数据
data[key] = newData[key];
}
}
}
// 将更新后的数据写入 JSON 文件
fs.writeFileSync(fileName, JSON.stringify(data, null, 4));
console.log(`数据已保存到文件 ${fileName}`);
} catch (err) {
console.error(`保存数据到 ${fileName} 时发生错误:`, err);
}
}
// 读取用户数据
function readUserData(filename) {
try {
if (fs.existsSync(filename)) {
return JSON.parse(fs.readFileSync(filename, 'utf8'));
} else {
console.log(`文件 ${filename} 不存在,返回空对象`);
return {};
}
} catch (err) {
console.error(`读取 ${filename} 时发生错误:`, err);
return null;
}
}
async function downloadFile(fileUrl, downloadPath) {
try {
const response = await axios({
method: 'get',
url: fileUrl,
responseType: 'stream' // 指定响应类型为流
});
// 创建可写流,用于保存下载的文件
const fileStream = fs.createWriteStream(downloadPath);
// 监听 'data' 事件,将数据写入文件流
response.data.pipe(fileStream);
// 返回 Promise在文件下载完成时 resolve
return new Promise((resolve, reject) => {
fileStream.on('finish', function() {
console.log('更新成功!✅,请重新运行脚本');
process.exit();
resolve();
});
// 监听 'error' 事件,处理错误
fileStream.on('error', function(err) {
console.error('更新失败❌,请手动更新:', error);
console.error('写入文件时发生错误:', err);
reject(err);
});
});
} catch (error) {
console.error('下载文件时发生错误:', error);
throw error;
}
}
// ============================================签名加密============================================ \\
var i,
l = ["A", "Z", "B", "Y", "C", "X", "D", "T", "E", "S", "F", "R", "G", "Q", "H", "P", "I", "O", "J", "N", "k", "M", "L", "a", "c", "d", "f", "h", "k", "p", "y", "n"];