❌
This commit is contained in:
parent
6e1c03d955
commit
4f49ffd71f
@ -1,314 +0,0 @@
|
|||||||
// (!!测试脚本)该脚本用于在前端网页显示近几天的京豆变化。适用环境: elecV2P
|
|
||||||
// 参考修改自:https://github.com/dompling/Scriptable/blob/master/Scripts/JDDouK.js
|
|
||||||
// 首次运行时耗时较长,请耐心等待
|
|
||||||
// 脚本地址:https://raw.githubusercontent.com/elecV2/elecV2P-dei/master/examples/JSTEST/evui-dou.js
|
|
||||||
|
|
||||||
class Widget {
|
|
||||||
constructor() {
|
|
||||||
this.name = "京东豆收支";
|
|
||||||
this.JDCookie = {
|
|
||||||
cookie: $store.get('CookieJD'),
|
|
||||||
userName: '', // 设置显示的用户名,如果为空将使用京东默认昵称代替
|
|
||||||
};
|
|
||||||
this.rangeDay = 5; // 天数范围配置
|
|
||||||
this.cache = true; // true: 只在每天首次运行时请求新的数据。 false: 每次运行都获取最新数据
|
|
||||||
this.notify = true; // 是否发送通知
|
|
||||||
}
|
|
||||||
|
|
||||||
rangeTimer = {};
|
|
||||||
timerKeys = [];
|
|
||||||
beanCount = 0;
|
|
||||||
beanChange = [];
|
|
||||||
|
|
||||||
chartConfig = (labels = [], datas = [], datas2 = []) => {
|
|
||||||
const color = `#003153`;
|
|
||||||
let template = `
|
|
||||||
{
|
|
||||||
'type': 'bar',
|
|
||||||
'data': {
|
|
||||||
'labels': __LABELS__,
|
|
||||||
'datasets': [
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
backgroundColor: '#fff',
|
|
||||||
borderColor: getGradientFillHelper('vertical', ['#c8e3fa', '#e62490']),
|
|
||||||
'borderWidth': 2,
|
|
||||||
pointRadius: 5,
|
|
||||||
'fill': false,
|
|
||||||
'data': __DATAS__,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
backgroundColor: '#88f',
|
|
||||||
borderColor: getGradientFillHelper('vertical', ['#c8e3fa', '#0624e9']),
|
|
||||||
'borderWidth': 2,
|
|
||||||
pointRadius: 5,
|
|
||||||
'fill': false,
|
|
||||||
'data': __DATAS2__,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'options': {
|
|
||||||
plugins: {
|
|
||||||
datalabels: {
|
|
||||||
display: true,
|
|
||||||
align: 'top',
|
|
||||||
color: __COLOR__,
|
|
||||||
font: {
|
|
||||||
size: '16'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
layout: {
|
|
||||||
padding: {
|
|
||||||
left: 0,
|
|
||||||
right: 0,
|
|
||||||
top: 30,
|
|
||||||
bottom: 5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
responsive: true,
|
|
||||||
maintainAspectRatio: true,
|
|
||||||
'legend': {
|
|
||||||
'display': false,
|
|
||||||
},
|
|
||||||
'title': {
|
|
||||||
'display': false,
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
xAxes: [
|
|
||||||
{
|
|
||||||
gridLines: {
|
|
||||||
display: false,
|
|
||||||
color: __COLOR__,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: true,
|
|
||||||
fontColor: __COLOR__,
|
|
||||||
fontSize: '16',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
yAxes: [
|
|
||||||
{
|
|
||||||
ticks: {
|
|
||||||
display: false,
|
|
||||||
beginAtZero: true,
|
|
||||||
fontColor: __COLOR__,
|
|
||||||
},
|
|
||||||
gridLines: {
|
|
||||||
borderDash: [7, 5],
|
|
||||||
display: false,
|
|
||||||
color: __COLOR__,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}`;
|
|
||||||
|
|
||||||
template = template.replaceAll("__COLOR__", `'${color}'`);
|
|
||||||
template = template.replace("__LABELS__", `${JSON.stringify(labels)}`);
|
|
||||||
template = template.replace("__DATAS__", `${JSON.stringify(datas)}`);
|
|
||||||
template = template.replace("__DATAS2__", `${JSON.stringify(datas2)}`);
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
init = async () => {
|
|
||||||
try {
|
|
||||||
if (!this.JDCookie.cookie) return;
|
|
||||||
this.rangeTimer = this.getDay(this.rangeDay);
|
|
||||||
this.rangeTimerd = this.getDay(this.rangeDay);
|
|
||||||
this.timerKeys = Object.keys(this.rangeTimer);
|
|
||||||
await this.getAmountData();
|
|
||||||
await this.TotalBean();
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
getAmountData = async () => {
|
|
||||||
let i = 0,
|
|
||||||
page = 1;
|
|
||||||
do {
|
|
||||||
let response = await this.getJingBeanBalanceDetail(page);
|
|
||||||
// console.debug(response.data)
|
|
||||||
response = response.data
|
|
||||||
const result = response.code === "0";
|
|
||||||
console.log(`正在获取京豆收支明细,第${page}页:${result ? "请求成功" : "请求失败"}`);
|
|
||||||
if (response.code === "3") {
|
|
||||||
i = 1;
|
|
||||||
console.log(response);
|
|
||||||
}
|
|
||||||
if (response && result) {
|
|
||||||
page++;
|
|
||||||
let detailList = response.jingDetailList;
|
|
||||||
if (detailList && detailList.length > 0) {
|
|
||||||
for (let item of detailList) {
|
|
||||||
const dates = item.date.split(" ");
|
|
||||||
if (this.timerKeys.indexOf(dates[0]) > -1) {
|
|
||||||
const amount = Number(item.amount);
|
|
||||||
if (amount > 0) this.rangeTimer[dates[0]] += amount;
|
|
||||||
else this.rangeTimerd[dates[0]] += amount
|
|
||||||
} else {
|
|
||||||
i = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (i === 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
getDay(dayNumber) {
|
|
||||||
let data = {};
|
|
||||||
let i = dayNumber;
|
|
||||||
do {
|
|
||||||
const today = new Date();
|
|
||||||
const year = today.getFullYear();
|
|
||||||
const targetday_milliseconds = today.getTime() - 1000 * 60 * 60 * 24 * i;
|
|
||||||
today.setTime(targetday_milliseconds); //注意,这行是关键代码
|
|
||||||
let month = today.getMonth() + 1;
|
|
||||||
month = month >= 10 ? month : `0${month}`;
|
|
||||||
let day = today.getDate();
|
|
||||||
day = day >= 10 ? day : `0${day}`;
|
|
||||||
data[`${year}-${month}-${day}`] = 0;
|
|
||||||
i--;
|
|
||||||
} while (i >= 0);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
getJingBeanBalanceDetail = async (page) => {
|
|
||||||
try {
|
|
||||||
const options = {
|
|
||||||
url: `https://bean.m.jd.com/beanDetail/detail.json`,
|
|
||||||
body: `page=${page}`,
|
|
||||||
headers: {
|
|
||||||
Accept: "application/json,text/plain, */*",
|
|
||||||
"Content-Type": "application/x-www-form-urlencoded",
|
|
||||||
"Accept-Encoding": "gzip, deflate, br",
|
|
||||||
"Accept-Language": "zh-cn",
|
|
||||||
Connection: "keep-alive",
|
|
||||||
Cookie: this.JDCookie.cookie,
|
|
||||||
Referer: "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2",
|
|
||||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1",
|
|
||||||
},
|
|
||||||
method: 'post'
|
|
||||||
};
|
|
||||||
return await $axios(options);
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TotalBean = async () => {
|
|
||||||
const options = {
|
|
||||||
"url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`,
|
|
||||||
"headers": {
|
|
||||||
"Accept": "application/json,text/plain, */*",
|
|
||||||
"Content-Type": "application/x-www-form-urlencoded",
|
|
||||||
"Accept-Encoding": "gzip, deflate, br",
|
|
||||||
"Accept-Language": "zh-cn",
|
|
||||||
"Connection": "keep-alive",
|
|
||||||
"Cookie": this.JDCookie.cookie,
|
|
||||||
"Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2",
|
|
||||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let res = await $axios(options)
|
|
||||||
if (res && res.data) {
|
|
||||||
let data = res.data
|
|
||||||
if (data.retcode === 0 && data.base) {
|
|
||||||
this.JDCookie.userName = this.JDCookie.userName || data.base.nickname
|
|
||||||
this.beanCount = data.base.jdNum
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
createChart = async () => {
|
|
||||||
let labels = [],
|
|
||||||
data = [], data2 = [];
|
|
||||||
Object.keys(this.rangeTimer).forEach((month) => {
|
|
||||||
const value = this.rangeTimer[month];
|
|
||||||
const arrMonth = month.split("-");
|
|
||||||
labels.push(`${arrMonth[1]}.${arrMonth[2]}`);
|
|
||||||
data.push(value);
|
|
||||||
data2.push(this.rangeTimerd[month])
|
|
||||||
});
|
|
||||||
this.beanChange.push(data)
|
|
||||||
this.beanChange.push(data2)
|
|
||||||
const chartStr = this.chartConfig(labels, data, data2);
|
|
||||||
console.debug(chartStr);
|
|
||||||
|
|
||||||
return await this.chartUrl(chartStr)
|
|
||||||
};
|
|
||||||
|
|
||||||
chartUrl = async (data) => {
|
|
||||||
const req = {
|
|
||||||
url: 'https://quickchart.io/chart/create',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
method: 'post',
|
|
||||||
data: {
|
|
||||||
"backgroundColor": "transparent",
|
|
||||||
"width": 580,
|
|
||||||
"height": 320,
|
|
||||||
"format": "png",
|
|
||||||
"chart": data
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return await $axios(req)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
!(async ()=>{
|
|
||||||
let evdou = $store.get('evdou'),
|
|
||||||
today = new Date().getDay()
|
|
||||||
const eDou = new Widget()
|
|
||||||
if (eDou.cache && evdou && evdou.day === today && evdou.imgurl) {
|
|
||||||
console.log('使用 cache 数据显示', eDou.name)
|
|
||||||
} else {
|
|
||||||
await eDou.init()
|
|
||||||
let res = await eDou.createChart()
|
|
||||||
let data = res.data
|
|
||||||
if (data && data.success) {
|
|
||||||
evdou = {
|
|
||||||
day: today,
|
|
||||||
userName: eDou.JDCookie.userName,
|
|
||||||
total: eDou.beanCount,
|
|
||||||
change: eDou.beanChange,
|
|
||||||
imgurl: data.url,
|
|
||||||
}
|
|
||||||
$store.put(evdou, 'evdou')
|
|
||||||
} else {
|
|
||||||
console.log(data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (evdou.imgurl) {
|
|
||||||
showChart(evdou.imgurl, evdou.userName, evdou.total, eDou.name)
|
|
||||||
if (eDou.notify) {
|
|
||||||
let body = evdou.userName + ': ' + evdou.total
|
|
||||||
if (evdou.change) {
|
|
||||||
body += '\n' + '近期收入:' + evdou.change[0].join(', ')
|
|
||||||
body += '\n' + '近期支出:' + evdou.change[1].join(', ')
|
|
||||||
}
|
|
||||||
$feed.push(eDou.name, evdou.userName + ': ' + evdou.total, evdou.imgurl)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})().catch(e=>console.log(e))
|
|
||||||
|
|
||||||
function showChart(imgurl, userName, total, title) {
|
|
||||||
$evui({
|
|
||||||
title,
|
|
||||||
width: 640,
|
|
||||||
height: 389,
|
|
||||||
content: `<div style="filter: blur(3px);-webkit-filter: blur(3px);background: url(https://bing.ioliu.cn/v1/rand);height: 100%;"></div><div style="position: absolute;right: 12px;top: 46px;padding: 8px;border: 1px solid #003153;border-radius: 20px;">${userName}: ${total}</div><img style="background: #ffffff88;position: absolute;top: 36px;left: 0;" src="${imgurl}">`,
|
|
||||||
style: {
|
|
||||||
title: "background: #6B8E23;",
|
|
||||||
content: "text-align: center"
|
|
||||||
},
|
|
||||||
resizable: true,
|
|
||||||
}).then(data=>console.log(data)).catch(e=>console.log(e))
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user