mirror of
https://github.com/smallfawn/QLScriptPublic.git
synced 2026-06-04 21:00:53 +08:00
This commit is contained in:
parent
46bf38d3db
commit
bd2055532b
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,3 +0,0 @@
|
||||
{
|
||||
"liveServer.settings.port": 5501
|
||||
}
|
||||
@ -1,10 +0,0 @@
|
||||
[
|
||||
{
|
||||
"AT": "",
|
||||
"RT": ""
|
||||
},
|
||||
{
|
||||
"AT": "",
|
||||
"RT": ""
|
||||
}
|
||||
]
|
||||
File diff suppressed because one or more lines are too long
1405
backup/gacmotor.js
1405
backup/gacmotor.js
File diff suppressed because one or more lines are too long
@ -1,8 +0,0 @@
|
||||
[
|
||||
{
|
||||
"acToken": "",
|
||||
"rtToken": "",
|
||||
"enData":"",
|
||||
"enKey":""
|
||||
}
|
||||
]
|
||||
209
ql.js
209
ql.js
@ -1,209 +0,0 @@
|
||||
'use strict';
|
||||
/*
|
||||
=========================
|
||||
qinglong api
|
||||
base qinglong project
|
||||
=========================
|
||||
*/
|
||||
const got = require('got');
|
||||
require('dotenv').config();
|
||||
const { readFile } = require('fs/promises');
|
||||
const path = require('path');
|
||||
|
||||
const qlDir = '/ql';
|
||||
const fs = require('fs');
|
||||
let Fileexists = fs.existsSync('/ql/data/config/auth.json');
|
||||
let authFile="";
|
||||
if (Fileexists)
|
||||
authFile="/ql/data/config/auth.json"
|
||||
else
|
||||
authFile="/ql/config/auth.json"
|
||||
//const authFile = path.join(qlDir, 'config/auth.json');
|
||||
|
||||
const api = got.extend({
|
||||
prefixUrl: 'http://127.0.0.1:5600',
|
||||
retry: { limit: 0 },
|
||||
});
|
||||
|
||||
async function getToken() {
|
||||
const authConfig = JSON.parse(await readFile(authFile));
|
||||
return authConfig.token;
|
||||
}
|
||||
|
||||
module.exports.getEnvs = async (envName) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
url: 'api/envs',
|
||||
searchParams: {
|
||||
searchValue: envName,
|
||||
t: Date.now(),
|
||||
},
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
},
|
||||
}).json();
|
||||
return body.data;
|
||||
};
|
||||
|
||||
module.exports.getEnvsCount = async () => {
|
||||
const data = await this.getEnvs();
|
||||
return data.length;
|
||||
};
|
||||
|
||||
module.exports.addEnv = async (cookie, remarks,envName) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
method: 'post',
|
||||
url: 'api/envs',
|
||||
params: { t: Date.now() },
|
||||
json: [{
|
||||
name: envName,
|
||||
value: cookie,
|
||||
remarks,
|
||||
}],
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
}).json();
|
||||
return body;
|
||||
};
|
||||
|
||||
module.exports.updateEnv = async (cookie, eid, remarks,envName) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
method: 'put',
|
||||
url: 'api/envs',
|
||||
params: { t: Date.now() },
|
||||
json: {
|
||||
name: envName,
|
||||
value: cookie,
|
||||
_id: eid,
|
||||
remarks,
|
||||
},
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
}).json();
|
||||
return body;
|
||||
};
|
||||
|
||||
module.exports.updateEnv11 = async (cookie, eid, remarks,envName) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
method: 'put',
|
||||
url: 'api/envs',
|
||||
params: { t: Date.now() },
|
||||
json: {
|
||||
name: envName,
|
||||
value: cookie,
|
||||
id: eid,
|
||||
remarks,
|
||||
},
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
}).json();
|
||||
return body;
|
||||
};
|
||||
|
||||
module.exports.DisableCk = async (eid) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
method: 'put',
|
||||
url: 'api/envs/disable',
|
||||
params: { t: Date.now() },
|
||||
body: JSON.stringify([eid]),
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
}).json();
|
||||
return body;
|
||||
};
|
||||
|
||||
module.exports.EnableCk = async (eid) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
method: 'put',
|
||||
url: 'api/envs/enable',
|
||||
params: { t: Date.now() },
|
||||
body: JSON.stringify([eid]),
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
}).json();
|
||||
return body;
|
||||
};
|
||||
|
||||
module.exports.getstatus = async(eid) => {
|
||||
const envs = await this.getEnvs();
|
||||
var tempid = 0;
|
||||
for (let i = 0; i < envs.length; i++) {
|
||||
tempid = 0;
|
||||
if (envs[i]._id) {
|
||||
tempid = envs[i]._id;
|
||||
}
|
||||
if (envs[i].id) {
|
||||
tempid = envs[i].id;
|
||||
}
|
||||
if (tempid == eid) {
|
||||
return envs[i].status;
|
||||
}
|
||||
}
|
||||
return 99;
|
||||
};
|
||||
|
||||
module.exports.getEnvById = async(eid) => {
|
||||
const envs = await this.getEnvs();
|
||||
var tempid = 0;
|
||||
for (let i = 0; i < envs.length; i++) {
|
||||
tempid = 0;
|
||||
if (envs[i]._id) {
|
||||
tempid = envs[i]._id;
|
||||
}
|
||||
if (envs[i].id) {
|
||||
tempid = envs[i].id;
|
||||
}
|
||||
if (tempid == eid) {
|
||||
return envs[i].value;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
};
|
||||
|
||||
/*module.exports.getEnvByCookie = async (cookie) => {
|
||||
const envs = await this.getEnvs();
|
||||
for (let i = 0; i < envs.length; i++) {
|
||||
var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
|
||||
if(tempptpin==cookie){
|
||||
return envs[i];
|
||||
}
|
||||
}
|
||||
return "";
|
||||
};*/
|
||||
|
||||
module.exports.delEnv = async (eid) => {
|
||||
const token = await getToken();
|
||||
const body = await api({
|
||||
method: 'delete',
|
||||
url: 'api/envs',
|
||||
params: { t: Date.now() },
|
||||
body: JSON.stringify([eid]),
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
}).json();
|
||||
return body;
|
||||
};
|
||||
233
quanzhan.py
233
quanzhan.py
@ -1,233 +0,0 @@
|
||||
|
||||
"""
|
||||
小程序搜 泉站大桶订水桶装水同城送水
|
||||
|
||||
变量 authcode # authorization #备注 (没有备注 也可以运行)
|
||||
变量名 qztoken
|
||||
项目 泉站订水
|
||||
|
||||
"""
|
||||
import os
|
||||
import requests
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
from io import StringIO
|
||||
|
||||
enable_notification =1 # 控制是否启用通知的变量 0 不发送 1 发
|
||||
|
||||
# 只有在需要发送通知时才尝试导入notify模块
|
||||
if enable_notification == 1:
|
||||
try:
|
||||
from notify import send
|
||||
except ModuleNotFoundError:
|
||||
print("警告:未找到notify.py模块。它不是一个依赖项,请勿错误安装。程序将退出。")
|
||||
sys.exit(1)
|
||||
|
||||
#---------解--的简化0.2框架--------
|
||||
# 配置参数
|
||||
base_url = "https://microuser.quanzhan888.com" # 实际的基础URL
|
||||
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309080f)XWEB/8519"
|
||||
|
||||
def get_beijing_date(): # 获取北京日期的函数
|
||||
beijing_time = datetime.now(timezone(timedelta(hours=8)))
|
||||
return beijing_time.date()
|
||||
|
||||
def timestamp_to_beijing_time(timestamp):
|
||||
utc_zone = timezone.utc
|
||||
beijing_zone = timezone(timedelta(hours=8))
|
||||
utc_time = datetime.fromtimestamp(timestamp, utc_zone)
|
||||
beijing_time = utc_time.astimezone(beijing_zone)
|
||||
return beijing_time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
def get_env_variable(var_name):
|
||||
value = os.getenv(var_name)
|
||||
if value is None:
|
||||
print(f'环境变量{var_name}未设置,请检查。')
|
||||
return None
|
||||
|
||||
accounts = value.strip().split('\n') # 使用 \n 分割
|
||||
num_accounts = len(accounts)
|
||||
print(f'-----------本次账号运行数量:{num_accounts}-----------')
|
||||
print(f'泉站大桶订水--QGh3amllamll ')
|
||||
|
||||
return accounts
|
||||
|
||||
#113.28824159502027
|
||||
#23.103660007697727
|
||||
def fz_hs(auth_code, authorization, user_agent, sign): #封装headers
|
||||
return {
|
||||
'Host': 'microuser.quanzhan888.com',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Length': '2',
|
||||
'charset': 'utf-8',
|
||||
'product': "shop",
|
||||
'authcode': auth_code,
|
||||
'authorization': authorization,
|
||||
'user-agent': user_agent,
|
||||
'sign': sign,
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
'platform': "wx",
|
||||
'x-requested-with': 'xmlhttprequest',
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
}
|
||||
|
||||
def wdqbsj(auth_code, authorization): # 个人信息/钱包
|
||||
url = f"{base_url}/user/get-wallet-info"
|
||||
headers = fz_hs(auth_code, authorization, user_agent, "99914b932bd37a50b983c5e7c90ae93b")
|
||||
data = json.dumps({}) # 发送空的JSON数据
|
||||
#print(url)
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, data=data)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
#print("解析的JSON数据:", response_data)
|
||||
|
||||
# 判断code并提取所需数据
|
||||
if response_data.get('code') == 0:
|
||||
user_id = response_data['data']['wallet_info'].get('user_id')
|
||||
total_balance = response_data['data']['wallet_info'].get('total_balance')
|
||||
today_income = response_data['data']['wallet_info'].get('today_income')
|
||||
#print(f"用户ID: {user_id}, 总余额: {total_balance}, 今日收入: {today_income}")
|
||||
print(f"🆔: {user_id}, 总💸: {total_balance}, 今日: {today_income}")
|
||||
|
||||
# 判断今日收入是否大于0
|
||||
if float(today_income) > 0:
|
||||
print("今日已有收入,不需要签到")
|
||||
#tj_sign(auth_code, authorization)#测试提交签到
|
||||
else:
|
||||
print("今日无收入,需要签到")
|
||||
tj_sign(auth_code, authorization)
|
||||
|
||||
|
||||
else:
|
||||
print("响应代码不为0,完整响应体:", response_data)
|
||||
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
|
||||
|
||||
def tj_sign(auth_code, authorization): # 提交签到
|
||||
url = f"{base_url}/user/do-sign"
|
||||
headers = fz_hs(auth_code, authorization, user_agent, "99914b932bd37a50b983c5e7c90ae93b")
|
||||
data = json.dumps({}) # 发送空的JSON数据
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, data=data)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
#print("解析的JSON数据:", response_data)
|
||||
|
||||
# 提取所需数据并转换时间戳
|
||||
if 'data' in response_data and len(response_data['data']) > 0:
|
||||
for item in response_data['data']:
|
||||
user_id = item.get('user_id')
|
||||
sign_date = timestamp_to_beijing_time(item.get('sign_date'))
|
||||
sign_time = timestamp_to_beijing_time(item.get('sign_time'))
|
||||
#print(f"用户: {user_id}, 签名日期: {sign_date}, 签到时间: {sign_time}")
|
||||
print(f" 签名日期: {sign_date}, 签到🎉: {sign_time}")
|
||||
return response_data
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
#------------通知开始-----------
|
||||
|
||||
class Tee:
|
||||
def __init__(self, *files):
|
||||
self.files = files
|
||||
|
||||
def write(self, obj):
|
||||
for file in self.files:
|
||||
file.write(obj)
|
||||
file.flush() # 确保及时输出
|
||||
|
||||
def flush(self):
|
||||
for file in self.files:
|
||||
file.flush()
|
||||
#------------通知结束-----------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
string_io = StringIO()
|
||||
original_stdout = sys.stdout
|
||||
|
||||
try:
|
||||
sys.stdout = Tee(sys.stdout, string_io)
|
||||
|
||||
var_name = 'qztoken' # 环境变量名
|
||||
accounts = get_env_variable(var_name)
|
||||
if not accounts:
|
||||
return
|
||||
|
||||
print(f'找到 {len(accounts)} 个账号的令牌。')
|
||||
total_tokens = len(accounts)
|
||||
|
||||
for index, account in enumerate(accounts, start=1):
|
||||
parts = account.split('#')
|
||||
auth_code, authorization = parts[0], parts[1]
|
||||
remark = None if len(parts) == 2 else parts[2] # 检查是否有备注
|
||||
|
||||
remark_info = f" --- 备注: {remark}" if remark else ""
|
||||
print(f"------账号 {index}/{total_tokens}{remark_info} ------")
|
||||
|
||||
wdqbsj(auth_code, authorization) # 个人信息/钱包
|
||||
|
||||
# 暂停3到5秒
|
||||
time.sleep(random.randint(3, 5))
|
||||
|
||||
finally:
|
||||
sys.stdout = original_stdout
|
||||
output_content = string_io.getvalue()
|
||||
|
||||
if enable_notification:
|
||||
send("-泉站大桶订水-通知", output_content)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
"""
|
||||
#本地测试用
|
||||
os.environ['qztoken'] = '''
|
||||
authcode # authorization
|
||||
|
||||
'''
|
||||
|
||||
def main():
|
||||
var_name = 'qztoken' # 环境变量名
|
||||
accounts = get_env_variable(var_name)
|
||||
if not accounts:
|
||||
return
|
||||
|
||||
print(f'找到 {len(accounts)} 个账号的令牌。')
|
||||
total_tokens = len(accounts)
|
||||
|
||||
for index, account in enumerate(accounts, start=1):
|
||||
parts = account.split('#')
|
||||
auth_code, authorization = parts[0], parts[1]
|
||||
remark = None if len(parts) == 2 else parts[2] # 检查是否有备注
|
||||
|
||||
remark_info = f" --- 备注: {remark}" if remark else ""
|
||||
print(f"------账号 {index}/{total_tokens}{remark_info} ------")
|
||||
|
||||
wdqbsj(auth_code, authorization)# 个人信息/钱包
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
"""
|
||||
427
quzanmi.js
427
quzanmi.js
@ -1,427 +0,0 @@
|
||||
|
||||
/**
|
||||
变量名 qzmCookie 抓包 x-qzm-token 每天0.6,满10提现,绑定支付宝时会自动提现0.3,秒到,
|
||||
*/
|
||||
|
||||
const $ = new ENV("趣攒米视频任务", ["qzmCookie"]);
|
||||
const cookieArr = $.qzmCookie.split("&");
|
||||
|
||||
class QZM {
|
||||
constructor(ck, index) {
|
||||
this.ck = ck.split("#")[0];
|
||||
this.index = ++index;
|
||||
this.oaid = this.randomString(16);
|
||||
this.androidId = this.randomString(16);
|
||||
}
|
||||
|
||||
randomString(length) {
|
||||
// const table = "0123456789ABCDEF";
|
||||
const table = "0123456789abcdef";
|
||||
const _0x5ddc9a = {
|
||||
length: length
|
||||
};
|
||||
return Array.from(_0x5ddc9a, () => table[Math.floor(Math.random() * table.length)]).join("");
|
||||
}
|
||||
|
||||
randomStringNum(length) {
|
||||
// const table = "0123456789ABCDEF";
|
||||
const table = "0123456789";
|
||||
const _0x5ddc9a = {
|
||||
length: length
|
||||
};
|
||||
return Array.from(_0x5ddc9a, () => table[Math.floor(Math.random() * table.length)]).join("");
|
||||
}
|
||||
|
||||
async main() {
|
||||
const info = await this.getUserInfo();
|
||||
if (!info) {
|
||||
return void 0;
|
||||
}
|
||||
try {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 获取任务列表`)
|
||||
const tasks = await this.taskList()
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 刷新令牌`)
|
||||
await this.access()
|
||||
for (const task of tasks) {
|
||||
const source = task.source;
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 开始任务 ${task.name}`)
|
||||
for (let i = 0; i < 10; i++) {
|
||||
try {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 假装看广告 ${i+1}`)
|
||||
await this.ecpm();
|
||||
}catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
await $.wait(10000)
|
||||
}
|
||||
try {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 领取奖励`)
|
||||
const re = await this.reward(source)
|
||||
if (re){
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 领取奖励成功`)
|
||||
}else {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 领取奖励失败`)
|
||||
}
|
||||
}catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
try {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 兑换金币`)
|
||||
await this.getUserInfo()
|
||||
if (this.point>=1000){
|
||||
await this.trade(this.point)
|
||||
}else {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 当前金币数量不可兑换`)
|
||||
}
|
||||
}catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async getUserInfo() {
|
||||
const options = {
|
||||
'method': 'GET',
|
||||
'url': 'https://api.quzanmi.com/api/user/info/mine',
|
||||
'headers': {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Origin': 'http://anh5.quzanmi.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'http://anh5.quzanmi.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950',
|
||||
'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-qzm-aid': `|${this.oaid}|${this.androidId}`,
|
||||
'x-qzm-bundle': 'com.zhangwen.quzanmi|Xiaomi|13|1.0.0',
|
||||
'x-qzm-device': 'android',
|
||||
'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(),
|
||||
'x-qzm-token': this.ck,
|
||||
}
|
||||
};
|
||||
const res = await $.request(options);
|
||||
if (res.code === 2000) {
|
||||
this.id = res.data.id;
|
||||
this.phone = res.data.phone_number;
|
||||
this.nickName = res.data.nickname;
|
||||
this.realName = res.data.realname;
|
||||
this.score = res.data.score;
|
||||
this.today_income = res.data.today_income;
|
||||
this.banlance = res.data.balance;
|
||||
this.payment_num = res.data.payment_num;
|
||||
this.point = res.data.point;
|
||||
this.total_balance = res.data.total_balance;
|
||||
// console.log( res.data)
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 真名: ${this.realName} 手机号: ${this.phone}`);
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 余额: ${this.banlance} 金币: ${this.point}`);
|
||||
return true;
|
||||
} else {
|
||||
$.log(`获取用户信息失败: ${res.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async taskList() {
|
||||
const options = {
|
||||
'method': 'GET',
|
||||
'url': 'https://api.quzanmi.com/api/ad/android/list',
|
||||
'headers': {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Origin': 'http://anh5.quzanmi.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'http://anh5.quzanmi.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950',
|
||||
'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-qzm-aid': `|${this.oaid}|${this.androidId}`,
|
||||
'x-qzm-bundle': 'com.zhangwen.quzanmi|Redmi|14|1.0.1',
|
||||
'x-qzm-device': 'android',
|
||||
'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(),
|
||||
'x-qzm-token': this.ck,
|
||||
}
|
||||
};
|
||||
const res = await $.request(options);
|
||||
if (res.code === 2000) {
|
||||
const list = res.data.filter(item => item.source.includes("videoad"));
|
||||
// console.log(list)
|
||||
return list
|
||||
} else {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 获取任务列表 ${res.msg}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async access() {
|
||||
const options = {
|
||||
'method': 'POST',
|
||||
'url': 'https://api.aibianxian.net/igame/api/v1.0/cplApi/access',
|
||||
'headers': {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Origin': 'http://anh5.quzanmi.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'http://anh5.quzanmi.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950',
|
||||
'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-qzm-aid': `|${this.oaid}|${this.androidId}`,
|
||||
'x-qzm-bundle': 'com.zhangwen.quzanmi|Redmi|14|1.0.1',
|
||||
'x-qzm-device': 'android',
|
||||
'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(),
|
||||
'x-qzm-token': this.ck,
|
||||
'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryZnyXeBEEvBYSL7mL'
|
||||
},
|
||||
formData: {
|
||||
'app_key': '142793900',
|
||||
'device': 'android',
|
||||
'device_info': this.oaid,
|
||||
'target_id': this.id
|
||||
}
|
||||
};
|
||||
const res = await $.request(options);
|
||||
// console.log(res)
|
||||
if (res.code == 200) {
|
||||
this.token = res.data.token;
|
||||
// console.log(this.token)
|
||||
return true
|
||||
} else {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 刷新令牌 ${res.msg}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
randomEcpm(min, max) {
|
||||
// 生成一个介于min和max之间的随机整数
|
||||
const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
// 将随机数转换为字符串
|
||||
return randomNumber.toString();
|
||||
}
|
||||
|
||||
async reward(source) {
|
||||
const options = {
|
||||
url: `https://api.quzanmi.com/api/ad/android/reward`,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Origin': 'http://anh5.quzanmi.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'http://anh5.quzanmi.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950',
|
||||
'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-qzm-aid': `|${this.oaid}|${this.androidId}`,
|
||||
'x-qzm-bundle': 'com.zhangwen.quzanmi|Redmi|14|1.0.1',
|
||||
'x-qzm-device': 'android',
|
||||
'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(),
|
||||
'x-qzm-token': this.ck,
|
||||
},
|
||||
body: JSON.stringify({"source": source})
|
||||
}
|
||||
const res = await $.request(options);
|
||||
if (res.code === 2000) {
|
||||
return true
|
||||
} else {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 领取奖励 ${res.msg}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async ecpm() {
|
||||
const options = {
|
||||
url: `https://api.quzanmi.com/api/ad/app/ecpm`,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Origin': 'http://anh5.quzanmi.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'http://anh5.quzanmi.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950',
|
||||
'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-qzm-aid': `|${this.oaid}|${this.androidId}`,
|
||||
'x-qzm-bundle': 'com.zhangwen.quzanmi|Redmi|14|1.0.1',
|
||||
'x-qzm-device': 'android',
|
||||
'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(),
|
||||
'x-qzm-token': this.ck,
|
||||
},
|
||||
body: JSON.stringify({"ecpm": this.randomEcpm(100000,800000)+".0", "source": "android", "kind": "rewardAd", "rit_id": "1"+this.randomStringNum(8)})
|
||||
}
|
||||
const res = await $.request(options);
|
||||
if (res.code === 2000) {
|
||||
return true
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async trade(point){
|
||||
const options = {
|
||||
url: 'https://api.quzanmi.com/api/user/point/trade',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive',
|
||||
'Origin': 'http://anh5.quzanmi.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Referer': 'http://anh5.quzanmi.com/',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950',
|
||||
'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
|
||||
'sec-ch-ua-mobile': '?1',
|
||||
'sec-ch-ua-platform': '"Android"',
|
||||
'x-qzm-aid': `|${this.oaid}|${this.androidId}`,
|
||||
'x-qzm-bundle': 'com.zhangwen.quzanmi|Redmi|14|1.0.1',
|
||||
'x-qzm-device': 'android',
|
||||
'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(),
|
||||
'x-qzm-token': this.ck,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
"point": Math.floor(point / 1000) * 1000
|
||||
})
|
||||
}
|
||||
// console.log(options)
|
||||
const res = await $.request(options);
|
||||
// console.log(res)
|
||||
if (res.code === 2000) {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 兑换金币成功`);
|
||||
return true
|
||||
} else {
|
||||
$.log(`账号[${this.index}]【${this.nickName}】 兑换金币 ${res.msg}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
(async () => {
|
||||
const qzm = [];
|
||||
for (const index in cookieArr) {
|
||||
qzm.push(new QZM(cookieArr[index], index));
|
||||
}
|
||||
|
||||
for (const qzmElement of qzm) {
|
||||
try {
|
||||
await qzmElement.main();
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
function ENV(name, envNames) {
|
||||
const request = require("request");
|
||||
const cryptoJS = require("crypto-js");
|
||||
return new class {
|
||||
constructor(name, envNames = []) {
|
||||
this.name = name;
|
||||
this.envNames = envNames;
|
||||
this.startTime = Date.now();
|
||||
this.logs = [];
|
||||
if (this.envNames.length > 0) {
|
||||
for (const envName of envNames) {
|
||||
this[envName] = process.env[envName];
|
||||
}
|
||||
}
|
||||
this.log(`🔔${this.name},开始!`)
|
||||
}
|
||||
|
||||
log(...args) {
|
||||
args.length > 0 && (this.logs = [...this.logs, ...args])
|
||||
console.log(...args)
|
||||
}
|
||||
|
||||
md5(str) {
|
||||
return cryptoJS.MD5(str).toString()
|
||||
}
|
||||
|
||||
sha256(str) {
|
||||
return cryptoJS.SHA256(str).toString()
|
||||
}
|
||||
|
||||
aesCBCEncrypt(data, key, iv) {
|
||||
const n = cryptoJS.enc.Hex.parse(key);
|
||||
const r = cryptoJS.enc.Hex.parse(iv);
|
||||
const o = cryptoJS.AES.encrypt(data, n, {
|
||||
iv: r,
|
||||
mode: cryptoJS.mode.CBC,
|
||||
padding: cryptoJS.pad.Pkcs7
|
||||
});
|
||||
return cryptoJS.enc.Base64.stringify(o.ciphertext);
|
||||
}
|
||||
|
||||
aesCBCDecrypt(data, key, iv) {
|
||||
const n = cryptoJS.enc.Hex.parse(key);
|
||||
const r = cryptoJS.enc.Hex.parse(iv);
|
||||
const o = cryptoJS.AES.decrypt(data, n, {
|
||||
iv: r,
|
||||
mode: cryptoJS.mode.CBC,
|
||||
padding: cryptoJS.pad.Pkcs7
|
||||
});
|
||||
return o.toString(cryptoJS.enc.Utf8);
|
||||
}
|
||||
|
||||
request(options) {
|
||||
options.gzip = true;
|
||||
return new Promise((resolve, reject) => {
|
||||
request(options, (error, response, body) => {
|
||||
if (error) {
|
||||
resolve(error)
|
||||
}
|
||||
try {
|
||||
const objBody = JSON.parse(body);
|
||||
resolve(objBody);
|
||||
} catch (e) {
|
||||
resolve(body)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
wait(time) {
|
||||
return new Promise((resolve) => setTimeout(resolve, time));
|
||||
}
|
||||
|
||||
}(name, envNames)
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user