阿里云:
服务器购买地址
https://t.aliyun.com/U/C6sVsb
若失效,可用地址
https://www.aliyun.com/activity/wuying/dj?source=5176.29345612&userCode=49hts92d
腾讯云:
https://curl.qcloud.com/wJpWmSfU
若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console
华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905
2.部署教程
3.代码如下
const axios = require('axios')
const md5 = require('crypto-js').MD5
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
function KsGet(url, method = "get", data = null) {
return new Promise(async (resolve) => {
try {
const headers = {
'client-identifier': config.kaoshibao.clientid,
authorization: config.kaoshibao.authorization
}
timestamp = new Date().getTime().toString()
headers.sign = md5("12b6bb84e093532fb72b4d65fec3f00b" + config.kaoshibao.clientid + url + timestamp + '12b6bb84e093532fb72b4d65fec3f00b').toString()
headers.timestamp = timestamp
let res = await axios({
method,
url: "https://api.yisouti.com" + url,
data,
headers
});
// console.log(res)
if (res.data.msg) console.log(" " + res.data.msg)
resolve(res.data)
} catch (err) {
console.log(err);
resolve({
msg: "签到接口请求出错"
})
}
resolve();
});
}
//KsGet("请求链接后面那一坨 /user开始","请求方式 get就不用填了 其它的再填 如post","请求数据 同理 get的不用填")
async function task() {
idss = [];ans = null;pid = 876501;Info = "";
let signres = await KsGet("/user/PointCenter/sign") //签到 写别的也这样
if (signres && signres.code == 200) Info = `签到成功,获得${signres.data.point}积分,连签 ${signres.data.continue_days}天`
else Info = signres.msg
let task = await KsGet("/user/PointCenter/home") //获取任务列表
if (task) {
taskList = ((task && task.code == 200) ? task.data.tasks : []).filter(x => x.task_id == 10004 || x.task_id == 10010)
}
for (task of taskList) {
console.log("任务:" + task.title)
if (task.status == 1) {
if (task.task_id == 10004) {
let ids = await KsGet("/questions/fetch", "post", {
"paperid": "876501"
})
//获取题目id
if (ids && ids.code == 200) idss = ids.data.rows
console.log(`共获取到 ${idss.length}道题目`)
for (i = 0; i < 201; i) {
var n = Math.floor(Math.random() * idss.length + 1) - 1;
// console.log(`抽取题目中: ${idss[n]}\n去查询答案`)
let answer = await KsGet("/questions/ids", "post", {
"ids": `[${idss[n]}]`
})
if (answer.code == 200) {
ans = answer.data[0].answer
//console.log(`Q:${answer.data[0].question}\nA:${answer.data[0].analysis}`)
}
if (ans) {
let r = await KsGet("/questions/reportResult", "post", {
"result": "1",
"answer": `${ans}`,
"use_time": "1181",
"question_id": idss[n],
"paperid": pid
})
if (r.code == 200) console.log(`答题进度 ${i++}/200`)
}
}
await getprize(task.id, task.point)
} else await KsGet("/user/PointCenter/taskCallback", "post", {
"event": "view_video"
}) //激励视频
await getprize(task.id, task.point)
} else {
await getprize(task.id, task.point)
} //领取奖励
await sleep(2000)
await getprize(task.id, task.point)
}
async function getprize(id, point) {
let res = await KsGet("/user/PointCenter/getTaskReward", "post", {
"id": id,
"point": point
})
if (res.code == 200) console.log(`领取成功!!获得${res.data.point}积分`)
}
//查询
let baseInfo = await KsGet("/user/pointCenter/getBase")
if (baseInfo && baseInfo.code == 200) {
sign = baseInfo.data.is_signed == 1 ? "已签" : "未签"
Info = `今日${sign} ,连签${baseInfo.data.continue_days},总积分 ${baseInfo.data.user_point} `
}
return "【考试宝】:" + Info
}
module.exports = task;
解析
这个脚本是一个针对考试宝平台【https://www.kaoshibao.com/】的自动化签到和任务完成脚本。通过调用平台的 API,自动执行签到、答题任务、领取奖励等操作,并返回操作结果。
主要功能
- 签到
:自动进行签到,并返回签到结果。 - 获取任务
:从平台获取任务列表,筛选特定的任务(如答题、观看视频等),并执行。 - 答题任务
:自动获取题目并提交答案,模拟答题过程。 - 领取奖励
:完成任务后自动领取积分奖励。 - 查询信息
:查询用户的积分和签到状态。
1. KsGet
方法:
这是一个通用的 HTTP 请求函数,封装了 axios
请求,用于向考试宝 API 发送请求。- 参数
url
:请求的 URL。 method
:请求的方法( get
或post
)。data
:如果是 POST 请求,则传递的数据。 - 功能
设置请求头,其中包含 client-identifier
和authorization
等认证信息。生成请求签名: md5("12b6bb84e093532fb72b4d65fec3f00b" + clientid + url + timestamp + secretKey)
,确保请求的安全性。发送请求并返回响应数据。
2. task
方法:
这是脚本的主逻辑,负责执行签到、获取任务、答题、领取奖励等操作。 - 流程
如果任务是答题任务( task_id == 10004
),通过KsGet("/questions/fetch", "post")
获取题目 ID。随机抽取题目,通过 KsGet("/questions/ids", "post")
获取题目答案。提交答案,通过 KsGet("/questions/reportResult", "post")
完成答题任务。完成后调用 getprize
方法领取奖励。- 签到
:调用 KsGet("/user/PointCenter/sign")
执行签到操作,获取签到结果并打印。 - 获取任务
:调用 KsGet("/user/PointCenter/home")
获取任务列表,筛选出特定的任务(task_id == 10004
或task_id == 10010
)。 - 答题任务
: - 激励视频
:如果任务是观看视频( task_id == 10010
),则调用KsGet("/user/PointCenter/taskCallback", "post")
完成视频任务。 - 领取奖励
:每完成一个任务后,通过 getprize
方法领取任务奖励。 - 查询积分和签到状态
:通过 KsGet("/user/pointCenter/getBase")
查询用户的积分和签到状态,并返回当前状态。
3. getprize
方法:
用于领取任务奖励。 通过 KsGet("/user/PointCenter/getTaskReward", "post")
请求领取奖励,并输出领取结果。
4. sleep
方法:
用于让脚本在执行过程中暂停一段时间,以避免过快的请求导致被平台识别为异常行为。 通过 await sleep(2000)
,脚本会在执行任务时等待 2 秒。
异常处理:
如果在执行请求时遇到错误,会捕获并打印错误信息,返回错误消息"签到接口请求出错"。
这个脚本通过调用考试宝平台的 API 自动化执行签到、任务完成、答题、领取奖励等操作。它模拟了用户的行为,从获取任务到完成任务,最终获取积分奖励,并查询用户的积分和签到状态。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。