faker2/jd_joy_park_run.ts
2022-08-16 18:01:40 +08:00

218 lines
8.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 汪汪乐园-跑步+组队
* cron: 20 * * * *
* export FP_448DE=""
* export FP_B6AC3=""
*/
import {H5ST} from "./utils/h5st_pro"
import {getDate} from "date-fns";
import {JDHelloWorld, User} from "./TS_JDHelloWorld";
class Joy_Park_Run extends JDHelloWorld {
teamTool: H5ST
apiTool: H5ST
user: User
captainId: string | number
constructor() {
super()
}
async init() {
await this.run(this)
}
// 秒转分:秒
secondsToMinutes(seconds: number) {
let minutes: number = Math.floor(seconds / 60)
let second: number = Math.floor(seconds % 60)
return `${minutes}${second}`
}
async team(fn: string, body: object) {
let timestamp: number = Date.now(), h5st: string
h5st = this.teamTool.__genH5st({
appid: "activities_platform",
body: JSON.stringify(body),
client: "ios",
clientVersion: "3.9.2",
functionId: fn,
t: timestamp.toString()
})
return await this.get(`https://api.m.jd.com/?functionId=${fn}&body=${encodeURIComponent(JSON.stringify(body))}&t=${timestamp}&appid=activities_platform&client=ios&clientVersion=3.9.2&cthr=1&h5st=${h5st}`, {
'Host': 'api.m.jd.com',
'User-Agent': this.user.UserAgent,
'Origin': 'https://h5platform.jd.com',
'X-Requested-With': 'com.jd.jdlite',
'Referer': 'https://h5platform.jd.com/',
'Cookie': this.user.cookie
})
}
async api(fn: string, body: object) {
let timestamp: number = Date.now(), h5st: string = ''
if (fn === 'runningOpenBox') {
h5st = this.apiTool.__genH5st({
appid: "activities_platform",
body: JSON.stringify(body),
client: "ios",
clientVersion: "3.9.2",
functionId: fn,
t: timestamp.toString()
})
}
let params: string = `functionId=${fn}&body=${JSON.stringify(body)}&t=${timestamp}&appid=activities_platform&client=ios&clientVersion=3.9.2&cthr=1`
h5st && (params += `&h5st=${h5st}`)
return await this.post('https://api.m.jd.com/', params, {
'authority': 'api.m.jd.com',
'content-type': 'application/x-www-form-urlencoded',
'cookie': this.user.cookie,
'origin': 'https://h5platform.jd.com',
'referer': 'https://h5platform.jd.com/',
'User-Agent': this.user.UserAgent,
})
}
async runningPageHome() {
return this.get(`https://api.m.jd.com/?functionId=runningPageHome&body=%7B%22linkId%22:%22L-sOanK_5RJCz7I314FpnQ%22,%22isFromJoyPark%22:true,%22joyLinkId%22:%22LsQNxL7iWDlXUs6cFl-AAg%22%7D&t=${Date.now()}&appid=activities_platform&client=ios&clientVersion=3.9.2`, {
'Host': 'api.m.jd.com',
'Origin': 'https://h5platform.jd.com',
'User-Agent': this.user.UserAgent,
'Referer': 'https://h5platform.jd.com/',
'Cookie': this.user.cookie
})
}
async startRunning(res: any, assets: number) {
if (!res.data.runningHomeInfo.nextRunningTime) {
console.log('终点目标', assets)
for (let i = 0; i < 5; i++) {
res = await this.api('runningOpenBox', {"linkId": "L-sOanK_5RJCz7I314FpnQ"})
if (parseFloat(res.data.assets) >= assets) {
let assets: number = parseFloat(res.data.assets)
res = await this.api('runningPreserveAssets', {"linkId": "L-sOanK_5RJCz7I314FpnQ"})
console.log('领取成功', assets)
break
} else {
if (res.data.doubleSuccess) {
console.log('翻倍成功', parseFloat(res.data.assets))
await this.wait(10000)
} else if (!res.data.doubleSuccess && !res.data.runningHomeInfo.runningFinish) {
console.log('开始跑步', parseFloat(res.data.assets))
await this.wait(10000)
} else {
console.log('翻倍失败')
break
}
}
}
}
await this.wait(3000)
}
async main(user: User) {
this.user = user
this.user.UserAgent = `jdltapp;iPhone;3.9.2;Mozilla/5.0 (iPhone; CPU iPhone OS ${this.getIosVer()} like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1;`
let assets: number = parseFloat(process.env.JD_JOY_PARK_RUN_ASSETS || '0.08')
let rewardAmount: number = 0
try {
this.teamTool = new H5ST('448de', this.user.UserAgent, process.env.FP_448DE || '', 'https://h5platform.jd.com/swm-stable/people-run/index?activityId=L-sOanK_5RJCz7I314FpnQ', 'https://h5platform.jd.com')
await this.teamTool.__genAlgo()
let res: any = await this.team('runningMyPrize', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "pageSize": 20, "time": null, "ids": null})
let sum: number = 0, success: number = 0
rewardAmount = res.data.rewardAmount
if (res.data.runningCashStatus.currentEndTime && res.data.runningCashStatus.status === 0) {
console.log('可提现', rewardAmount)
res = await this.api('runningPrizeDraw', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "type": 2})
await this.wait(2000)
console.log(res.data.message)
res = await this.team('runningMyPrize', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "pageSize": 20, "time": null, "ids": null})
}
for (let t of res?.data?.detailVos || []) {
if (t.amount > 0 && getDate(new Date(t.createTime)) === new Date().getDate()) {
sum += t.amount
success++
} else {
break
}
}
console.log('成功', success)
sum = parseFloat(sum.toFixed(2))
console.log('收益', sum)
res = await this.team('runningTeamInfo', {"linkId": "L-sOanK_5RJCz7I314FpnQ"})
if (!this.captainId) {
if (res.data.members.length === 0) {
console.log('成为队长')
this.captainId = res.data.captainId
} else if (res.data.members.length !== 6) {
console.log('队伍未满', res.data.members.length)
this.captainId = res.data.captainId
} else {
console.log('队伍已满')
}
} else if (this.captainId && res.data.members.length === 0) {
console.log('已有组队ID未加入队伍')
res = await this.team('runningJoinTeam', {"linkId": "L-sOanK_5RJCz7I314FpnQ", "captainId": this.captainId})
if (res.code === 0) {
console.log('组队成功')
for (let member of res.data.members) {
if (member.captain) {
console.log('队长', member.nickName)
break
}
}
if (res.data.members.length === 6) {
console.log('队伍已满')
this.captainId = ''
}
} else {
this.o2s(res, '组队失败')
}
} else {
console.log('已组队', res.data.members.length)
console.log('战队收益', res.data.teamSumPrize)
}
this.apiTool = new H5ST('b6ac3', this.user.UserAgent, process.env.FP_B6AC3 || '', 'https://h5platform.jd.com/swm-stable/people-run/index?activityId=L-sOanK_5RJCz7I314FpnQ', 'https://h5platform.jd.com')
await this.apiTool.__genAlgo()
res = await this.runningPageHome()
console.log('🧧', res.data.runningHomeInfo.prizeValue)
console.log('💊', res.data.runningHomeInfo.energy)
let energy: number = res.data.runningHomeInfo.energy
await this.wait(2000)
console.log('⏳', this.secondsToMinutes(res.data.runningHomeInfo.nextRunningTime / 1000))
if (res.data.runningHomeInfo.nextRunningTime && res.data.runningHomeInfo.nextRunningTime / 1000 < 300) {
console.log('⏳')
await this.wait(res.data.runningHomeInfo.nextRunningTime + 3000)
res = await this.runningPageHome()
await this.wait(1000)
}
await this.startRunning(res, assets)
res = await this.runningPageHome()
for (let i = 0; i < energy; i++) {
if (res.data.runningHomeInfo.nextRunningTime / 1000 < 3000)
break
console.log('💉')
res = await this.api('runningUseEnergyBar', {"linkId": "L-sOanK_5RJCz7I314FpnQ"})
console.log(res.errMsg)
res = await this.runningPageHome()
await this.startRunning(res, assets)
await this.wait(1000)
}
res = await this.runningPageHome()
console.log('🧧', res.data.runningHomeInfo.prizeValue)
await this.wait(2000)
} catch (e) {
console.log('Error', e.message)
await this.wait(3000)
}
}
}
new Joy_Park_Run().init().then()