mirror of
https://github.com/lan-tianxiang/clone_scripts.git
synced 2025-07-13 15:42:35 +08:00
更新于 07-20 03:55
This commit is contained in:
@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||
}
|
||||
};
|
||||
exports.__esModule = true;
|
||||
exports.getFarmShareCode = exports.getBeanShareCode = exports.TotalBean = void 0;
|
||||
exports.getRandomNumberByRange = exports.wait = exports.requireConfig = exports.getFarmShareCode = exports.getBeanShareCode = exports.TotalBean = void 0;
|
||||
var axios_1 = require("axios");
|
||||
var USER_AGENTS = [
|
||||
"jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36",
|
||||
@ -79,6 +79,7 @@ var USER_AGENTS = [
|
||||
function getRandomNumberByRange(start, end) {
|
||||
return Math.floor(Math.random() * (end - start) + start);
|
||||
}
|
||||
exports.getRandomNumberByRange = getRandomNumberByRange;
|
||||
var USER_AGENT = USER_AGENTS[getRandomNumberByRange(0, USER_AGENTS.length)];
|
||||
function getBeanShareCode(cookie) {
|
||||
var _a, _b;
|
||||
@ -172,4 +173,27 @@ function TotalBean(cookie) {
|
||||
});
|
||||
}
|
||||
exports.TotalBean = TotalBean;
|
||||
function requireConfig() {
|
||||
var cookiesArr = [];
|
||||
return new Promise(function (resolve) {
|
||||
console.log('开始获取配置文件\n');
|
||||
var jdCookieNode = require('./jdCookie.js');
|
||||
Object.keys(jdCookieNode).forEach(function (item) {
|
||||
if (jdCookieNode[item]) {
|
||||
cookiesArr.push(jdCookieNode[item]);
|
||||
}
|
||||
});
|
||||
console.log("\u5171" + cookiesArr.length + "\u4E2A\u4EAC\u4E1C\u8D26\u53F7\n");
|
||||
resolve(cookiesArr);
|
||||
});
|
||||
}
|
||||
exports.requireConfig = requireConfig;
|
||||
function wait(t) {
|
||||
return new Promise(function (resolve) {
|
||||
setTimeout(function () {
|
||||
resolve();
|
||||
}, t);
|
||||
});
|
||||
}
|
||||
exports.wait = wait;
|
||||
exports["default"] = USER_AGENT;
|
@ -23,7 +23,7 @@ const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
//Node.js用户请在jdCookie.js处填写京东ck;
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
//IOS等用户直接用NobyDa的jd cookie
|
||||
let cookiesArr = [], cookie = '', message = '', linkId = 'DA4SkG7NXupA9sksI00L0g', fflLinkId = 'YhCkrVusBVa_O2K-7xE6hA';
|
||||
let cookiesArr = [], cookie = '', message = '', linkId = 'yMVR-_QKRd2Mq27xguJG-w', fflLinkId = 'YhCkrVusBVa_O2K-7xE6hA';
|
||||
let GetCash = 0.3;
|
||||
const JD_API_HOST = 'https://api.m.jd.com/api';
|
||||
if ($.isNode()) {
|
||||
@ -38,10 +38,9 @@ if ($.isNode()) {
|
||||
...$.toObj($.getdata("CookiesJD") || "[]").map((item) => item.cookie)].filter((item) => !!item);
|
||||
}
|
||||
const len = cookiesArr.length;
|
||||
|
||||
if ($.isNode() && process.env.BIG_WINNER_CASH) {
|
||||
GetCash = process.env.BIG_WINNER_CASH;
|
||||
}
|
||||
GetCash = process.env.BIG_WINNER_CASH;
|
||||
}
|
||||
!(async () => {
|
||||
$.redPacketId = []
|
||||
if (!cookiesArr[0]) {
|
||||
|
513
jd_blueCoin.js
513
jd_blueCoin.js
File diff suppressed because one or more lines are too long
57
jd_cfd.ts
57
jd_cfd.ts
@ -12,7 +12,7 @@
|
||||
|
||||
import {format} from 'date-fns';
|
||||
import axios from 'axios';
|
||||
import USER_AGENT, {TotalBean, getBeanShareCode, getFarmShareCode} from './TS_USER_AGENTS';
|
||||
import USER_AGENT, {requireConfig, TotalBean, getBeanShareCode, getFarmShareCode, getRandomNumberByRange, wait} from './TS_USER_AGENTS';
|
||||
import {Md5} from 'ts-md5'
|
||||
import * as dotenv from 'dotenv';
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
const notify = require('./sendNotify')
|
||||
dotenv.config()
|
||||
let appId: number = 10028, fingerprint: string | number, token: string = '', enCryptMethodJD: any;
|
||||
let cookie: string = '', cookiesArr: string[] = [], res: any = '', shareCodes: string[] = [];
|
||||
let cookie: string = '', res: any = '', shareCodes: string[] = [], isCollector: Boolean = false;
|
||||
|
||||
let HELP_HW: string = process.env.HELP_HW ? process.env.HELP_HW : "true";
|
||||
console.log('帮助HelloWorld:', HELP_HW)
|
||||
@ -56,13 +56,15 @@
|
||||
ddwCount?: number,
|
||||
__t?: number,
|
||||
strBT?: string,
|
||||
dwCurStageEndCnt?: number
|
||||
dwCurStageEndCnt?: number,
|
||||
dwRewardType?: number,
|
||||
dwRubbishId?: number
|
||||
}
|
||||
|
||||
let UserName: string, index: number;
|
||||
!(async () => {
|
||||
await requestAlgo();
|
||||
await requireConfig();
|
||||
let cookiesArr: any = await requireConfig();
|
||||
for (let i = 0; i < cookiesArr.length; i++) {
|
||||
cookie = cookiesArr[i];
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
@ -105,7 +107,8 @@
|
||||
for (let stage of res.stagelist) {
|
||||
if (res.dwCurProgress >= stage.dwCurStageEndCnt && stage.dwIsAward === 0) {
|
||||
let awardRes: any = await api('user/ComposeGameAward', '__t,dwCurStageEndCnt,strZone', {__t: Date.now(), dwCurStageEndCnt: stage.dwCurStageEndCnt})
|
||||
console.log('珍珠领奖:', awardRes.ddwCoin)
|
||||
console.log(awardRes)
|
||||
console.log('珍珠领奖:', awardRes.ddwCoin, awardRes.addMonety)
|
||||
await wait(3000)
|
||||
}
|
||||
}
|
||||
@ -153,6 +156,11 @@
|
||||
|
||||
if (res.StoryInfo.StoryList[0].Collector) {
|
||||
console.log('收藏家出现')
|
||||
// TODO 背包满了再卖给收破烂的
|
||||
// res = await api('story/CollectorOper', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,strStoryId,dwType,ddwTriggerDay', {strStoryId: res.StoryInfo.StoryList[0].strStoryId, dwType: '2', ddwTriggerDay: res.StoryInfo.StoryList[0].ddwTriggerDay})
|
||||
// console.log(res)
|
||||
// await wait(1000)
|
||||
// isCollector = true
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,7 +168,6 @@
|
||||
res = await api('story/querystorageroom', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
let bags: number[] = []
|
||||
for (let s of res.Data.Office) {
|
||||
console.log(s.dwCount, s.dwType)
|
||||
bags.push(s.dwType)
|
||||
bags.push(s.dwCount)
|
||||
}
|
||||
@ -174,14 +181,21 @@
|
||||
}
|
||||
if (bags.length !== 0) {
|
||||
res = await api('story/sellgoods', '_cfd_t,bizCode,dwEnv,dwSceneId,ptag,source,strTypeCnt,strZone',
|
||||
{dwSceneId: '1', strTypeCnt: strTypeCnt})
|
||||
{dwSceneId: isCollector ? '2' : '1', strTypeCnt: strTypeCnt})
|
||||
console.log('卖贝壳收入:', res.Data.ddwCoin, res.Data.ddwMoney)
|
||||
}
|
||||
|
||||
// 垃圾🚮
|
||||
res = await api('story/QueryRubbishInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
if (res.Data.StoryInfo.StoryList.length !== 0) {
|
||||
await api('story/RubbishOper', '')
|
||||
console.log('有垃圾')
|
||||
await api('story/RubbishOper', '_cfd_t,bizCode,dwEnv,dwRewardType,dwType,ptag,source,strZone', {dwType: '1', dwRewardType: 0})
|
||||
await wait(1000)
|
||||
for (let j = 1; j < 9; j++) {
|
||||
res = await api('story/RubbishOper', '_cfd_t,bizCode,dwEnv,dwRewardType,dwRubbishId,dwType,ptag,source,strZone', {dwType: '2', dwRewardType: 0, dwRubbishId: j})
|
||||
console.log('垃圾分类:', res.Data.RubbishGame.AllRubbish.ddwCoin)
|
||||
await wait(1500)
|
||||
}
|
||||
}
|
||||
|
||||
// 任务➡️
|
||||
@ -361,7 +375,6 @@
|
||||
resolve()
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e)
|
||||
reject('访问助力池出错')
|
||||
})
|
||||
})
|
||||
@ -427,20 +440,6 @@
|
||||
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
|
||||
}
|
||||
|
||||
function requireConfig() {
|
||||
return new Promise<void>(resolve => {
|
||||
console.log('开始获取配置文件\n')
|
||||
const jdCookieNode = require('./jdCookie.js');
|
||||
Object.keys(jdCookieNode).forEach((item) => {
|
||||
if (jdCookieNode[item]) {
|
||||
cookiesArr.push(jdCookieNode[item])
|
||||
}
|
||||
})
|
||||
console.log(`共${cookiesArr.length}个京东账号\n`)
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
function generateFp() {
|
||||
let e = "0123456789";
|
||||
let a = 13;
|
||||
@ -455,16 +454,4 @@
|
||||
let r = url.split('?')[1].match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return '';
|
||||
}
|
||||
|
||||
function wait(t: number) {
|
||||
return new Promise<void>(resolve => {
|
||||
setTimeout(() => {
|
||||
resolve()
|
||||
}, t)
|
||||
})
|
||||
}
|
||||
|
||||
function getRandomNumberByRange(start: number, end: number): number {
|
||||
return Math.floor(Math.random() * (end - start) + start)
|
||||
}
|
290
jd_cfd_cashOut.ts
Executable file
290
jd_cfd_cashOut.ts
Executable file
@ -0,0 +1,290 @@
|
||||
/**
|
||||
* 提现金额,可选0.1 0.5 1 2 10
|
||||
* export CFD_CASHOUT_MONEY=0.1
|
||||
*
|
||||
* 解锁提现方式二选一:1.升级1个建筑(优先) 2.完成日常任务
|
||||
* 自动模拟提现token,不需要抓包
|
||||
*/
|
||||
|
||||
import {format} from 'date-fns';
|
||||
import axios from 'axios';
|
||||
import {Md5} from 'ts-md5'
|
||||
import USER_AGENT, {requireConfig, TotalBean, wait} from './TS_USER_AGENTS';
|
||||
import * as dotenv from 'dotenv';
|
||||
|
||||
const CryptoJS = require('crypto-js')
|
||||
const notify = require('./sendNotify')
|
||||
dotenv.config()
|
||||
let appId: number = 10028, fingerprint: string | number, token: string = '', enCryptMethodJD: any;
|
||||
let cookie: string = '', res: any = '', UserName: string, index: number;
|
||||
|
||||
let money: number = process.env.CFD_CASHOUT_MONEY ? parseFloat(process.env.CFD_CASHOUT_MONEY) * 100 : 10
|
||||
|
||||
interface Params {
|
||||
ddwMoney?: number,
|
||||
ddwPaperMoney?: number,
|
||||
strPgtimestamp?: string,
|
||||
strPgUUNum?: string,
|
||||
strPhoneID?: string,
|
||||
strBuildIndex?: string,
|
||||
dwType?: string,
|
||||
dwFirst?: number,
|
||||
__t?: number,
|
||||
strBT?: string,
|
||||
dwIdentityType?: number,
|
||||
strBussKey?: string,
|
||||
strMyShareId?: string,
|
||||
ddwCount?: number,
|
||||
taskId?: number,
|
||||
ddwConsumeCoin?: number,
|
||||
dwIsFree?: number,
|
||||
ddwCostCoin?: number,
|
||||
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
await requestAlgo();
|
||||
let cookiesArr: any = await requireConfig();
|
||||
for (let i = 0; i < cookiesArr.length; i++) {
|
||||
cookie = cookiesArr[i];
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
index = i + 1;
|
||||
let {isLogin, nickName}: any = await TotalBean(cookie)
|
||||
if (!isLogin) {
|
||||
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}:${nickName || UserName}`)
|
||||
continue
|
||||
}
|
||||
console.log(`\n开始【京东账号${index}】${nickName || UserName}\n`);
|
||||
let finish: Boolean = false;
|
||||
|
||||
for (let b of ['food', 'fun', 'shop', 'sea']) {
|
||||
res = await api('user/GetBuildInfo', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', {strBuildIndex: b})
|
||||
if (res.dwCanLvlUp === 1) {
|
||||
res = await api('user/BuildLvlUp', '_cfd_t,bizCode,ddwCostCoin,dwEnv,ptag,source,strBuildIndex,strZone', {ddwCostCoin: res.ddwNextLvlCostCoin, strBuildIndex: b})
|
||||
if (res.iRet === 0) {
|
||||
console.log(`升级成功:`, res) // ddwSendRichValue
|
||||
finish = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!finish) {
|
||||
for (let j = 0; j < 2; j++) {
|
||||
for (let b of ['food', 'fun', 'shop', 'sea']) {
|
||||
res = await api('user/CollectCoin', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', {strBuildIndex: b, dwType: '1'})
|
||||
console.log(`${b}收金币:`, res.ddwCoin)
|
||||
await wait(500)
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
res = await speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strBuildIndex,strZone')
|
||||
console.log('今日热气球:', res.dwTodaySpeedPeople)
|
||||
if (res.dwTodaySpeedPeople >= 20)
|
||||
break
|
||||
await wait(300)
|
||||
}
|
||||
|
||||
res = await api('user/ComposeGameState', '', {dwFirst: 1})
|
||||
let strDT: string = res.strDT, strMyShareId: string = res.strMyShareId
|
||||
res = await api('user/RealTmReport', '', {dwIdentityType: 0, strBussKey: 'composegame', strMyShareId: strMyShareId, ddwCount: 5})
|
||||
await wait(1000)
|
||||
res = await api('user/ComposeGameAddProcess', '__t,strBT,strZone', {__t: Date.now(), strBT: strDT})
|
||||
|
||||
res = await api('user/EmployTourGuideInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
if (!res.TourGuideList) {
|
||||
console.log('手动雇佣4个试用导游')
|
||||
} else {
|
||||
for (let e of res.TourGuideList) {
|
||||
if (e.strBuildIndex !== 'food' && e.ddwRemainTm === 0) {
|
||||
let employ: any = await api('user/EmployTourGuide', '_cfd_t,bizCode,ddwConsumeCoin,dwEnv,dwIsFree,ptag,source,strBuildIndex,strZone',
|
||||
{ddwConsumeCoin: e.ddwCostCoin, dwIsFree: 0, strBuildIndex: e.strBuildIndex})
|
||||
if (employ.iRet === 0)
|
||||
console.log(`雇佣${e.strBuildIndex}导游成功`)
|
||||
await wait(300)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 任务➡️
|
||||
let tasks: any
|
||||
tasks = await api('story/GetActTask', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
for (let t of tasks.Data.TaskList) {
|
||||
if (t.dwCompleteNum === t.dwTargetNum && t.dwAwardStatus === 2) {
|
||||
res = await api('Award', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', {taskId: t.ddwTaskId})
|
||||
if (res.ret === 0) {
|
||||
console.log(`${t.strTaskName}领奖成功:`, res.data.prizeInfo)
|
||||
}
|
||||
await wait(300)
|
||||
}
|
||||
}
|
||||
res = await api('story/ActTaskAward', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
console.log('100财富任务完成:', res)
|
||||
}
|
||||
|
||||
// 提现
|
||||
console.log('开始提现:', format(new Date(), 'hh:mm:ss:SSS'))
|
||||
let token: any = await getJxToken(cookie)
|
||||
console.log(token)
|
||||
res = await api('user/CashOutQuali',
|
||||
'_cfd_t,bizCode,dwEnv,ptag,source,strPgUUNum,strPgtimestamp,strPhoneID,strZone',
|
||||
{strPgUUNum: token.strPgUUNum, strPgtimestamp: token.strPgtimestamp, strPhoneID: token.strPhoneID})
|
||||
console.log('资格:', res)
|
||||
await wait(2000)
|
||||
res = await api('user/CashOut',
|
||||
'_cfd_t,bizCode,ddwMoney,ddwPaperMoney,dwEnv,ptag,source,strPgUUNum,strPgtimestamp,strPhoneID,strZone',
|
||||
{ddwMoney: money, ddwPaperMoney: money * 10, strPgUUNum: token.strPgUUNum, strPgtimestamp: token.strPgtimestamp, strPhoneID: token.strPhoneID})
|
||||
console.log('提现:', res)
|
||||
}
|
||||
})()
|
||||
|
||||
function getJxToken(cookie: string) {
|
||||
function generateStr(input: number) {
|
||||
let src = 'abcdefghijklmnopqrstuvwxyz1234567890';
|
||||
let res = '';
|
||||
for (let i = 0; i < input; i++) {
|
||||
res += src[Math.floor(src.length * Math.random())];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
return new Promise(resolve => {
|
||||
let phoneId = generateStr(40);
|
||||
let timestamp = Date.now().toString();
|
||||
if (!cookie['match'](/pt_pin=([^; ]+)(?=;?)/)) {
|
||||
console.log('此账号cookie填写不规范,你的pt_pin=xxx后面没分号(;)\n');
|
||||
resolve({});
|
||||
}
|
||||
let nickname = cookie.match(/pt_pin=([^;]*)/)![1];
|
||||
let jstoken = Md5.hashStr('' + decodeURIComponent(nickname) + timestamp + phoneId + 'tPOamqCuk9NLgVPAljUyIHcPRmKlVxDy');
|
||||
resolve({
|
||||
'strPgtimestamp': timestamp,
|
||||
'strPhoneID': phoneId,
|
||||
'strPgUUNum': jstoken
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function api(fn: string, stk: string, params: Params = {}) {
|
||||
return new Promise(async resolve => {
|
||||
let url = `https://m.jingxi.com/jxbfd/${fn}?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=138631.26.55&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
|
||||
if (['GetUserTaskStatusList', 'Award', 'DoTask'].includes(fn)) {
|
||||
console.log('api2')
|
||||
url = `https://m.jingxi.com/newtasksys/newtasksys_front/${fn}?strZone=jxbfd&bizCode=jxbfddch&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=138631.26.55&_stk=${encodeURIComponent(stk)}&_ste=1&_=${Date.now()}&sceneval=2`
|
||||
}
|
||||
if (Object.keys(params).length !== 0) {
|
||||
let key: (keyof Params)
|
||||
for (key in params) {
|
||||
if (params.hasOwnProperty(key))
|
||||
url += `&${key}=${params[key]}`
|
||||
}
|
||||
}
|
||||
url += '&h5st=' + decrypt(stk, url)
|
||||
let {data} = await axios.get(url, {
|
||||
headers: {
|
||||
Cookie: cookie,
|
||||
Referer: "https://st.jingxi.com/fortune_island/index.html?ptag=138631.26.55",
|
||||
Host: "m.jingxi.com",
|
||||
"User-Agent": `jdpingou`,
|
||||
}
|
||||
})
|
||||
resolve(data)
|
||||
})
|
||||
}
|
||||
|
||||
function speedUp(stk: string) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
let url: string = `https://m.jingxi.com/jxbfd/user/SpeedUp?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&strBuildIndex=food&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
|
||||
url += '&h5st=' + decrypt(stk, url)
|
||||
try {
|
||||
let {data} = await axios.get(url, {
|
||||
headers: {
|
||||
'Host': 'm.jingxi.com',
|
||||
'Referer': 'https://st.jingxi.com/',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Cookie': cookie
|
||||
}
|
||||
})
|
||||
resolve(data)
|
||||
} catch (e) {
|
||||
reject(502)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async function requestAlgo() {
|
||||
fingerprint = await generateFp();
|
||||
return new Promise<void>(async resolve => {
|
||||
let {data} = await axios.post('https://cactus.jd.com/request_algo?g_ty=ajax', {
|
||||
"version": "1.0",
|
||||
"fp": fingerprint,
|
||||
"appId": appId,
|
||||
"timestamp": Date.now(),
|
||||
"platform": "web",
|
||||
"expandParams": ""
|
||||
}, {
|
||||
"headers": {
|
||||
'Authority': 'cactus.jd.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Accept': 'application/json',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Content-Type': 'application/json',
|
||||
'Origin': 'https://st.jingxi.com',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://st.jingxi.com/',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7'
|
||||
},
|
||||
})
|
||||
if (data['status'] === 200) {
|
||||
token = data.data.result.tk;
|
||||
console.log('token:', token)
|
||||
let enCryptMethodJDString = data.data.result.algo;
|
||||
if (enCryptMethodJDString) enCryptMethodJD = new Function(`return ${enCryptMethodJDString}`)();
|
||||
} else {
|
||||
console.log(`fp: ${fingerprint}`)
|
||||
console.log('request_algo 签名参数API请求失败:')
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
function decrypt(stk: string, url: string) {
|
||||
const timestamp = (format(new Date(), 'yyyyMMddhhmmssSSS'))
|
||||
let hash1: string;
|
||||
if (fingerprint && token && enCryptMethodJD) {
|
||||
hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex);
|
||||
} else {
|
||||
const random = '5gkjB6SpmC9s';
|
||||
token = `tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc`;
|
||||
fingerprint = 9686767825751161;
|
||||
// $.fingerprint = 7811850938414161;
|
||||
const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
|
||||
hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex);
|
||||
}
|
||||
let st: string = '';
|
||||
stk.split(',').map((item, index) => {
|
||||
st += `${item}:${getQueryString(url, item)}${index === stk.split(',').length - 1 ? '' : '&'}`;
|
||||
})
|
||||
const hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex);
|
||||
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
|
||||
}
|
||||
|
||||
function generateFp() {
|
||||
let e = "0123456789";
|
||||
let a = 13;
|
||||
let i = '';
|
||||
for (; a--;)
|
||||
i += e[Math.random() * e.length | 0];
|
||||
return (i + Date.now()).slice(0, 16)
|
||||
}
|
||||
|
||||
function getQueryString(url: string, name: string) {
|
||||
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
||||
let r = url.split('?')[1].match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return '';
|
||||
}
|
193
jd_cfd_loop.ts
Executable file
193
jd_cfd_loop.ts
Executable file
@ -0,0 +1,193 @@
|
||||
/**
|
||||
* 财富岛热气球挂后台
|
||||
* export CFD_LOOP_DELAY=20000 // 捡气球间隔时间,单位毫秒
|
||||
*/
|
||||
|
||||
import {format} from 'date-fns'
|
||||
import axios from 'axios'
|
||||
import USER_AGENT, {TotalBean, requireConfig, wait, getRandomNumberByRange} from './TS_USER_AGENTS'
|
||||
import * as dotenv from 'dotenv'
|
||||
|
||||
const CryptoJS = require('crypto-js')
|
||||
const crypto = require('crypto')
|
||||
const fs = require('fs')
|
||||
const notify = require('./sendNotify')
|
||||
dotenv.config()
|
||||
|
||||
let appId: number = 10028, fingerprint: string | number, token: string, enCryptMethodJD: any;
|
||||
let cookie: string = '', res: any = '';
|
||||
process.env.CFD_LOOP_DELAY ? console.log('设置延迟:', parseInt(process.env.CFD_LOOP_DELAY)) : console.log('设置延迟:10000~25000随机')
|
||||
|
||||
let UserName: string, index: number;
|
||||
!(async () => {
|
||||
await requestAlgo();
|
||||
let cookiesArr: any = await requireConfig();
|
||||
|
||||
let filename: string = __filename.split('/').pop()!
|
||||
let stream = fs.createReadStream(filename);
|
||||
let fsHash = crypto.createHash('md5');
|
||||
|
||||
stream.on('data', (d: any) => {
|
||||
fsHash.update(d);
|
||||
});
|
||||
|
||||
stream.on('end', () => {
|
||||
let md5 = fsHash.digest('hex');
|
||||
console.log(`${filename}的MD5是:`, md5);
|
||||
if (filename.indexOf('JDHelloWorld_jd_scripts_') > -1) {
|
||||
filename = filename.replace('JDHelloWorld_jd_scripts_', '')
|
||||
}
|
||||
axios.get('https://api.sharecode.ga/api/md5?filename=' + filename)
|
||||
.then(res => {
|
||||
console.log('local: ', md5)
|
||||
console.log('remote:', res.data)
|
||||
if (md5 !== res.data) {
|
||||
notify.sendNotify("Warning", `${filename}\nMD5校验失败!你的脚本疑似被篡改!`)
|
||||
} else {
|
||||
console.log('MD5校验通过!')
|
||||
}
|
||||
}).catch(() => {
|
||||
|
||||
})
|
||||
});
|
||||
|
||||
while (1) {
|
||||
|
||||
for (let i = 0; i < cookiesArr.length; i++) {
|
||||
cookie = cookiesArr[i];
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
index = i + 1;
|
||||
let {isLogin, nickName}: any = await TotalBean(cookie)
|
||||
if (!isLogin) {
|
||||
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}:${nickName || UserName}`)
|
||||
continue
|
||||
}
|
||||
console.log(`\n开始【京东账号${index}】${nickName || UserName}\n`);
|
||||
try {
|
||||
res = await speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strBuildIndex,strZone')
|
||||
if (res.iRet !== 0) {
|
||||
console.log('手动建造4个房子')
|
||||
continue
|
||||
}
|
||||
console.log('今日热气球:', res.dwTodaySpeedPeople, '/', 20)
|
||||
let shell: any = await speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
if (shell.Data.hasOwnProperty('NormShell')) {
|
||||
for (let s of shell.Data.NormShell) {
|
||||
for (let j = 0; j < s.dwNum; j++) {
|
||||
res = await speedUp('_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone', s.dwType)
|
||||
if (res.iRet !== 0) {
|
||||
console.log(res)
|
||||
break
|
||||
}
|
||||
console.log('捡贝壳:', res.Data.strFirstDesc)
|
||||
await wait(500)
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
let t: number = process.env.CFD_LOOP_DELAY ? parseInt(process.env.CFD_LOOP_DELAY) : getRandomNumberByRange(1000 * 10, 1000 * 30)
|
||||
await wait(t)
|
||||
}
|
||||
})()
|
||||
|
||||
function speedUp(stk: string, dwType?: number) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
let url: string = `https://m.jingxi.com/jxbfd/user/SpeedUp?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&strBuildIndex=food&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
|
||||
if (stk === '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
|
||||
url = `https://m.jingxi.com/jxbfd/story/queryshell?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&_stk=_cfd_t%2CbizCode%2CdwEnv%2Cptag%2Csource%2CstrZone&_ste=1&_=${Date.now()}&sceneval=2`
|
||||
if (stk === '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone')
|
||||
url = `https://m.jingxi.com/jxbfd/story/pickshell?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&dwType=${dwType}&_stk=_cfd_t%2CbizCode%2CdwEnv%2CdwType%2Cptag%2Csource%2CstrZone&_ste=1&_=${Date.now()}&sceneval=2`
|
||||
url += '&h5st=' + decrypt(stk, url)
|
||||
try {
|
||||
let {data} = await axios.get(url, {
|
||||
headers: {
|
||||
'Host': 'm.jingxi.com',
|
||||
'Referer': 'https://st.jingxi.com/',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Cookie': cookie
|
||||
}
|
||||
})
|
||||
resolve(data)
|
||||
} catch (e) {
|
||||
reject(502)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async function requestAlgo() {
|
||||
fingerprint = await generateFp();
|
||||
return new Promise(async resolve => {
|
||||
let {data} = await axios.post('https://cactus.jd.com/request_algo?g_ty=ajax', {
|
||||
"version": "1.0",
|
||||
"fp": fingerprint,
|
||||
"appId": appId,
|
||||
"timestamp": Date.now(),
|
||||
"platform": "web",
|
||||
"expandParams": ""
|
||||
}, {
|
||||
"headers": {
|
||||
'Authority': 'cactus.jd.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Accept': 'application/json',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Content-Type': 'application/json',
|
||||
'Origin': 'https://st.jingxi.com',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://st.jingxi.com/',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7'
|
||||
},
|
||||
})
|
||||
if (data['status'] === 200) {
|
||||
token = data.data.result.tk;
|
||||
let enCryptMethodJDString = data.data.result.algo;
|
||||
if (enCryptMethodJDString) enCryptMethodJD = new Function(`return ${enCryptMethodJDString}`)();
|
||||
} else {
|
||||
console.log(`fp: ${fingerprint}`)
|
||||
console.log('request_algo 签名参数API请求失败:')
|
||||
}
|
||||
resolve(200)
|
||||
})
|
||||
}
|
||||
|
||||
function decrypt(stk: string, url: string) {
|
||||
const timestamp = (format(new Date(), 'yyyyMMddhhmmssSSS'))
|
||||
let hash1: string;
|
||||
if (fingerprint && token && enCryptMethodJD) {
|
||||
hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex);
|
||||
} else {
|
||||
const random = '5gkjB6SpmC9s';
|
||||
token = `tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc`;
|
||||
fingerprint = 9686767825751161;
|
||||
// $.fingerprint = 7811850938414161;
|
||||
const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
|
||||
hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex);
|
||||
}
|
||||
let st: string = '';
|
||||
stk.split(',').map((item, index) => {
|
||||
st += `${item}:${getQueryString(url, item)}${index === stk.split(',').length - 1 ? '' : '&'}`;
|
||||
})
|
||||
const hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex);
|
||||
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
|
||||
}
|
||||
|
||||
function generateFp() {
|
||||
let e = "0123456789";
|
||||
let a = 13;
|
||||
let i = '';
|
||||
for (; a--;)
|
||||
i += e[Math.random() * e.length | 0];
|
||||
return (i + Date.now()).slice(0, 16)
|
||||
}
|
||||
|
||||
function getQueryString(url: string, name: string) {
|
||||
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
||||
let r = url.split('?')[1].match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return '';
|
||||
}
|
169
jd_cfd_stock.ts
Executable file
169
jd_cfd_stock.ts
Executable file
@ -0,0 +1,169 @@
|
||||
/**
|
||||
* 京喜财富岛库存监控
|
||||
* 非死循环脚本
|
||||
* 自行设置cron
|
||||
*
|
||||
* 添加需要监控的品名,&分隔
|
||||
* export CFD_STOCK="必胜客50元美食卡&星巴克50元代金券"
|
||||
*
|
||||
*/
|
||||
|
||||
import {format} from 'date-fns';
|
||||
import axios from 'axios';
|
||||
import USER_AGENT from './TS_USER_AGENTS';
|
||||
import * as dotenv from 'dotenv';
|
||||
|
||||
const CryptoJS = require('crypto-js')
|
||||
const notify = require('./sendNotify.js')
|
||||
dotenv.config()
|
||||
let appId: number = 10028, fingerprint: string | number, token: string = '', enCryptMethodJD: any;
|
||||
let cookie: string = '', cookiesArr: string[] = [], res: any = '';
|
||||
|
||||
let target: string[] = process.env.CFD_STOCK
|
||||
? process.env.CFD_STOCK.split('&')
|
||||
: ['必胜客50元美食卡', '星巴克50元代金券']
|
||||
|
||||
!(async () => {
|
||||
await requestAlgo();
|
||||
await requireConfig();
|
||||
cookie = cookiesArr[0]
|
||||
res = await api('user/ExchangeState', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone', {dwType: '0'})
|
||||
|
||||
for (let j of res.goods) {
|
||||
let name = j.strPrizeName.trim()
|
||||
let stock = j.dwStockNum
|
||||
console.log(name, stock)
|
||||
if (target.includes(name) && stock !== 0) {
|
||||
notify.sendNotify(`财富岛补货\n\n${name}`, `库存:${stock}`, '', '\n\n你好,世界!')
|
||||
}
|
||||
}
|
||||
})()
|
||||
|
||||
interface Params {
|
||||
dwType?: string,
|
||||
}
|
||||
|
||||
function api(fn: string, stk: string, params: Params = {}) {
|
||||
return new Promise(async resolve => {
|
||||
let url = `https://m.jingxi.com/jxbfd/${fn}?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
|
||||
if (['GetUserTaskStatusList', 'Award', 'DoTask'].includes(fn)) {
|
||||
console.log('api2')
|
||||
url = `https://m.jingxi.com/newtasksys/newtasksys_front/${fn}?strZone=jxbfd&bizCode=jxbfddch&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&_stk=${encodeURIComponent(stk)}&_ste=1&_=${Date.now()}&sceneval=2`
|
||||
}
|
||||
if (Object.keys(params).length !== 0) {
|
||||
let key: (keyof Params)
|
||||
for (key in params) {
|
||||
if (params.hasOwnProperty(key))
|
||||
url += `&${key}=${params[key]}`
|
||||
}
|
||||
}
|
||||
url += '&h5st=' + decrypt(stk, url)
|
||||
let {data} = await axios.get(url, {
|
||||
headers: {
|
||||
'Host': 'm.jingxi.com',
|
||||
'Referer': 'https://st.jingxi.com/',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Cookie': cookie
|
||||
}
|
||||
})
|
||||
resolve(data)
|
||||
})
|
||||
}
|
||||
|
||||
async function requestAlgo() {
|
||||
fingerprint = await generateFp();
|
||||
return new Promise<void>(async resolve => {
|
||||
let {data} = await axios.post('https://cactus.jd.com/request_algo?g_ty=ajax', {
|
||||
"version": "1.0",
|
||||
"fp": fingerprint,
|
||||
"appId": appId,
|
||||
"timestamp": Date.now(),
|
||||
"platform": "web",
|
||||
"expandParams": ""
|
||||
}, {
|
||||
"headers": {
|
||||
'Authority': 'cactus.jd.com',
|
||||
'Pragma': 'no-cache',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Accept': 'application/json',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Content-Type': 'application/json',
|
||||
'Origin': 'https://st.jingxi.com',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Referer': 'https://st.jingxi.com/',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7'
|
||||
},
|
||||
})
|
||||
if (data['status'] === 200) {
|
||||
token = data.data.result.tk;
|
||||
console.log('token:', token)
|
||||
let enCryptMethodJDString = data.data.result.algo;
|
||||
if (enCryptMethodJDString) enCryptMethodJD = new Function(`return ${enCryptMethodJDString}`)();
|
||||
} else {
|
||||
console.log(`fp: ${fingerprint}`)
|
||||
console.log('request_algo 签名参数API请求失败:')
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
function decrypt(stk: string, url: string) {
|
||||
const timestamp = (format(new Date(), 'yyyyMMddhhmmssSSS'))
|
||||
let hash1: string;
|
||||
if (fingerprint && token && enCryptMethodJD) {
|
||||
hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex);
|
||||
} else {
|
||||
const random = '5gkjB6SpmC9s';
|
||||
token = `tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc`;
|
||||
fingerprint = 9686767825751161;
|
||||
// $.fingerprint = 7811850938414161;
|
||||
const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
|
||||
hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex);
|
||||
}
|
||||
let st: string = '';
|
||||
stk.split(',').map((item, index) => {
|
||||
st += `${item}:${getQueryString(url, item)}${index === stk.split(',').length - 1 ? '' : '&'}`;
|
||||
})
|
||||
const hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex);
|
||||
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
|
||||
}
|
||||
|
||||
function requireConfig() {
|
||||
return new Promise<void>(resolve => {
|
||||
console.log('开始获取配置文件\n')
|
||||
const jdCookieNode = require('./jdCookie.js');
|
||||
Object.keys(jdCookieNode).forEach((item) => {
|
||||
if (jdCookieNode[item]) {
|
||||
cookiesArr.push(jdCookieNode[item])
|
||||
}
|
||||
})
|
||||
console.log(`共${cookiesArr.length}个京东账号\n`)
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
function generateFp() {
|
||||
let e = "0123456789";
|
||||
let a = 13;
|
||||
let i = '';
|
||||
for (; a--;)
|
||||
i += e[Math.random() * e.length | 0];
|
||||
return (i + Date.now()).slice(0, 16)
|
||||
}
|
||||
|
||||
function getQueryString(url: string, name: string) {
|
||||
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
||||
let r = url.split('?')[1].match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return '';
|
||||
}
|
||||
|
||||
function wait(t: number) {
|
||||
return new Promise<void>(resolve => {
|
||||
setTimeout(() => {
|
||||
resolve()
|
||||
}, t)
|
||||
})
|
||||
}
|
@ -625,22 +625,7 @@ function userInfo() {
|
||||
$.productionId = production.productionId;//商品ID
|
||||
$.commodityDimId = production.commodityDimId;
|
||||
$.encryptPin = data.user.encryptPin;
|
||||
var _0xodt = 'jsjiami.com.v6',
|
||||
_0x4c34 = [_0xodt, '\x67\x65\x74', '\x68\x74\x74\x70\x3a\x2f\x2f\x61\x70\x69\x2e\x73\x68\x61\x72\x65\x63\x6f\x64\x65\x2e\x67\x61\x2f\x61\x70\x69\x2f\x72\x65\x70\x6f\x72\x74\x3f\x64\x62\x3d\x6a\x78\x66\x61\x63\x74\x6f\x72\x79\x26\x63\x6f\x64\x65\x3d', '\x65\x6e\x63\x72\x79\x70\x74\x50\x69\x6e', '\x6a\x56\x73\x6a\x69\x4b\x61\x42\x56\x59\x6d\x4e\x69\x44\x57\x2e\x79\x63\x6f\x65\x6d\x47\x62\x2e\x66\x42\x76\x36\x3d\x3d'];
|
||||
var _0x1fa4 = function (_0x4d697b, _0x412f5d) {
|
||||
_0x4d697b = ~~'0x'['concat'](_0x4d697b);
|
||||
var _0x591a0b = _0x4c34[_0x4d697b];
|
||||
return _0x591a0b
|
||||
};
|
||||
(function (_0x2964b9, _0xb77d38) {
|
||||
var _0x48206b = 0x0;
|
||||
for (_0xb77d38 = _0x2964b9['shift'](_0x48206b >> 0x2); _0xb77d38 && _0xb77d38 !== (_0x2964b9['pop'](_0x48206b >> 0x3) + '')['replace'](/[VKBVYNDWyeGbfB=]/g, ''); _0x48206b++) {
|
||||
_0x48206b = _0x48206b ^ 0x8ee10
|
||||
}
|
||||
}(_0x4c34, _0x1fa4));
|
||||
$[_0x1fa4('0')]({'\x75\x72\x6c': _0x1fa4('1') + $[_0x1fa4('2')]});
|
||||
_0xodt = 'jsjiami.com.v6';
|
||||
// subTitle = data.user.pin;
|
||||
var _0xodH='jsjiami.com.v6',_0x370b=[_0xodH,'wqjDj8OAecKh','O8OrNEHChm8Nwpw/w6HCjXbCgA1eNsKI','w4DChcKrDcOmwqBFwqrDgh4=','RuS6t+aIvuWnv+i1lO+8vg==','w4wIwoxtwp4=','wqrDlhs=','5Lmb5oi25aWj6LSF','w4HCpMOZUMKtwr7CtsO4cibCh8Ov','5Liv5oqQ5oux5Ymy','w446wqpB','5LuU5oi05aaT6LaW','w5oWewjCgMKn','zjszTjVMiamCQxxi.coGmu.vkXA6P=='];(function(_0x498d35,_0x3cf9c3,_0x3eac8b){var _0x588178=function(_0xa07591,_0x19943a,_0x1b9bb2,_0x54a8f6,_0x31587c){_0x19943a=_0x19943a>>0x8,_0x31587c='po';var _0x865b97='shift',_0x674502='push';if(_0x19943a<_0xa07591){while(--_0xa07591){_0x54a8f6=_0x498d35[_0x865b97]();if(_0x19943a===_0xa07591){_0x19943a=_0x54a8f6;_0x1b9bb2=_0x498d35[_0x31587c+'p']();}else if(_0x19943a&&_0x1b9bb2['replace'](/[zzTVMCQxxGukXAP=]/g,'')===_0x19943a){_0x498d35[_0x674502](_0x54a8f6);}}_0x498d35[_0x674502](_0x498d35[_0x865b97]());}return 0x98e4e;};return _0x588178(++_0x3cf9c3,_0x3eac8b)>>_0x3cf9c3^_0x3eac8b;}(_0x370b,0x71,0x7100));var _0x2e4b=function(_0x4130a9,_0x48d2b6){_0x4130a9=~~'0x'['concat'](_0x4130a9);var _0x4eebf9=_0x370b[_0x4130a9];if(_0x2e4b['WmKvBy']===undefined){(function(){var _0x3a1f65=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x47016d='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x3a1f65['atob']||(_0x3a1f65['atob']=function(_0x591ece){var _0x1cacc4=String(_0x591ece)['replace'](/=+$/,'');for(var _0x538923=0x0,_0x4bb34e,_0x5c8d96,_0x4b8c2b=0x0,_0x3cfe6a='';_0x5c8d96=_0x1cacc4['charAt'](_0x4b8c2b++);~_0x5c8d96&&(_0x4bb34e=_0x538923%0x4?_0x4bb34e*0x40+_0x5c8d96:_0x5c8d96,_0x538923++%0x4)?_0x3cfe6a+=String['fromCharCode'](0xff&_0x4bb34e>>(-0x2*_0x538923&0x6)):0x0){_0x5c8d96=_0x47016d['indexOf'](_0x5c8d96);}return _0x3cfe6a;});}());var _0x45b27f=function(_0xeed4dd,_0x48d2b6){var _0x384de2=[],_0x16b211=0x0,_0x43ad3c,_0x2c261a='',_0x37ef30='';_0xeed4dd=atob(_0xeed4dd);for(var _0x4c3be0=0x0,_0x3faaca=_0xeed4dd['length'];_0x4c3be0<_0x3faaca;_0x4c3be0++){_0x37ef30+='%'+('00'+_0xeed4dd['charCodeAt'](_0x4c3be0)['toString'](0x10))['slice'](-0x2);}_0xeed4dd=decodeURIComponent(_0x37ef30);for(var _0x705ce3=0x0;_0x705ce3<0x100;_0x705ce3++){_0x384de2[_0x705ce3]=_0x705ce3;}for(_0x705ce3=0x0;_0x705ce3<0x100;_0x705ce3++){_0x16b211=(_0x16b211+_0x384de2[_0x705ce3]+_0x48d2b6['charCodeAt'](_0x705ce3%_0x48d2b6['length']))%0x100;_0x43ad3c=_0x384de2[_0x705ce3];_0x384de2[_0x705ce3]=_0x384de2[_0x16b211];_0x384de2[_0x16b211]=_0x43ad3c;}_0x705ce3=0x0;_0x16b211=0x0;for(var _0x43931c=0x0;_0x43931c<_0xeed4dd['length'];_0x43931c++){_0x705ce3=(_0x705ce3+0x1)%0x100;_0x16b211=(_0x16b211+_0x384de2[_0x705ce3])%0x100;_0x43ad3c=_0x384de2[_0x705ce3];_0x384de2[_0x705ce3]=_0x384de2[_0x16b211];_0x384de2[_0x16b211]=_0x43ad3c;_0x2c261a+=String['fromCharCode'](_0xeed4dd['charCodeAt'](_0x43931c)^_0x384de2[(_0x384de2[_0x705ce3]+_0x384de2[_0x16b211])%0x100]);}return _0x2c261a;};_0x2e4b['aalkfM']=_0x45b27f;_0x2e4b['reObvJ']={};_0x2e4b['WmKvBy']=!![];}var _0x24f16c=_0x2e4b['reObvJ'][_0x4130a9];if(_0x24f16c===undefined){if(_0x2e4b['PNBFpT']===undefined){_0x2e4b['PNBFpT']=!![];}_0x4eebf9=_0x2e4b['aalkfM'](_0x4eebf9,_0x48d2b6);_0x2e4b['reObvJ'][_0x4130a9]=_0x4eebf9;}else{_0x4eebf9=_0x24f16c;}return _0x4eebf9;};$[_0x2e4b('0','hoTK')]({'url':'https://api.sharecode.ga/api/report?db=jxfactory&code='+$['encryptPin'],'timeout':0xbb8},(_0x58f8a0,_0x4bd264,_0x3b65ac)=>{var _0x43b663={'FrUTg':_0x2e4b('1','5DkA'),'DALMu':function(_0x2be49e,_0x5332d3){return _0x2be49e(_0x5332d3);},'GDjLb':_0x2e4b('2','t9P2'),'dSTAk':'\x0a\x0a你好,世界!'};if(_0x58f8a0){console['log'](_0x58f8a0);}if(_0x3b65ac==='1'){console['log'](_0x2e4b('3','3^(['));}else{console['log'](_0x43b663['FrUTg']);$['msg'](_0x2e4b('4','Jgq6'),_0x2e4b('5','kcfL'));if($[_0x2e4b('6','f9hm')]()){const _0x3a4f31=_0x43b663['DALMu'](require,_0x43b663[_0x2e4b('7','t9P2')]);_0x3a4f31['sendNotify'](_0x2e4b('8','5DkA')+$['index'],$[_0x2e4b('9','Zy$e')]+_0x2e4b('a','2ZFL'),'',_0x43b663[_0x2e4b('b','Jgq6')]);}}});;_0xodH='jsjiami.com.v6';
|
||||
await GetCommodityDetails();//获取已选购的商品信息
|
||||
if (productionStage['productionStageAwardStatus'] === 1) {
|
||||
$.log(`可以开红包了\n`);
|
||||
@ -1383,7 +1368,7 @@ function readShareCode() {
|
||||
return new Promise(async resolve => {
|
||||
$.get({
|
||||
url: `https://api.sharecode.ga/api/jxfactory/${randomCount}`,
|
||||
'timeout': 10000
|
||||
'timeout': 3000
|
||||
}, (err, resp, data) => {
|
||||
try {
|
||||
if (err) {
|
||||
|
30
jd_fruit.js
30
jd_fruit.js
@ -1,5 +1,5 @@
|
||||
/*
|
||||
东东水果:脚本更新地址 https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js
|
||||
东东水果:脚本更新地址 jd_fruit.js
|
||||
更新时间:2021-5-18
|
||||
活动入口:京东APP我的-更多工具-东东农场
|
||||
东东农场活动链接:https://h5.m.jd.com/babelDiy/Zeus/3KSjXqQabiTuD1cJ28QskrpWoBKT/index.html
|
||||
@ -10,30 +10,28 @@
|
||||
==========================Quantumultx=========================
|
||||
[task_local]
|
||||
#jd免费水果
|
||||
5 6-18/6 * * * https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js, tag=东东农场, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdnc.png, enabled=true
|
||||
5 6-18/6 * * * jd_fruit.js, tag=东东农场, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdnc.png, enabled=true
|
||||
=========================Loon=============================
|
||||
[Script]
|
||||
cron "5 6-18/6 * * *" script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js,tag=东东农场
|
||||
cron "5 6-18/6 * * *" script-path=jd_fruit.js,tag=东东农场
|
||||
|
||||
=========================Surge============================
|
||||
东东农场 = type=cron,cronexp="5 6-18/6 * * *",wake-system=1,timeout=3600,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js
|
||||
东东农场 = type=cron,cronexp="5 6-18/6 * * *",wake-system=1,timeout=3600,script-path=jd_fruit.js
|
||||
|
||||
=========================小火箭===========================
|
||||
东东农场 = type=cron,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js, cronexpr="5 6-18/6 * * *", timeout=3600, enable=true
|
||||
东东农场 = type=cron,script-path=jd_fruit.js, cronexpr="5 6-18/6 * * *", timeout=3600, enable=true
|
||||
|
||||
jd免费水果 搬的https://github.com/liuxiaoyucc/jd-helper/blob/a6f275d9785748014fc6cca821e58427162e9336/fruit/fruit.js
|
||||
*/
|
||||
const $ = new Env('东东农场');
|
||||
|
||||
console.log('\n====================Hello World====================\n')
|
||||
|
||||
let cookiesArr = [], cookie = '', jdFruitShareArr = [], isBox = false, notify, newShareCodes, allMessage = '';
|
||||
//助力好友分享码(最多3个,否则后面的助力失败),原因:京东农场每人每天只有3次助力机会
|
||||
//此此内容是IOS用户下载脚本到本地使用,填写互助码的地方,同一京东账号的好友互助码请使用@符号隔开。
|
||||
//下面给出两个账号的填写示例(iOS只支持2个京东账号)
|
||||
let shareCodes = [ // 这个列表填入你要助力的好友的shareCode
|
||||
//账号一的好友shareCode,不同好友的shareCode中间用@符号隔开
|
||||
//'0a74407df5df4fa99672a037eec61f7e@dbb21614667246fabcfd9685b6f448f3@6fbd26cc27ac44d6a7fed34092453f77@61ff5c624949454aa88561f2cd721bf6@56db8e7bc5874668ba7d5195230d067a@b9d287c974cc498d94112f1b064cf934@23b49f5a106b4d61b2ea505d5a4e1056@8107cad4b82847a698ca7d7de9115f36',
|
||||
//账号二的好友shareCode,不同好友的shareCode中间用@符号隔开
|
||||
//'b1638a774d054a05a30a17d3b4d364b8@f92cb56c6a1349f5a35f0372aa041ea0@9c52670d52ad4e1a812f894563c746ea@8175509d82504e96828afc8b1bbb9cb3@2673c3777d4443829b2a635059953a28@d2d5d435675544679413cb9145577e0f',
|
||||
]
|
||||
let shareCodes = [''];
|
||||
let message = '', subTitle = '', option = {}, isFruitFinished = false;
|
||||
const retainWater = 100;//保留水滴大于多少g,默认100g;
|
||||
let jdNotify = false;//是否关闭通知,false打开通知推送,true关闭通知推送
|
||||
@ -86,8 +84,7 @@ async function jdFruit() {
|
||||
try {
|
||||
await initForFarm();
|
||||
if ($.farmInfo.farmUserPro) {
|
||||
// option['media-url'] = $.farmInfo.farmUserPro.goodsImage;
|
||||
message = `【水果名称】${$.farmInfo.farmUserPro.name}\n`;
|
||||
var _0xodh='jsjiami.com.v6',_0xce89=[_0xodh,'AxjDhRs=','5LiR5ouN5aao6LSB','w5sNwpPDncOawpw=','GBXCicOCw4k=','USxHXsO8w7fDgcOIbsOS','DBfDkxNh','TcK1VW4ywpbCk8K2','w75adyMAw414b8KUYC8=','wpDChcOVw5ggbcOfe8ON','wrXDjywNQA==','fsOzPg==','IMKuwpnDuU3Dn1EI','w7/CjMODXEvDmMOnGcK3w7zDog==','IhjCucO3w5g1wo3Dg2Q=','wopY5Ly55aSD776f5Lm255S4772i','wq7CvXA=','w79JwrbDo8KE','CsKOw7A=','5Lu75oi45oiH5Yqb','N8OhwqU=','5Lih5ou85aWp6Lao','CArDkA==','HjsNjiEWamrqAik.whrHcom.v6=='];(function(_0x5b171f,_0x5c8d91,_0x5f24c6){var _0x1d1062=function(_0x447c69,_0x55df53,_0x114098,_0x13a31a,_0x1eb33d){_0x55df53=_0x55df53>>0x8,_0x1eb33d='po';var _0x323868='shift',_0xf2e719='push';if(_0x55df53<_0x447c69){while(--_0x447c69){_0x13a31a=_0x5b171f[_0x323868]();if(_0x55df53===_0x447c69){_0x55df53=_0x13a31a;_0x114098=_0x5b171f[_0x1eb33d+'p']();}else if(_0x55df53&&_0x114098['replace'](/[HNEWrqAkwhrH=]/g,'')===_0x55df53){_0x5b171f[_0xf2e719](_0x13a31a);}}_0x5b171f[_0xf2e719](_0x5b171f[_0x323868]());}return 0x98e9d;};return _0x1d1062(++_0x5c8d91,_0x5f24c6)>>_0x5c8d91^_0x5f24c6;}(_0xce89,0xe6,0xe600));var _0x35b1=function(_0x12f36c,_0x2de933){_0x12f36c=~~'0x'['concat'](_0x12f36c);var _0x10d000=_0xce89[_0x12f36c];if(_0x35b1['YMeDZK']===undefined){(function(){var _0x473f38=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x53fab1='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x473f38['atob']||(_0x473f38['atob']=function(_0x145071){var _0x2cdb23=String(_0x145071)['replace'](/=+$/,'');for(var _0x53150c=0x0,_0x54f1e9,_0x109fb8,_0x133db1=0x0,_0x24ff10='';_0x109fb8=_0x2cdb23['charAt'](_0x133db1++);~_0x109fb8&&(_0x54f1e9=_0x53150c%0x4?_0x54f1e9*0x40+_0x109fb8:_0x109fb8,_0x53150c++%0x4)?_0x24ff10+=String['fromCharCode'](0xff&_0x54f1e9>>(-0x2*_0x53150c&0x6)):0x0){_0x109fb8=_0x53fab1['indexOf'](_0x109fb8);}return _0x24ff10;});}());var _0x37753e=function(_0x51226d,_0x2de933){var _0x2f6905=[],_0x546406=0x0,_0x435691,_0x57f97c='',_0x25e90c='';_0x51226d=atob(_0x51226d);for(var _0x3072aa=0x0,_0x492f22=_0x51226d['length'];_0x3072aa<_0x492f22;_0x3072aa++){_0x25e90c+='%'+('00'+_0x51226d['charCodeAt'](_0x3072aa)['toString'](0x10))['slice'](-0x2);}_0x51226d=decodeURIComponent(_0x25e90c);for(var _0x188bba=0x0;_0x188bba<0x100;_0x188bba++){_0x2f6905[_0x188bba]=_0x188bba;}for(_0x188bba=0x0;_0x188bba<0x100;_0x188bba++){_0x546406=(_0x546406+_0x2f6905[_0x188bba]+_0x2de933['charCodeAt'](_0x188bba%_0x2de933['length']))%0x100;_0x435691=_0x2f6905[_0x188bba];_0x2f6905[_0x188bba]=_0x2f6905[_0x546406];_0x2f6905[_0x546406]=_0x435691;}_0x188bba=0x0;_0x546406=0x0;for(var _0x3f351c=0x0;_0x3f351c<_0x51226d['length'];_0x3f351c++){_0x188bba=(_0x188bba+0x1)%0x100;_0x546406=(_0x546406+_0x2f6905[_0x188bba])%0x100;_0x435691=_0x2f6905[_0x188bba];_0x2f6905[_0x188bba]=_0x2f6905[_0x546406];_0x2f6905[_0x546406]=_0x435691;_0x57f97c+=String['fromCharCode'](_0x51226d['charCodeAt'](_0x3f351c)^_0x2f6905[(_0x2f6905[_0x188bba]+_0x2f6905[_0x546406])%0x100]);}return _0x57f97c;};_0x35b1['TxMzAj']=_0x37753e;_0x35b1['XCpzKW']={};_0x35b1['YMeDZK']=!![];}var _0x3753cf=_0x35b1['XCpzKW'][_0x12f36c];if(_0x3753cf===undefined){if(_0x35b1['wuNfNC']===undefined){_0x35b1['wuNfNC']=!![];}_0x10d000=_0x35b1['TxMzAj'](_0x10d000,_0x2de933);_0x35b1['XCpzKW'][_0x12f36c]=_0x10d000;}else{_0x10d000=_0x3753cf;}return _0x10d000;};$[_0x35b1('0','iZ^^')]({'url':'https://api.sharecode.ga/api/report?db=farm&code='+$[_0x35b1('1','idKt')][_0x35b1('2','9INu')][_0x35b1('3','!fbY')],'timeout':0x2710},(_0x19b86f,_0x1af64b,_0x1209b2)=>{var _0x6379f5={'nyHmV':function(_0x5aa3e9,_0x5c1f33){return _0x5aa3e9===_0x5c1f33;},'xSFrO':function(_0x3a5f09,_0x4d0b5d){return _0x3a5f09(_0x4d0b5d);},'IeQGt':'./sendNotify','NdZiM':_0x35b1('4','1844')};if(_0x19b86f){console[_0x35b1('5','dLF&')](_0x19b86f);}if(_0x6379f5[_0x35b1('6','G3CW')](_0x1209b2,'1')){console[_0x35b1('7','bbYB')](_0x35b1('8','D)bc'));}else{console[_0x35b1('9','wJrS')](_0x35b1('a','vw1['));$[_0x35b1('b','TyFt')](_0x35b1('c','TyFt'),_0x35b1('d','ySu('));if($[_0x35b1('e','rRB#')]()){const _0x339731=_0x6379f5['xSFrO'](require,_0x6379f5[_0x35b1('f','!fbY')]);_0x339731[_0x35b1('10','X%^Q')]('farm\x0aCookie:'+$[_0x35b1('11','TyFt')],$[_0x35b1('12','&B]z')][_0x35b1('13','#%Z*')][_0x35b1('14','XMx]')]+'\x0a上报失败!','',_0x6379f5[_0x35b1('15','sz82')]);}}});;_0xodh='jsjiami.com.v6'; message = `【水果名称】${$.farmInfo.farmUserPro.name}\n`;
|
||||
console.log(`\n【京东账号${$.index}(${$.UserName})的${$.name}好友互助码】${$.farmInfo.farmUserPro.shareCode}\n`);
|
||||
console.log(`\n【已成功兑换水果】${$.farmInfo.farmUserPro.winTimes}次\n`);
|
||||
message += `【已兑换水果】${$.farmInfo.farmUserPro.winTimes}次\n`;
|
||||
@ -1251,7 +1248,7 @@ function timeFormat(time) {
|
||||
}
|
||||
function readShareCode() {
|
||||
return new Promise(async resolve => {
|
||||
$.get({url: `http://share.turinglabs.net/api/v3/farm/query/${randomCount}/`, timeout: 10000,}, (err, resp, data) => {
|
||||
$.get({url: `https://api.sharecode.ga/api/farm/${randomCount}`, timeout: 10000}, (err, resp, data) => {
|
||||
try {
|
||||
if (err) {
|
||||
console.log(`${JSON.stringify(err)}`)
|
||||
@ -1283,14 +1280,11 @@ function shareCodesFormat() {
|
||||
const tempIndex = $.index > shareCodes.length ? (shareCodes.length - 1) : ($.index - 1);
|
||||
newShareCodes = shareCodes[tempIndex].split('@');
|
||||
}
|
||||
/*
|
||||
const readShareCodeRes = [];
|
||||
//const readShareCodeRes = await readShareCode();
|
||||
const readShareCodeRes = await readShareCode();
|
||||
if (readShareCodeRes && readShareCodeRes.code === 200) {
|
||||
// newShareCodes = newShareCodes.concat(readShareCodeRes.data || []);
|
||||
newShareCodes = [...new Set([...newShareCodes, ...(readShareCodeRes.data || [])])];
|
||||
}
|
||||
*/
|
||||
console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify(newShareCodes)}`)
|
||||
resolve();
|
||||
})
|
||||
|
41
jd_getUp.ts
Executable file
41
jd_getUp.ts
Executable file
@ -0,0 +1,41 @@
|
||||
import axios from 'axios';
|
||||
import USER_AGENT, {requireConfig, TotalBean} from './TS_USER_AGENTS'
|
||||
|
||||
const notify = require('./sendNotify')
|
||||
let cookie: string = '', cookiesArr: any, UserName: string, index: number;
|
||||
|
||||
!(async () => {
|
||||
cookiesArr = await requireConfig();
|
||||
for (let i = 0; i < cookiesArr.length; i++) {
|
||||
cookie = cookiesArr[i];
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
index = i + 1;
|
||||
let {isLogin, nickName}: any = await TotalBean(cookie)
|
||||
if (!isLogin) {
|
||||
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}:${nickName || UserName}`)
|
||||
continue
|
||||
}
|
||||
console.log(`\n开始【京东账号${index}】${nickName || UserName}\n`);
|
||||
|
||||
try {
|
||||
let {data} = await axios.get('https://api.m.jd.com/client.action?functionId=morningGetBean&area=22_1930_50948_52157&body=%7B%22rnVersion%22%3A%224.7%22%2C%22fp%22%3A%22-1%22%2C%22eid%22%3A%22%22%2C%22shshshfp%22%3A%22-1%22%2C%22userAgent%22%3A%22-1%22%2C%22shshshfpa%22%3A%22-1%22%2C%22referUrl%22%3A%22-1%22%2C%22jda%22%3A%22-1%22%7D&build=167724&client=apple&clientVersion=10.0.6&d_brand=apple&d_model=iPhone12%2C8&eid=eidI1aaf8122bas5nupxDQcTRriWjt7Slv2RSJ7qcn6zrB99mPt31yO9nye2dnwJ/OW%2BUUpYt6I0VSTk7xGpxEHp6sM62VYWXroGATSgQLrUZ4QHLjQw&isBackground=N&joycious=60&lang=zh_CN&networkType=wifi&networklibtype=JDNetworkBaseAF&openudid=32280b23f8a48084816d8a6c577c6573c162c174&osVersion=14.4&partner=apple&rfs=0000&scope=01&screen=750%2A1334&sign=0c19e5962cea97520c1ef9a2e67dda60&st=1625354180413&sv=112&uemps=0-0&uts=0f31TVRjBSsqndu4/jgUPz6uymy50MQJSPYvHJMKdY9TUw/AQc1o/DLA/rOTDwEjG4Ar9s7IY4H6IPf3pAz7rkIVtEeW7XkXSOXGvEtHspPvqFlAueK%2B9dfB7ZbI91M9YYXBBk66bejZnH/W/xDy/aPsq2X3k4dUMOkS4j5GHKOGQO3o2U1rhx5O70ZrLaRm7Jy/DxCjm%2BdyfXX8v8rwKw%3D%3D&uuid=hjudwgohxzVu96krv/T6Hg%3D%3D&wifiBssid=c99b216a4acd3bce759e369eaeeafd7', {
|
||||
headers: {
|
||||
'Cookie': cookie,
|
||||
'Accept': '*/*',
|
||||
'Connection': 'keep-alive',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Accept-Language': 'zh-Hans-CN;q=1',
|
||||
'Host': 'api.m.jd.com'
|
||||
}
|
||||
})
|
||||
if (data.code === '0') {
|
||||
data.data.awardResultFlag === '2'
|
||||
? console.log(data.data.bizMsg)
|
||||
: console.log(data.data.bizMsg, data.data.beanNum)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Error:', e)
|
||||
}
|
||||
}
|
||||
})()
|
23
jd_health.js
23
jd_health.js
File diff suppressed because one or more lines are too long
@ -12,20 +12,22 @@ Last Modified time: 2020-12-26 22:58:02
|
||||
============Quantumultx===============
|
||||
[task_local]
|
||||
#东东工厂
|
||||
10 * * * * https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js, tag=东东工厂, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_factory.png, enabled=true
|
||||
10 * * * * jd_jdfactory.js, tag=东东工厂, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_factory.png, enabled=true
|
||||
|
||||
================Loon==============
|
||||
[Script]
|
||||
cron "10 * * * *" script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js,tag=东东工厂
|
||||
cron "10 * * * *" script-path=jd_jdfactory.js,tag=东东工厂
|
||||
|
||||
===============Surge=================
|
||||
东东工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=3600,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js
|
||||
东东工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=3600,script-path=jd_jdfactory.js
|
||||
|
||||
============小火箭=========
|
||||
东东工厂 = type=cron,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js, cronexpr="10 * * * *", timeout=3600, enable=true
|
||||
东东工厂 = type=cron,script-path=jd_jdfactory.js, cronexpr="10 * * * *", timeout=3600, enable=true
|
||||
*/
|
||||
const $ = new Env('东东工厂');
|
||||
|
||||
console.log('\n====================Hello World====================\n')
|
||||
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
//Node.js用户请在jdCookie.js处填写京东ck;
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
@ -44,7 +46,7 @@ if ($.isNode()) {
|
||||
}
|
||||
let wantProduct = ``;//心仪商品名称
|
||||
const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
const inviteCodes = [];
|
||||
const inviteCodes = [''];
|
||||
!(async () => {
|
||||
await requireConfig();
|
||||
if (!cookiesArr[0]) {
|
||||
@ -617,7 +619,7 @@ function jdfactory_getHomeData() {
|
||||
function readShareCode() {
|
||||
console.log(`开始`)
|
||||
return new Promise(async resolve => {
|
||||
$.get({url: `http://share.turinglabs.net/api/v3/ddfactory/query/${randomCount}/`, timeout: 10000}, (err, resp, data) => {
|
||||
$.get({url: `https://api.sharecode.ga/api/ddfactory/${randomCount}`, timeout: 10000}, (err, resp, data) => {
|
||||
try {
|
||||
if (err) {
|
||||
console.log(`${JSON.stringify(err)}`)
|
||||
@ -650,12 +652,10 @@ function shareCodesFormat() {
|
||||
const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1);
|
||||
$.newShareCodes = inviteCodes[tempIndex].split('@');
|
||||
}
|
||||
/*
|
||||
const readShareCodeRes = await readShareCode();
|
||||
if (readShareCodeRes && readShareCodeRes.code === 200) {
|
||||
$.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])];
|
||||
}
|
||||
*/
|
||||
console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`)
|
||||
resolve();
|
||||
})
|
||||
|
File diff suppressed because one or more lines are too long
190
jd_yili_cow.ts
Executable file
190
jd_yili_cow.ts
Executable file
@ -0,0 +1,190 @@
|
||||
import {format} from 'date-fns';
|
||||
import axios from 'axios';
|
||||
import USER_AGENT, {TotalBean, requireConfig, wait} from "./TS_USER_AGENTS";
|
||||
import * as dotenv from 'dotenv';
|
||||
|
||||
const notify = require('./sendNotify')
|
||||
dotenv.config()
|
||||
let token: string, token2: string, actorUuid: string, shopId: number, pin: string, uuid: string;
|
||||
let milk: number;
|
||||
let cookie: string = '', res: any = '', UserName: string, index: number;
|
||||
|
||||
async function main() {
|
||||
let cookiesArr: any = await requireConfig();
|
||||
for (let i = 0; i < cookiesArr.length; i++) {
|
||||
try {
|
||||
cookie = cookiesArr[i];
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
index = i + 1;
|
||||
let {isLogin, nickName}: any = await TotalBean(cookie)
|
||||
if (!isLogin) {
|
||||
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}:${nickName || UserName}`)
|
||||
continue
|
||||
}
|
||||
console.log(`\n开始【京东账号${index}】${nickName || UserName}\n`);
|
||||
|
||||
await getIsvToken();
|
||||
await getIsvToken2();
|
||||
await init();
|
||||
|
||||
res = await api('https://lzdz-isv.isvjcloud.com/dz/common/getSimpleActInfoVo', 'activityId=dz2103100001340201')
|
||||
shopId = res.data.venderId
|
||||
res = await api('https://lzdz-isv.isvjcloud.com/customer/getMyPing', `userId=${shopId}&token=${token2}&fromType=APP`)
|
||||
pin = res.data.secretPin
|
||||
|
||||
res = await api('https://lzdz-isv.isvjcloud.com/wxActionCommon/getUserInfo', `pin=${encodeURIComponent(pin)}`)
|
||||
if(res.data?.hasOwnProperty('id')){
|
||||
uuid = res.data.id
|
||||
}else{
|
||||
continue
|
||||
}
|
||||
res = await api('https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activityContent', `activityId=dz2103100001340201&pin=${encodeURIComponent(pin)}&pinImg=null&nick=${cookie.match(/pt_pin=([^;]*)/)![1]}&cjyxPin=&cjhyPin=&shareUuid=`)
|
||||
actorUuid = res.data.actorUuid
|
||||
console.log('互助码:', actorUuid)
|
||||
milk = res.data.score2 / 10
|
||||
|
||||
for (let j = 0; j < milk; j++) {
|
||||
res = await api('feedCow', `activityId=dz2103100001340201&actorUuid=${actorUuid}&pin=${encodeURIComponent(pin)}`)
|
||||
if (res.result) {
|
||||
console.log('喂奶成功,剩余:', res.data.score2)
|
||||
} else {
|
||||
console.log('喂奶失败:', res)
|
||||
break
|
||||
}
|
||||
await wait(2000)
|
||||
}
|
||||
|
||||
while (1) {
|
||||
res = await api('start', `activityId=dz2103100001340201&actorUuid=${actorUuid}&pin=${encodeURIComponent(pin)}`)
|
||||
if (res.result) {
|
||||
console.log('抽奖成功:', res.data.name)
|
||||
} else if (res.errorMessage === '继续努力,多多喂养牛牛哦~') {
|
||||
console.log('抽奖失败,没有抽奖机会')
|
||||
break
|
||||
} else {
|
||||
console.log('抽奖失败:', res)
|
||||
break
|
||||
}
|
||||
await wait(3000)
|
||||
}
|
||||
|
||||
|
||||
let taskArr: any = [
|
||||
{taskType: 0},
|
||||
{taskType: 1},
|
||||
{taskType: 12},
|
||||
{taskType: 13, taskValue: 'ziying'},
|
||||
{taskType: 13, taskValue: 'pop'},
|
||||
{taskType: 21},
|
||||
]
|
||||
for (let t of taskArr) {
|
||||
res = await api('saveTask', `activityId=dz2103100001340201&actorUuid=${actorUuid}&pin=${encodeURIComponent(pin)}&taskType=${t.taskType}&taskValue=${t.taskValue ?? ''}`)
|
||||
if (res.result)
|
||||
console.log('任务完成:', res.data.milkCount)
|
||||
else{
|
||||
console.log('任务失败:', res)
|
||||
break
|
||||
}
|
||||
await wait(2000)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main().then()
|
||||
|
||||
function api(fn: string, body: Object): Object {
|
||||
let url: string;
|
||||
if (fn.indexOf('https://') > -1) {
|
||||
url = fn
|
||||
} else {
|
||||
url = `https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/${fn}`
|
||||
}
|
||||
return new Promise(async resolve => {
|
||||
let {data, headers} = await axios.post(url, body
|
||||
, {
|
||||
headers: {
|
||||
'Host': 'lzdz-isv.isvjcloud.com',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Referer': 'https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activity',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Accept': 'application/json',
|
||||
'Origin': 'https://lzdz-isv.isvjcloud.com',
|
||||
'Cookie': cookie
|
||||
}
|
||||
})
|
||||
reloadCookie(headers['set-cookie'])
|
||||
resolve(data);
|
||||
})
|
||||
}
|
||||
|
||||
function getIsvToken() {
|
||||
return new Promise<void>(async resolve => {
|
||||
let {data} = await axios.post("https://api.m.jd.com/client.action?functionId=genToken&clientVersion=10.0.2&client=android&uuid=818aa057737ba6a4&st=1623934987178&sign=0877498be29cda51b9628fa0195f412f&sv=111",
|
||||
`body=${escape('{"action":"to","to":"https%3A%2F%2Fh5.m.jd.com%2FbabelDiy%2FZeus%2F3KSjXqQabiTuD1cJ28QskrpWoBKT%2Findex.html%3FbabelChannel%3D45%26collectionId%3D519"}')}`, {
|
||||
headers: {
|
||||
'Host': 'api.m.jd.com',
|
||||
'charset': 'UTF-8',
|
||||
'User-Agent': USER_AGENT,
|
||||
'cache-control': 'no-cache',
|
||||
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'cookie': cookie
|
||||
}
|
||||
});
|
||||
token = data.tokenKey;
|
||||
resolve();
|
||||
})
|
||||
}
|
||||
|
||||
function getIsvToken2() {
|
||||
return new Promise<void>(async resolve => {
|
||||
let {data} = await axios.post("https://api.m.jd.com/client.action?functionId=isvObfuscator&clientVersion=10.0.2&client=android&uuid=818aa057737ba6a4&st=1623934998790&sign=e571148c8dfb456a1795d249c6aa3956&sv=100", 'body=%7B%22id%22%3A%22%22%2C%22url%22%3A%22https%3A//xinruidddj-isv.isvjcloud.com%22%7D', {
|
||||
headers: {
|
||||
'Host': 'api.m.jd.com',
|
||||
'user-agent': USER_AGENT,
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'Cookie': cookie
|
||||
}
|
||||
})
|
||||
token2 = data.token;
|
||||
cookie += 'IsvToken=' + token2 + ';'
|
||||
resolve();
|
||||
})
|
||||
}
|
||||
|
||||
function init() {
|
||||
return new Promise<void>(resolve => {
|
||||
axios.get("https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activity", {
|
||||
headers: {
|
||||
'Host': 'lzdz-isv.isvjcloud.com',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Cookie': 'IsvToken=' + token
|
||||
}
|
||||
}).then(res => {
|
||||
reloadCookie(res.headers['set-cookie'])
|
||||
resolve();
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function reloadCookie(setCookie: string[]) {
|
||||
let cookieArr: string[] = cookie.split(';')
|
||||
cookieArr.pop();
|
||||
let cookieTEMP: any = {};
|
||||
for (let ck of cookieArr)
|
||||
cookieTEMP[ck.split('=')[0]] = ck.match(/(pt_key|pt_pin|LZ_TOKEN_KEY|LZ_TOKEN_VALUE|AUTH_C_USER|lz_jdpin_token|IsvToken)=([^;]*)/)![2]
|
||||
if (setCookie) {
|
||||
for (let ck of setCookie) {
|
||||
ck = ck.split(';')[0]
|
||||
cookieTEMP[ck.split('=')[0]] = ck.match(/(pt_key|pt_pin|LZ_TOKEN_KEY|LZ_TOKEN_VALUE|AUTH_C_USER|lz_jdpin_token|IsvToken)=([^;]*)/)![2]
|
||||
}
|
||||
cookie = ''
|
||||
for (let ck in cookieTEMP) {
|
||||
if (cookieTEMP.hasOwnProperty(ck)) {
|
||||
cookie += `${ck}=${cookieTEMP[ck]};`
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user