2025年5月30日星期五

塔斯汀任务脚本

1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/8fdn23若失效,可用地址

1.购买服务器

阿里云:

服务器购买地址

https://t.aliyun.com/U/8fdn23

若失效,可用地址

https://www.aliyun.com/daily-act/ecs/activity_selection?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.部署教程

2024年最新青龙面板跑脚本教程(一)持续更新中

3.代码如下

/** * #小程序://塔斯汀 * * 抓包 Host: * export TASTI_TOKEN = 'saas7eXX-XXXXX-XXXX-XXXX-XXXX' * 多账号用 & 或换行 * const $ = new Env('塔斯汀') * cron: 40 12 * * * */const init = require('init')const {$, notify, sudojia, checkUpdate} = init('塔斯汀');const tastList = process.env.TASTI_TOKEN ? process.env.TASTI_TOKEN.split(/[\n&]/) : [];let message = '';// 接口地址const baseUrl = 'https://sss-web.tastientech.com'// 签到活动IDlet signActivityId;// 请求头const headers = {    'User-Agent': sudojia.getRandomUserAgent(),    'Content-Type''application/json',    'version''3.2.3',    'channel''1',    'xweb_xhr''1',    'Referer''https://servicewechat.com/wx557473f23153a429/378/page-frame.html',    'Accept-Language''zh-CN,zh;q=0.9'};
!(async () => {    await checkUpdate($.name, tastList);    console.log(`\n已随机分配 User-Agent\n\n${headers['user-agent'] || headers['User-Agent']}`);    for (let i = 0; i < tastList.length; i++) {        const index = i + 1;        console.log(`\n*****第[${index}]个${$.name}账号*****`);        headers['user-token'] = tastList[i];        message += `📣====${$.name}账号[${index}]====📣\n`;        await main();        await $.wait(sudojia.getRandomWait(20002500));    }    if (message) {        await notify.sendNotify(`「${$.name}」``${message}`);    }})().catch((e) => $.logErr(e)).finally(() => $.done());
async function main() {    await getActivityId()    await $.wait(sudojia.getRandomWait(1e32e3));    await getUserInfo();    await $.wait(sudojia.getRandomWait(1e32e3));    await getPoint();}
/** * 自动获取签到 ID * * @returns {Promise<void>} */async function getActivityId() {    try {        let data = await sudojia.sendRequest(`${baseUrl}/api/minic/shop/intelligence/banner/c/list`'post', headers);        if (200 !== data.code) {            return console.error(`获取活动ID失败 ->`, data.msg);        }        const dailySignInBanner = data.result.find(item => item.bannerName === '每日签到');        if (!dailySignInBanner) {            return console.error('未找到每日签到活动');        }        // 解析 jumpPara 字段        const jumpPara = JSON.parse(dailySignInBanner.jumpPara);        if (!jumpPara || !jumpPara.path) {            return console.error('jumpPara 结构不符合预期:', jumpPara);        }        const decodedPath = decodeURIComponent(jumpPara.path);        const urlParams = new URLSearchParams(new URL(decodedPath, 'https://example.com').search);        const jumpCode = urlParams.get('jumpCode');        const encodedJumpPara = urlParams.get('jumpPara');        if (!jumpCode || !encodedJumpPara) {            return console.error('查询参数不符合预期:', decodedPath);        }        // 解码 jumpPara        const decodedJumpPara = decodeURIComponent(encodedJumpPara);        // 解析 jumpPara JSON        const jumpParaObj = JSON.parse(decodedJumpPara);        if (!jumpParaObj || !jumpParaObj.activityId) {            return console.error('jumpPara JSON 结构不符合预期:', decodedJumpPara);        }        signActivityId = jumpParaObj.activityId;        const today = new Date();        const month = today.getMonth() + 1;        const day = today.getDate();        console.log(`${month}${day}日-签到活动ID: ${signActivityId}`);    } catch (e) {        console.error(`获取活动ID时发生异常:${e}`);    }}
async function getUserInfo() {    try {        let data = await sudojia.sendRequest(`${baseUrl}/api/intelligence/member/getMemberDetail`'get', headers);        if (200 !== data.code) {            return console.log(`获取用户信息失败 ->`, data.msg);        }        const {nickName, phone} = data.result;        const hiddenMobile = `${phone.slice(03)}***${phone.slice(-3)}` || '18888888888';        console.log(`${nickName}(${hiddenMobile})`);        message += `${nickName}(${phone})\n`;        await $.wait(sudojia.getRandomWait(1e32e3));        data = await sudojia.sendRequest(`${baseUrl}/api/sign/member/signV2`'post', headers, {            "activityId": signActivityId,            "memberName": nickName,            "memberPhone": phone        });        if (200 !== data.code) {            message += `签到失败:${data.msg}\n`;            return console.log(`签到失败 ->`, data.msg);        }        if (!data.result.rewardInfoList[0].rewardName) {            console.log(`签到成功,积分+${data.result.rewardInfoList[0].point}`);            message += `签到成功,积分+${data.result.rewardInfoList[0].point}\n`;        } else {            console.log(`签到成功,获得奖品;${data.result.rewardInfoList[0].rewardName}`);            message += `签到成功,获得奖品;${data.result.rewardInfoList[0].rewardName}\n`;        }    } catch (e) {        console.error(`获取用户信息或签到时发生异常:${e}`);    }}
/** * 获取积分 * * @returns {Promise<void>} */async function getPoint() {    try {        let data = await sudojia.sendRequest(`${baseUrl}/api/wx/point/myPoint`'post', headers);        if (200 !== data.code) {            return console.log(`获取积分失败 ->`, data.msg);        }        console.log(`当前积分:${data.result.point}`);        message += `当前积分:${data.result.point}\n\n`;    } catch (e) {        console.error(`获取积分时发生异常:${e}`);    }}

解析

这个塔斯汀小程序自动脚本的主要作用是:

自动化完成: 

  • 每日签到任务(动态获取签到活动ID)

  • 获取用户信息

  • 获取当前积分

  • 支持 多账号执行 与 消息推送

方法功能

方法名
作用描述
main()
主执行流程:获取签到ID → 获取用户信息与签到 → 获取积分
getActivityId()
获取当日签到活动的 activityId,解析自动态Banner 数据
getUserInfo()
获取用户昵称与手机号并执行签到逻辑
getPoint()
获取用户当前积分

getActivityId()

功能:从首页 Banner 接口中动态解析出每日签到活动 ID(即 signActivityId

  • 请求接口:/api/minic/shop/intelligence/banner/c/list

  • 处理流程:

    1. 查找 banner 名称为"每日签到"的对象;

    2. 解析其 jumpPara.path

    3. 再从 path 中提取 jumpCode 和 jumpPara 参数;

    4. 解码并 JSON 解析 jumpPara

    5. 取出 activityId

 此步是签到关键,因活动 ID 不是固定写死。

getUserInfo()

功能:调用接口获取当前用户昵称和手机号;并提交签到请求。

  • 获取用户信息接口:

    • /api/intelligence/member/getMemberDetail

  • 发起签到接口:

    • /api/sign/member/signV2

    • 参数中需传入 activityIdnickName 和 phone

会根据返回判断是:

  • 获得积分(point)

  • 还是奖品(rewardName)

getPoint()

功能:查询用户当前可用积分。

  • 接口:/api/wx/point/myPoint

成功后将当前积分输出并添加至推送消息中。

执行流程图


      ↓ 启动脚本      ↓[checkUpdate + header设置]      ↓[for循环遍历账号列表]      ↓[getActivityId()] ← 获取签到活动ID      ↓[getUserInfo()]  ← 获取昵称 + 签到任务提交      ↓[getPoint()]     ← 查询积分      ↓[notify.sendNotify()] ← 推送消息

注意事项

  • 抓包必须获取 请求头中的token,不能遗漏。

  • activityId 每天都可能变,因此不能写死。

  • 多账号用 & 或换行分隔。

  • 推送结果通过 notify.sendNotify 输出可读消息。



注意

本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。



没有评论:

发表评论

广州猎德“龙舟征婚小伙”称微信被加爆,自述择偶标准

5月31日,广州猎德村迎来一年一度的龙舟招景盛会,广州各地有超过150条村前来猎德涌趁景。其中,一条龙舟上的"征婚启事"引发广泛关注。视频显示,一名男子脖子上挂着一张"两栋楼,海珠,未婚"的牌子,另一面则打印了他的微信二维码。 6月1日...