forked from Toulu-debug/enen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jd_reward.ts
152 lines (141 loc) · 4.37 KB
/
jd_reward.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/**
*
* Running time limit:
* s >= 58 or s <= 30 => exchange()
* s > 30 and s < 58 => wait...
*
*/
import axios from 'axios';
import USER_AGENT from './TS_USER_AGENTS';
import * as fs from 'fs';
let $: any = {};
let cookie: string = '', cookiesArr: Array<string> = [], validate: string = '';
let target: number = process.env.JD_JOY_REWARD_NAME ? parseInt(process.env.JD_JOY_REWARD_NAME) : 500;
!(async () => {
let validate_arr: string | Array<string> = fs.readFileSync('./validate.txt', 'utf-8')
if (validate_arr.indexOf('\n')) {
validate_arr = validate_arr.split('\n')
validate_arr.pop()
}
await requireConfig();
for (let i = 0; i < cookiesArr.length; i++) {
cookie = cookiesArr[i];
$.UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
$.index = i + 1;
$.isLogin = true;
$.nickName = '';
await TotalBean();
console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`);
if (i < validate_arr.length)
validate = validate_arr[i]
else {
console.log('预存验证码不够用,退出!')
break
}
let tasks: any = await init();
let h: number = new Date().getHours();
let config: any;
if (h >= 0 && h < 8)
config = tasks.data['beanConfigs0']
if (h >= 8 && h < 16)
config = tasks.data['beanConfigs8']
if (h >= 16 && h < 24)
config = tasks.data['beanConfigs16']
for (let bean of config) {
console.log(bean.id, bean.giftName, bean.leftStock)
if (bean.giftValue === target) {
await exchange(bean.id)
}
}
}
})()
function init() {
return new Promise(async resolve => {
let {data} = await axios.get(`https://jdjoy.jd.com/common/gift/getBeanConfigs?reqSource=h5&invokeKey=NRp8OPxZMFXmGkaE&validate=${validate}`, {
headers: {
'Host': 'jdjoy.jd.com',
'content-type': 'application/json',
'origin': 'https://h5.m.jd.com',
"User-Agent": USER_AGENT,
'referer': 'https://jdjoy.jd.com/',
'cookie': cookie
}
})
resolve(data);
})
}
function exchange(beanId: number) {
console.log('exchange()')
return new Promise<void>(async resolve => {
while (1) {
let s: number = new Date().getSeconds();
if (s >= 58 || s <= 30) {
break
} else {
await wait(500)
}
}
let {data} = await axios.post(`https://jdjoy.jd.com/common/gift/new/exchange?reqSource=h5&invokeKey=NRp8OPxZMFXmGkaE&validate=${validate}`,
JSON.stringify({"buyParam": {"orderSource": 'pet', "saleInfoId": beanId}, "deviceInfo": {}}), {
headers: {
"Host": "jdjoy.jd.com",
"Accept-Language": "zh-cn",
"Content-Type": "application/json",
"Origin": "https://jdjoy.jd.com",
"User-Agent": USER_AGENT,
"Referer": "https://jdjoy.jd.com/pet/index",
"Cookie": cookie
}
})
console.log(data);
resolve();
})
}
function wait(t: number) {
return new Promise(e => setTimeout(e, t))
}
function requireConfig() {
return new Promise(resolve => {
console.log('\n====================Hello World====================\n');
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(0);
})
}
function TotalBean() {
return new Promise<void>(async resolve => {
axios.get('https://me-api.jd.com/user_new/info/GetJDUserInfoUnion', {
headers: {
Host: "me-api.jd.com",
Connection: "keep-alive",
Cookie: cookie,
"User-Agent": USER_AGENT,
"Accept-Language": "zh-cn",
"Referer": "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&",
"Accept-Encoding": "gzip, deflate, br"
}
}).then(res => {
if (res.data) {
let data = res.data
if (data['retcode'] === "1001") {
$.isLogin = false; //cookie过期
return;
}
if (data['retcode'] === "0" && data['data'] && data.data.hasOwnProperty("userInfo")) {
$.nickName = data.data.userInfo.baseInfo.nickname;
}
} else {
console.log('京东服务器返回空数据');
}
}).catch(e => {
console.log('Error:', e)
})
resolve();
})
}