以下是青龙代码 有使用方法自己查看
/**
* 芒果盒登录+看广告回调脚本(青龙面板专用)
* 环境变量配置:
* 变量名:lw
* 变量值格式:单账号→131448213387&qwerasd123;多账号→131448213387&qwerasd123#13800138000&12345678
* 核心逻辑:登录获取userId → 循环调用看广告回调接口(随机transid、动态sig)
*/
const axios = require('axios');
const crypto = require('crypto'); // 内置MD5加密,无需额外安装
const https = require('https');
// -------------------------- 配置项 --------------------------
// 登录接口
const LOGIN_URL = 'https://m.mangguohe.cn/apichat-v2-test/auth/login';
// 看广告回调接口
const CALLBACK_URL = 'https://api.adarea.net/api/adver/callback/txCallBackSupplement';
// 固定PID/APPID(和原Python脚本一致)
const PID = "7227762734453008";
const APPID = "1206508148";
// 循环间隔(秒):避免高频请求被封
const LOOP_INTERVAL = 5;
// 随机transid明文长度
const RANDOM_PLAIN_LENGTH = 12;
// -------------------------- 工具函数 --------------------------
/**
* MD5加密(32位小写)
* @param {string} plainText 明文
* @returns {string} MD5加密结果
*/
function md5Encrypt(plainText) {
return crypto.createHash('md5').update(plainText, 'utf8').digest('hex');
}
/**
* 生成随机字符串(字母+数字)
* @param {number} length 长度
* @returns {string} 随机字符串
*/
function generateRandomStr(length = 12) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let result = '';
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
return result;
}
/**
* 格式化当前日期为 YYYY-MM-DD HH:mm:ss
* @returns {string} 格式化后的日期
*/
function formatCurrentDate() {
const date = new Date();
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// -------------------------- 登录函数 --------------------------
/**
* 单个账号登录
* @param {string} phone 手机号
* @param {string} password 密码
* @returns {Promise<Object>} 登录结果(含userId/accessToken)
*/
async function login(phone, password) {
const headers = {
'Accept-Encoding': 'gzip',
'Connection': 'Keep-Alive',
'Content-Type': 'application/json; charset=utf-8',
'Host': 'm.mangguohe.cn',
'User-Agent': 'okhttp/4.12.0'
};
const requestBody = {
phone: phone,
password: password,
deviceInfo: null
};
try {
console.log(`\n【${phone}】开始登录...`);
const response = await axios({
method: 'post',
url: LOGIN_URL,
headers: headers,
data: requestBody,
timeout: 10000,
httpsAgent: new https.Agent({ rejectUnauthorized: false })
});
const resData = response.data;
if (resData.code === 200 && resData.data) {
const { userId, accessToken, nickname } = resData.data;
console.log(`【${phone}】登录成功!昵称:${nickname} | userId:${userId}`);
return {
success: true,
phone: phone,
userId: userId,
accessToken: accessToken
};
} else {
console.log(`【${phone}】登录失败:${resData.message || '接口返回异常'}`);
return { success: false, phone: phone, error: resData.message };
}
} catch (error) {
const errorMsg = error.code === 'ECONNABORTED' ? '请求超时' :
error.response ? `HTTP${error.response.status}:${JSON.stringify(error.response.data)}` :
error.message || '网络异常';
console.log(`【${phone}】登录异常:${errorMsg}`);
return { success: false, phone: phone, error: errorMsg };
}
}
// -------------------------- 看广告回调函数 --------------------------
/**
* 循环调用看广告回调接口
* @param {string} phone 手机号(日志用)
* @param {string} userId 登录获取的userId
*/
async function runAdCallback(phone, userId) {
console.log(`\n【${phone}】开始循环调用看广告回调接口(间隔${LOOP_INTERVAL}秒)`);
console.log(`【${phone}】按 Ctrl+C 可终止,青龙面板可手动停止脚本`);
// 无限循环执行
while (true) {
try {
// 1. 生成随机transid
const randomPlain = generateRandomStr(RANDOM_PLAIN_LENGTH);
const transid = md5Encrypt(randomPlain);
// 2. 动态日期 + 生成sig
const date = formatCurrentDate();
const sigPlain = `${transid}:${PID}:${date}`;
const sig = md5Encrypt(sigPlain);
// 3. 构造回调请求体/请求头
const callbackHeaders = {
'Accept-Encoding': 'gzip',
'Connection': 'Keep-Alive',
'Content-Type': 'application/json; charset=utf-8',
'Host': 'api.adarea.net',
'User-Agent': 'okhttp/4.12.0',
'source': 'android'
};
const callbackBody = {
date: date,
sig: sig,
transid: transid,
appid: APPID,
pid: PID,
userid: userId, // 登录获取的userId
extrainfo: JSON.stringify({
yf_appid: APPID,
userId: userId,
yf_pid: PID
})
};
// 4. 发送回调请求
console.log(`\n【${phone}】${date} 执行回调请求`);
console.log(`【${phone}】transid:${transid} | sig:${sig}`);
const response = await axios({
method: 'post',
url: CALLBACK_URL,
headers: callbackHeaders,
data: callbackBody,
timeout: 10000,
httpsAgent: new https.Agent({ rejectUnauthorized: false })
});
console.log(`【${phone}】回调响应:状态码${response.status} | 内容${JSON.stringify(response.data)}`);
} catch (error) {
// 单次回调失败,不终止循环
const errorMsg = error.code === 'ECONNABORTED' ? '请求超时' :
error.response ? `HTTP${error.response.status}:${JSON.stringify(error.response.data)}` :
error.message || '回调接口异常';
console.log(`\n【${phone}】回调请求失败:${errorMsg}`);
}
// 间隔指定秒数后继续
await new Promise(resolve => setTimeout(resolve, LOOP_INTERVAL * 1000));
}
}
// -------------------------- 主函数 --------------------------
async function main() {
console.log('========== 芒果盒登录+看广告回调脚本开始 ==========');
// 读取青龙环境变量
const lwEnv = process.env.lw;
if (!lwEnv) {
console.error('❌ 未配置环境变量 lw!格式:手机号&密码#手机号&密码');
return;
}
// 解析多账号
const accountList = lwEnv.split('#');
console.log(`📌 共读取${accountList.length}个账号,开始处理...`);
// 遍历每个账号
for (const account of accountList) {
const [phone, password] = account.split('&');
if (!phone || !password) {
console.log(`\n❌ 账号格式错误:${account}(需为 手机号&密码)`);
continue;
}
// 先登录
const loginResult = await login(phone, password);
if (!loginResult.success) {
console.log(`【${phone}】跳过回调执行`);
continue;
}
// 登录成功后,执行回调循环(独立执行,不阻塞其他账号)
runAdCallback(phone, loginResult.userId).catch(err => {
console.log(`【${phone}】回调循环异常终止:${err.message}`);
});
// 账号间延迟,避免登录请求高频
await new Promise(resolve => setTimeout(resolve, 2000));
}
// 防止脚本退出(因为回调是无限循环)
await new Promise(() => {});
}
// 执行主函数
main().catch(err => {
console.error('❌ 脚本全局异常:', err.message);
});
![图片[1]-领微(无限积分)好像已经修复了-暴富社区](https://test.fukit.cn/autoupload/f/cYrp9hTdWD7eQWbwlhdB5diO_OyvX7mIgxFBfDMDErs/20260306/fv6O/749X1111/7bb21e7a5fdd2274083c69a0d94513cd.jpg/webp)
© 版权声明
THE END













暂无评论内容