Initial Qinglong script classification corpus

This commit is contained in:
Hermes Agent
2026-05-23 18:48:48 +00:00
commit 5b4854515c
32 changed files with 15496 additions and 0 deletions

View File

@@ -0,0 +1,584 @@
// # Source: https://github.com/DearSong15/ql-scripts/blob/main/zsp_video.js
// # Raw: https://raw.githubusercontent.com/DearSong15/ql-scripts/main/zsp_video.js
// # Repo: DearSong15/ql-scripts
// # Path: zsp_video.js
// # UploadedAt: 2026-05-11T15:03:30Z
// # SHA256: 960b2e28799c40a00eb4bd75dcda1e61b3ab747374716073995c75053c3083ee
// # Category: web版/账密
// # Evidence: web/H5关键词 + username/password/login
//
//走个码吧,谢谢兄弟们了
//后台注册地址https://zsp.99panel.top/#/register?inviteCode=lzwbaleD
//前台https://a.zsp55.app/
//变量格式:备注#SecretId#SecretKey#deviceld
const ENV_NAME = "中视频";
const USER_AGENT = "Mozilla/5.0 (Linux; Android 15; 23013RK75C Build/AQ3A.250226.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.260 Mobile Safari/537.36 (Immersed/39.42857) Html5Plus/1.0";
const BASE_URL = "https://x1.zsptv.online";
// 工具函数
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// HTTP请求函数
async function httpRequest(options) {
return new Promise((resolve, reject) => {
const url = new URL(options.url);
const https = url.protocol === 'https:' ? require('https') : require('http');
const req = https.request({
hostname: url.hostname,
port: url.port || (url.protocol === 'https:' ? 443 : 80),
path: url.pathname + url.search,
method: options.method || 'GET',
headers: options.headers || {}
}, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
// 调试:记录响应
if (res.statusCode === 403) {
console.log(`🔍 响应体: ${data.substring(0, 200)}...`);
}
resolve({
statusCode: res.statusCode,
headers: res.headers,
body: data
});
});
});
req.on('error', (err) => {
reject(err);
});
if (options.body) {
req.write(options.body);
}
req.end();
});
}
// Unicode解码函数
function decodeUnicode(str) {
if (!str) return '';
return str.replace(/\\u[\dA-F]{4}/gi,
match => String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16)));
}
// 主函数
async function main() {
console.log(`🔔 脚本开始运行,时间: ${new Date().toLocaleString()}\n`);
// 读取环境变量
const accounts = loadAccounts();
if (accounts.length === 0) {
console.log("❌ 未找到有效的账号配置,请检查环境变量格式!");
return;
}
console.log(`✅ 找到 ${accounts.length} 个账号\n`);
// 遍历所有账号
for (let i = 0; i < accounts.length; i++) {
const account = accounts[i];
console.log(`\n📱 开始处理账号 ${i+1}: ${account.remark}`);
console.log("=".repeat(30));
try {
await processAccount(account);
} catch (error) {
console.log(`❌ 处理账号 ${account.remark} 时出错: ${error.message}`);
}
// 账号间延迟
if (i < accounts.length - 1) {
console.log("\n⏳ 等待5秒后处理下一个账号...");
await wait(5000);
}
}
console.log(`\n🎉 所有账号处理完成!`);
}
// 加载账号信息
function loadAccounts() {
const accounts = [];
// 尝试从不同环境变量名称读取
const envNames = ['ZSP', 'AD_WATCH_ACCOUNTS'];
let envValue = '';
for (const envName of envNames) {
if (process.env[envName]) {
envValue = process.env[envName];
console.log(`📋 从环境变量 ${envName} 读取配置`);
break;
}
}
if (!envValue) {
console.log("⚠️ 请设置环境变量 ZSP 或 AD_WATCH_ACCOUNTS");
return accounts;
}
const accountStrs = envValue.split("\n").filter(str => str.trim());
for (const str of accountStrs) {
const parts = str.split("#");
if (parts.length >= 4) {
accounts.push({
remark: parts[0] || "未命名账号",
secretId: parts[1],
secretKey: parts[2],
deviceId: parts[3]
});
console.log(`✅ 加载账号: ${parts[0] || "未命名账号"}`);
} else {
console.log(`⚠️ 忽略格式错误的环境变量: ${str}`);
}
}
return accounts;
}
// 处理单个账号
async function processAccount(account) {
// 1. 登录获取token
const token = await login(account);
if (!token) {
console.log("❌ 登录失败,跳过此账号");
return;
}
console.log(`✅ 登录成功token获取完成`);
// 2. 检测并执行签到
const signed = await checkAndSign(token, account);
if (!signed) {
console.log("❌ 签到失败,跳过广告任务");
return;
}
console.log(`\n📺 开始执行广告观看任务`);
console.log("-".repeat(30));
let successCount = 0;
let failCount = 0;
let totalReward = 0;
let consecutiveErrors = 0;
const maxAds = 50; // 最多执行50次广告任务
for (let adCount = 0; adCount < maxAds; adCount++) {
console.log(`\n🔄 第 ${adCount + 1}/${maxAds} 次广告任务`);
// 如果连续出现3次错误重新登录获取新token
if (consecutiveErrors >= 3) {
console.log("⚠️ 连续3次错误尝试重新登录...");
const newToken = await login(account);
if (newToken) {
token = newToken;
console.log("✅ 重新登录成功,继续任务");
consecutiveErrors = 0;
} else {
console.log("❌ 重新登录失败,跳过此账号");
break;
}
}
try {
// 获取广告信息
const adInfo = await getNextAd(token, account);
if (!adInfo) {
console.log(` ⚠️ 获取广告失败`);
failCount++;
consecutiveErrors++;
await wait(3000);
continue;
}
console.log(` 📱 广告标题: ${adInfo.title}`);
console.log(` ⏱️ 需要观看: ${adInfo.duration}`);
console.log(` 🪙 预期奖励: ${adInfo.reward || 0}`);
// 开始播放广告
console.log(` ▶️ 开始播放广告...`);
const playResult = await claimReward(token, account, adInfo.id, adInfo.duration);
if (playResult && playResult.success) {
console.log(` ✅ 广告观看成功!`);
console.log(` 💰 获得奖励: ${playResult.reward || 0}`);
successCount++;
totalReward += parseInt(playResult.reward) || 0;
consecutiveErrors = 0; // 重置错误计数
// 任务间延迟 (避免请求过快)
if (adCount < maxAds - 1) {
const randomDelay = Math.floor(Math.random() * 3000) + 3000; // 3-6秒随机延迟
console.log(` ⏳ 等待${Math.round(randomDelay/1000)}秒后处理下一个广告...`);
await wait(randomDelay);
}
} else {
console.log(` ❌ 广告观看失败`);
failCount++;
consecutiveErrors++;
await wait(3000);
}
} catch (error) {
console.log(` ❌ 广告任务出错: ${error.message}`);
failCount++;
consecutiveErrors++;
await wait(3000);
}
}
console.log("\n" + "=".repeat(30));
console.log(`📊 任务完成统计:`);
console.log(` ✅ 成功: ${successCount}`);
console.log(` ❌ 失败: ${failCount}`);
console.log(` 💰 总计奖励: ${totalReward}`);
console.log(` 📈 成功率: ${((successCount/maxAds)*100).toFixed(1)}%`);
}
// 登录接口
async function login(account) {
const url = `${BASE_URL}/api/app/v1/auth/secretKeyLogin`;
const body = {
secretId: account.secretId,
secretKey: account.secretKey
};
const headers = {
"Accept": "*/*",
"User-Agent": USER_AGENT,
"app-device": JSON.stringify({
"id": account.deviceId,
"brand": "xiaomi",
"model": "23013RK75C",
"platform": "android",
"system": "Android 15"
}),
"Content-Type": "application/json",
"Host": "x1.zsptv.online"
};
try {
const response = await httpRequest({
url: url,
method: "POST",
headers: headers,
body: JSON.stringify(body)
});
if (response.statusCode !== 200) {
console.log(`❌ 登录请求失败,状态码: ${response.statusCode}`);
return null;
}
const data = JSON.parse(response.body);
if (data.code === 0 && data.data && data.data.token) {
return data.data.token;
} else {
console.log(`❌ 登录失败: ${data.message || "未知错误"}`);
return null;
}
} catch (error) {
console.log(`❌ 登录请求失败: ${error.message}`);
return null;
}
}
// 检测并执行签到
async function checkAndSign(token, account) {
const url = `${BASE_URL}/api/app/v1/device/userSign`;
const headers = {
"Accept": "*/*",
"User-Agent": USER_AGENT,
"Authorization": `Bearer ${token}`,
"app-device": JSON.stringify({
"id": account.deviceId,
"brand": "xiaomi",
"model": "23013RK75C",
"platform": "android",
"system": "Android 15"
}),
"Content-Type": "application/json",
"Host": "x1.zsptv.online"
};
try {
const response = await httpRequest({
url: url,
method: "POST",
headers: headers,
body: "{}"
});
if (response.statusCode !== 200) {
console.log(`❌ 签到请求失败,状态码: ${response.statusCode}`);
return false;
}
const data = JSON.parse(response.body);
if (data.code === 0) {
const message = decodeUnicode(data.message);
console.log(`✅ 签到结果: ${message}`);
if (data.data) {
console.log(` 🪙 获得签到金币: ${data.data.qiandao_money || 0}`);
console.log(` 📅 连续签到天数: ${data.data.continuousDays || 1}`);
}
return true;
} else {
const errorMsg = decodeUnicode(data.message || "未知错误");
console.log(`❌ 签到失败: ${errorMsg}`);
// 如果已签到也返回true继续执行广告任务
if (errorMsg && errorMsg.includes("已签到")) {
console.log(` 今日已签到,继续执行广告任务`);
return true;
}
return false;
}
} catch (error) {
console.log(`❌ 签到请求失败: ${error.message}`);
return false;
}
}
// 获取下一个广告
async function getNextAd(token, account) {
const url = `${BASE_URL}/api/app/v1/ad/next`;
const headers = {
"Accept": "*/*",
"User-Agent": USER_AGENT,
"Authorization": `Bearer ${token}`,
"app-device": JSON.stringify({
"id": account.deviceId,
"brand": "xiaomi",
"model": "23013RK75C",
"platform": "android",
"system": "Android 15"
}),
"Content-Type": "application/json",
"Host": "x1.zsptv.online"
};
try {
const response = await httpRequest({
url: url,
method: "GET",
headers: headers
});
if (response.statusCode !== 200) {
console.log(` ❌ 获取广告失败,状态码: ${response.statusCode}`);
if (response.body) {
const errorData = JSON.parse(response.body);
console.log(` 🔍 错误信息: ${errorData.message || "未知错误"}`);
}
return null;
}
const data = JSON.parse(response.body);
if (data.code === 0 && data.data && data.data.result) {
const ad = data.data.result;
return {
id: ad.id,
title: decodeUnicode(ad.title),
description: decodeUnicode(ad.description),
duration: parseInt(ad.video?.duration || 30), // 默认30秒
videoUrl: ad.video?.url || "",
playUrl: ad.video?.play_url || "",
reward: ad.reward
};
} else {
const errorMsg = decodeUnicode(data.message || "未知错误");
console.log(` ❌ 获取广告失败: ${errorMsg}`);
return null;
}
} catch (error) {
console.log(` ❌ 获取广告请求失败: ${error.message}`);
return null;
}
}
// 观看广告并获取奖励(整合播放和结束确认)
async function claimReward(token, account, adId, duration) {
const startTime = new Date().toISOString();
// 1. 开始播放广告
console.log(` 📅 播放开始时间: ${startTime}`);
const playResult = await startVideoPlay(token, account, adId, startTime);
if (!playResult || !playResult.playRecordId) {
console.log(` ❌ 广告播放开始失败`);
return { success: false };
}
console.log(` ✅ 播放开始成功! 记录ID: ${playResult.playRecordId}`);
console.log(` 💰 初始奖励: ${playResult.initialReward || 0}`);
// 2. 等待广告播放时间
const waitTime = duration * 1000;
console.log(` ⌛ 广告播放中,等待 ${duration} 秒...`);
await wait(waitTime);
// 3. 广告播放结束确认
console.log(` ⏹️ 广告播放完成,确认结束...`);
const endResult = await endVideoPlay(token, account, playResult.playRecordId);
if (endResult.success) {
console.log(` 🎉 广告观看完整流程完成!`);
return {
success: true,
reward: playResult.reward || 0,
playRecordId: playResult.playRecordId
};
} else {
console.log(` ⚠️ 广告观看完成,但结束确认失败`);
// 即使结束确认失败,也视为成功(因为已经播放完成)
return {
success: true,
reward: playResult.reward || 0,
playRecordId: playResult.playRecordId
};
}
}
// 开始播放广告
async function startVideoPlay(token, account, adId, playTime) {
const url = `${BASE_URL}/api/app/v1/ad/video/play`;
const body = {
clientIp: "",
deviceInfo: {
deviceId: account.deviceId,
platform: "android"
},
id: adId.toString(),
playTime: playTime
};
const headers = {
"Accept": "*/*",
"User-Agent": USER_AGENT,
"Authorization": `Bearer ${token}`,
"app-device": JSON.stringify({
"id": account.deviceId,
"brand": "xiaomi",
"model": "23013RK75C",
"platform": "android",
"system": "Android 15"
}),
"Content-Type": "application/json",
"Host": "x1.zsptv.online"
};
try {
const response = await httpRequest({
url: url,
method: "POST",
headers: headers,
body: JSON.stringify(body)
});
if (response.statusCode !== 200) {
console.log(` ❌ 开始播放广告失败,状态码: ${response.statusCode}`);
return null;
}
const data = JSON.parse(response.body);
if (data.code === 0 && data.data) {
return {
playRecordId: data.data.id,
initialReward: data.data.reward || 0,
reward: data.data.reward || 0
};
} else {
console.log(` ❌ 开始播放广告失败: ${data.message || "未知错误"}`);
return null;
}
} catch (error) {
console.log(` ❌ 开始播放广告请求失败: ${error.message}`);
return null;
}
}
// 结束广告播放
async function endVideoPlay(token, account, playRecordId) {
const url = `${BASE_URL}/api/app/v1/ad/video/ended`;
const endTime = new Date().toISOString();
const body = {
clientIp: "",
deviceInfo: {
deviceId: account.deviceId,
platform: "android"
},
id: playRecordId.toString(),
playTime: endTime
};
const headers = {
"Accept": "*/*",
"User-Agent": USER_AGENT,
"Authorization": `Bearer ${token}`,
"app-device": JSON.stringify({
"id": account.deviceId,
"brand": "xiaomi",
"model": "23013RK75C",
"platform": "android",
"system": "Android 15"
}),
"Content-Type": "application/json",
"Host": "x1.zsptv.online"
};
try {
const response = await httpRequest({
url: url,
method: "POST",
headers: headers,
body: JSON.stringify(body)
});
if (response.statusCode !== 200) {
console.log(` ⚠️ 广告结束确认失败,状态码: ${response.statusCode}`);
// 即使结束确认失败也返回成功避免403错误导致任务中断
return { success: true };
}
const data = JSON.parse(response.body);
if (data.code === 0) {
return { success: true };
} else {
console.log(` ⚠️ 广告结束确认返回异常: ${data.message || "未知错误"}`);
return { success: false };
}
} catch (error) {
console.log(` ⚠️ 广告结束确认请求失败: ${error.message}`);
return { success: false };
}
}
// 执行主函数
if (require.main === module) {
main().catch(console.error);
}