forked from Toulu-debug/enen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jd_track.ts
134 lines (121 loc) · 4.68 KB
/
jd_track.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
/**
* 京东快递更新通知
* cron: 0 0-23/4 * * *
*/
import * as path from "path"
import {sendNotify} from './sendNotify'
import {existsSync, mkdirSync, readFileSync, writeFileSync} from "fs"
import USER_AGENT, {get, getCookie, exceptCookie, wait, o2s} from "./TS_USER_AGENTS"
import {pushplus} from "./utils/pushplus";
let cookie: string = '', UserName: string, allMessage: string = '', res: any = ''
!(async () => {
let cookiesArr: string[] = await getCookie()
let except: string[] = exceptCookie(path.basename(__filename))
let orders: any = {}, pushplusArr: { pt_pin: string, pushplus: string }[], pushplusUser: string[] = []
try {
pushplusArr = JSON.parse(readFileSync('./utils/account.json').toString())
} catch (e) {
console.log('utils/account.json load failed')
}
for (let user of pushplusArr) {
if (user.pushplus)
pushplusUser.push(decodeURIComponent(user.pt_pin))
}
if (existsSync('./json')) {
if (existsSync('./json/jd_track.json')) {
orders = JSON.parse(readFileSync('./json/jd_track.json').toString() || '{}')
} else {
writeFileSync('./json/jd_track.json', '{}')
}
} else {
mkdirSync('./json')
writeFileSync('./json/jd_track.json', '{}')
}
for (let [index, value] of cookiesArr.entries()) {
cookie = value
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
console.log(`\n开始【京东账号${index + 1}】${UserName}\n`)
if (except.includes(encodeURIComponent(UserName))) {
console.log('已设置跳过')
continue
}
let message: string = '', markdown: string = '', i: number = 1
let headers: object = {
'authority': 'wq.jd.com',
'user-agent': USER_AGENT,
'referer': 'https://wqs.jd.com/',
'cookie': cookie
}
try {
res = await get(`https://wq.jd.com/bases/orderlist/list?order_type=2&start_page=1&last_page=0&page_size=10&callersource=mainorder&t=${Date.now()}&sceneval=2&_=${Date.now()}&sceneval=2`, headers)
await wait(1000)
for (let order of res.orderList) {
let orderId: string = order.orderId
let orderType: string = order.orderType
let title: string = order.productList[0].title
let t: string = order.progressInfo?.tip || null
let status: string = order.progressInfo?.content || null
let shopName: string = order.shopInfo.shopName
res = await get(`https://wq.jd.com/bases/wuliudetail/dealloglist?deal_id=${orderId}&orderstate=15&ordertype=${orderType}&t=${Date.now()}&sceneval=2`, headers)
await wait(1000)
let carrier: string = res.carrier, carriageId: string = res.carriageId
if (t && status) {
if (status.match(/(?=签收|已取走|已暂存)/))
continue
if (!pushplusUser.includes(UserName)) {
console.log(`<${shopName}>\t${title}`)
console.log('\t', t, status)
console.log()
} else {
console.log('隐私保护,不显示日志')
}
if (!Object.keys(orders).includes(orderId) || orders[orderId]['status'] !== status) {
if (pushplusUser.includes(UserName)) {
console.log('+ pushplus')
markdown += `${i++}. ${title}\n\t- ${carrier} ${carriageId}\n\t- ${t} ${status}\n`
} else {
console.log('+ sendNotify')
message += `<${shopName}>\t${title}\n${carrier} ${carriageId}\n${t} ${status}\n\n`
}
}
orders[orderId] = {
user: UserName, shopName, title, t, status, carrier, carriageId
}
}
}
if (message) {
message = `【京东账号${index + 1}】 ${UserName}\n\n${message}`
allMessage += message
}
if (markdown) {
markdown = `#### <${UserName}>\n${markdown}`
await pushplus('京东快递更新', markdown, 'markdown')
}
await wait(1000)
} catch (e) {
}
}
let account: { pt_pin: string, remarks: string }[] = []
try {
account = JSON.parse(readFileSync('./utils/account.json').toString())
} catch (e) {
console.log('utils/account.json load failed')
}
// 删除已签收
Object.keys(orders).map(key => {
if (orders[key].status.match(/(?=签收|已取走|已暂存)/)) {
delete orders[key]
}
if (pushplusUser.includes(orders[key].user)) {
orders[key].title = '******'
}
})
// 替换通知中的用户名为备注
orders = JSON.stringify(orders, null, 2)
for (let acc of account) {
orders = orders.replace(new RegExp(decodeURIComponent(acc.pt_pin), 'g'), acc.remarks ?? acc.pt_pin)
}
writeFileSync('./json/jd_track.json', orders)
if (allMessage)
await sendNotify('京东快递更新', allMessage)
})()