阿里云:
服务器购买地址
https://t.aliyun.com/U/2s8buw若失效,可用地址
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=2019052.部署教程
3.代码如下
const {cookie,UserId,deviceUid,BookId,TicketCount,roleId,version} = config.qidianQDSign = "";Message = ""const cryptojs = require('crypto-js');const axios = require("axios")function encrypt(data) {let algorithm = 'des-128-cbc'let passwd = '{1dYgqE)h9,R)hKqEcv4]k[h'let iv = '01234567'str = cryptojs.TripleDES.encrypt("" + data, cryptojs.enc.Utf8.parse(passwd), {iv: cryptojs.enc.Utf8.parse(iv),mode: cryptojs.mode.CBC,padding: cryptojs.pad.Pkcs7})return str.toString()}var sleep = ms => new Promise(resolve => setTimeout(resolve, ms));function QDGet(url, data, method = "post") {return new Promise(async (resolve) => {try {let headers = {cookie,QDSign,"User-Agent": "Mozilla/mobile QDReaderAndroid/7.9.186/674/1000209"}qdsign = QD(data)headers.QDSign = qdsignlet res = await axios({method,url: "https://druidv6.if.qidian.com" + url,data,headers})console.log(JSON.stringify(res.data))resolve(res.data)} catch (err) {console.log(err)if (err.response && err.response.data) resolve(err.response.data)else Message += err}resolve();});}function QD(data) {let str1 = data.split("&").sort(function(a, b) {return a.localeCompare(b);}).join("&").toLowerCase()sign = cryptojs.MD5(str1).toString()let str = `Rv1rPTnczce|${Math.floor(Date.now() )}|${UserId}|${deviceUid}|1|${version}|0|${sign}|f189adc92b816b3e9da29ea304d4a7e4`qdsign = encrypt(str)return qdsign}async function qidian() {Message += " 签到:"let QDSign = ""let signres = await QDGet("/argus/api/v2/checkin/checkin", "sessionKey=&banId=0&captchaTicket=&captchaRandStr=&challenge=&validate=&seccode=")if (signres && (signres.Result == 0)) Message += `签到成功!连签${signres.Data.NoBrokenTime}天`else if (signres && signres.Message) Message += signres.Messageif (TicketCount) {//投票urltp = "/Atom.axd/Api/InterAction/VoteRecomTicket"datatp = `bookId=${BookId}&bookName=&count=${TicketCount}&description=这本书写的太好了,犒劳一下希望后续更精彩!&isSendSina=0&isSendTX=0&clienttype=1400&sourceId=0&sourceType=0`let VoteRecomTicketRes = await QDGet(urltp, datatp)if (VoteRecomTicketRes && VoteRecomTicketRes.Message) Message += "\n 投推荐票:" + VoteRecomTicketRes.Message}//笔芯urlbx = "/argus/api/v1/bookrole/setrolelikestatus"let databx = `bookId=${BookId??"1033475139"}&roleId=${roleId??("61367713050100871")}&likeStatus=1`let likeRes = await QDGet(urlbx, databx)if (likeRes && likeRes.Message) Message += "\n 比心:" + likeRes.Message//每日抽卡urlck = "/argus/api/v2/bookrole/card/call?type=1&costType=1&cardpoolid=0"datack = "type=1&costType=1&cardpoolid=0"let ckres = await QDGet(urlck, datack, "get")if (ckres && ckres.Result == 0) Message += "\n 抽卡:" + "恭喜你欧气爆棚!!获得:" + ckres.Data.Items[0].CardNameelse Message += "\n 抽卡:" + ckres.Messagereturn "【起点读书:】\n" + Message}module.exports = qidian
解析
这脚本是一个用于自动化任务的Node.js模块,主要用于起点中文网的签到、投推荐票、比心(点赞角色)、以及每日抽卡功能。它使用了加密技术、HTTP请求等技术来实现与起点中文网的交互。
主要作用
- 自动签到
向起点中文网发送签到请求,获取连续签到天数等信息。 - 投推荐票
向指定的书籍投推荐票。 - 比心(点赞)
对特定角色进行点赞。 - 每日抽卡
进行每日的抽卡活动,获取随机奖励。
主要方法
encrypt(data):
- 作用
使用TripleDES算法加密数据,生成请求起点中文网所需的签名(QDSign)。 - 参数
data- 要加密的数据字符串。 - 返回值
加密后的字符串。 QDGet(url, data, method = "post"):
url- API的相对路径。 data- 请求的数据。 method- HTTP方法,默认为POST。 - 作用
发送HTTP请求到起点中文网的API。 - 返回值
:API响应的数据。 QD(data):
- 作用
生成QDSign,用于验证请求的合法性。 - 参数
data- 请求参数的字符串形式。 - 返回值
加密后的QDSign。 qidian():
- 作用
执行整个自动化任务的流程,包括签到、投票、比心和抽卡。 - 返回值
执行结果的消息字符串。
流程说明
- 签到
首先执行签到操作,若成功,记录连续签到天数。 - 投票
如果配置了投票,则对指定的书籍投推荐票。 - 比心
对配置的角色进行点赞。 - 抽卡
执行每日抽卡操作,记录获得的奖励。
脚本充分展示了Node.js在自动化网络任务中的应用,尤其是在处理登录、加密、API请求等方面的能力。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论