Clash/script/eleme/eleme_daily.js

214 lines
22 KiB
JavaScript
Raw Normal View History

2021-04-09 19:34:05 +08:00
const scriptName = '饿了么';
const getCoordinateRegex1 = /^https?:\/\/air\.tb\.ele\.me\/app\/conch-page\/svip-home-tasklist-new\/home\?.*longitude=([^&]*).*latitude=([^&]*)/;
const getCoordinateRegex2 = /^https?:\/\/tb\.ele\.me\/wow\/alsc\/mod\/.*longitude=([^&]*).*latitude=([^&]*)/;
const getCoordinateRegex3 = /^https?:\/\/h5\.ele\.me\/restapi\/biz\.svip_scene\/svip\/engine\/queryTrafficSupply\?.*longitude=([^&]*).*latitude=([^&]*)/;
const getCookies = /^https?:\/\/air\.tb\.ele\.me\/app\/conch-page\/svip-foodie-card\/home/;
2021-04-09 19:34:05 +08:00
const elemeCookieKey = 'eleme_app_cookie';
const elemeLongitudeKey = 'eleme_app_longitude';
const elemeLatitudeKey = 'eleme_app_latitude';
let magicJS = MagicJS(scriptName, "INFO");
magicJS.unifiedPushUrl = magicJS.read("bark_url");
2021-04-09 19:34:05 +08:00
function GetCoordinate() {
try {
let arr = [];
const hisLongitude = magicJS.read(elemeLongitudeKey);
const hisLatitude = magicJS.read(elemeLatitudeKey);
arr = magicJS.request.url.match(getCoordinateRegex1);
if (arr && arr.length < 2) {
arr = magicJS.request.url.match(getCoordinateRegex2);
}
if (arr && arr.length < 2) {
arr = magicJS.request.url.match(getCoordinateRegex3);
}
const longitude = arr[1];
const latitude = arr[2];
2021-04-09 19:34:05 +08:00
magicJS.write(elemeLongitudeKey, longitude);
magicJS.write(elemeLatitudeKey, latitude);
if (longitude !== hisLongitude || latitude !== hisLatitude) {
magicJS.notify(`更新坐标成功!`)
2021-04-09 19:34:05 +08:00
}
}
catch (err) {
magicJS.notify('获取坐标出现异常,请查阅日志。');
magicJS.logError(`获取坐标出现执行异常,异常信息:${err}`);
}
}
function GetCookies() {
let cookie = magicJS.request.headers.Cookie;
let hisCookie = magicJS.read(elemeCookieKey);
let compareCookie2 = !!cookie ? /cookie2=([a-zA-Z0-9]*)/.exec(cookie)[1] : null;
let compareHisCookie2 = !!hisCookie ? /cookie2=([a-zA-Z0-9]*)/.exec(hisCookie)[1] : null;
if (cookie && (!hisCookie || compareCookie2 !== compareHisCookie2)) {
magicJS.write(elemeCookieKey, cookie);
magicJS.logInfo(`旧的Cookie${hisCookie}\n新的Cookie${cookie}\nCookie不同写入新的Cookie成功`);
magicJS.notify('Cookie写入成功');
}
else {
magicJS.logInfo('Cookie没有变化无需更新');
2021-04-09 19:34:05 +08:00
}
}
// 获取待领取的吃货豆列表
function GetPeaList(cookie, longitude, latitude) {
return new Promise((resolve, reject) => {
2021-04-09 19:34:05 +08:00
let options = {
url: `https://h5.ele.me/restapi/biz.svip_core/v1/foodie/homepage?longitude=${longitude}&latitude=${latitude}`,
headers: {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-cn",
"Connection": "keep-alive",
"Cookie": cookie,
"Host": "h5.ele.me",
"Referer": "https://h5.ele.me/svip/home?entryStat=profile",
"User-Agent": "Rajax/1 Apple/iPhone10,3 iOS/14.2 Eleme/9.3.8",
"f-pTraceId": "WVNet_WV_2-3-74",
"f-refer": "wv_h5",
"x-shard": `loc=${longitude},${latitude}`
}
}
magicJS.get(options, (err, resp, data) => {
if (err) {
2021-04-09 19:34:05 +08:00
magicJS.logError(`获取待领取的吃货豆失败,请求异常:${err}`);
reject('获取待领取的吃货豆失败,请求异常,请查阅日志!');
}
else {
try {
2021-04-09 19:34:05 +08:00
magicJS.logDebug(`获取待领取吃货豆列表响应结果:${data}`);
let obj = typeof data === 'string' ? JSON.parse(data) : data;
if (obj.success === true) {
2021-04-09 19:34:05 +08:00
let peaList = [];
obj.foodiePeaBlock.peaList.forEach(element => {
peaList.push({ 'id': element.id, 'count': element.count, 'description': element.description });
2021-04-09 19:34:05 +08:00
});
magicJS.logInfo(`获取待领取的吃货豆成功:${JSON.stringify(peaList)}`);
resolve(peaList);
}
else {
2021-04-09 19:34:05 +08:00
magicJS.logError(`获取待领取的吃货豆失败,响应异常:${data}`);
reject('获取待领取的吃货豆失败,响应异常,请查阅日志!');
}
}
catch (err) {
2021-04-09 19:34:05 +08:00
magicJS.logError(`获取待领取的吃货豆失败,执行异常:${err},接口响应:${data}`);
reject('获取待领取的吃货豆失败,执行异常,请查阅日志!');
}
}
})
})
}
// 领取吃货豆
function DrawPea(cookie, peaId, longitude, latitude) {
return new Promise((resolve, reject) => {
2021-04-09 19:34:05 +08:00
let options = {
url: `https://h5.ele.me/restapi/biz.svip_bonus/v1/users/supervip/pea/draw?peaId=${peaId}`,
headers: {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-cn",
"Connection": "keep-alive",
"Content-Type": "application/json;charset=utf-8",
"Cookie": cookie,
"Host": "h5.ele.me",
"Origin": "https://h5.ele.me",
"Referer": "https://h5.ele.me/svip/home?entryStat=profile",
"User-Agent": "Rajax/1 Apple/iPhone10,3 iOS/14.2 Eleme/9.3.8",
"f-pTraceId": "WVNet_WV_2-3-73",
"f-refer": "wv_h5",
"x-shard": `loc=${longitude},${latitude}`
},
body: JSON.stringify({
"longitude": longitude,
"latitude": latitude
})
}
magicJS.post(options, (err, resp, data) => {
if (err) {
2021-04-09 19:34:05 +08:00
magicJS.logError(`领取吃货豆失败,请求异常:${err}`);
reject('领取吃货豆失败,请求异常,请查阅日志!');
}
else {
try {
2021-04-09 19:34:05 +08:00
magicJS.logDebug(`领取吃货豆响应结果:${data}`);
let obj = typeof data === 'string' ? JSON.parse(data) : data;
if (obj.success === true) {
2021-04-09 19:34:05 +08:00
magicJS.logInfo(`领取吃货豆成功:${data}`);
resolve(true);
}
else {
2021-04-09 19:34:05 +08:00
magicJS.logError(`领取吃货豆失败,响应异常:${data}`);
reject('领取吃货豆失败,响应异常,请查阅日志!');
}
}
catch (err) {
2021-04-09 19:34:05 +08:00
magicJS.logError(`领取吃货豆失败,执行异常:${err},接口响应:${data}`);
reject('领取吃货豆失败,执行异常,请查阅日志!');
}
}
})
})
}
; (async () => {
if (magicJS.isRequest) {
if ((
getCoordinateRegex1.test(magicJS.request.url) ||
getCoordinateRegex2.test(magicJS.request.url) ||
getCoordinateRegex3.test(magicJS.request.url)
) && magicJS.request.method == "GET") {
GetCoordinate();
}
else if (getCookies.test(magicJS.request.url)) {
GetCookies();
2021-04-09 19:34:05 +08:00
}
}
else {
2021-04-09 19:34:05 +08:00
let subTitle = "";
let content = "";
let cookie = magicJS.read(elemeCookieKey);
let longitude = magicJS.read(elemeLongitudeKey);
let latitude = magicJS.read(elemeLatitudeKey);
if (!!!cookie) {
2021-04-09 19:34:05 +08:00
magicJS.logWarning('没有读取到Cookie请先从App中获取一次Cookie');
content = '❓没有读取到有效Cookie请先从App中获取Cookie!!';
}
else {
2021-04-09 19:34:05 +08:00
// 获取待领取的吃货豆
let [getPeaListErr, peaList] = await magicJS.attempt(GetPeaList(cookie, longitude, latitude), []);
content = '吃货豆领取结果:';
if (getPeaListErr) {
2021-04-09 19:34:05 +08:00
content += '\n获取待领取的吃货豆异常请查阅日志';
}
else if (peaList.length == 0) {
2021-04-09 19:34:05 +08:00
content += '\n没有发现待领取的吃货豆';
}
else {
2021-04-09 19:34:05 +08:00
let peaCount = 0;
let drawPeaContent = '';
for (let j = 0; j < peaList.length; j++) {
2021-04-09 19:34:05 +08:00
let [drawPeaErr, result] = await magicJS.attempt(DrawPea(cookie, peaList[j].id, longitude, latitude), false);
if (drawPeaErr || result === false) {
2021-04-09 19:34:05 +08:00
drawPeaContent += `\n${peaList[j].description}-${peaList[j].count}吃货豆-领取失败`;
}
else {
2021-04-09 19:34:05 +08:00
peaCount += peaList[j].count;
drawPeaContent += `\n${peaList[j].description}-${peaList[j].count}吃货豆-领取成功`;
}
await magicJS.sleep(1000);
}
content += `\n本次共领取吃货豆${peaCount}${drawPeaContent}`;
}
}
// 通知
magicJS.notify(scriptName, subTitle, content);
}
magicJS.done();
})();
function MagicJS(e = "MagicJS", t = "INFO") { const s = { accept: "Accept", "accept-ch": "Accept-CH", "accept-charset": "Accept-Charset", "accept-features": "Accept-Features", "accept-encoding": "Accept-Encoding", "accept-language": "Accept-Language", "accept-ranges": "Accept-Ranges", "access-control-allow-credentials": "Access-Control-Allow-Credentials", "access-control-allow-origin": "Access-Control-Allow-Origin", "access-control-allow-methods": "Access-Control-Allow-Methods", "access-control-allow-headers": "Access-Control-Allow-Headers", "access-control-max-age": "Access-Control-Max-Age", "access-control-expose-headers": "Access-Control-Expose-Headers", "access-control-request-method": "Access-Control-Request-Method", "access-control-request-headers": "Access-Control-Request-Headers", age: "Age", allow: "Allow", alternates: "Alternates", authorization: "Authorization", "cache-control": "Cache-Control", connection: "Connection", "content-encoding": "Content-Encoding", "content-language": "Content-Language", "content-length": "Content-Length", "content-location": "Content-Location", "content-md5": "Content-MD5", "content-range": "Content-Range", "content-security-policy": "Content-Security-Policy", "content-type": "Content-Type", cookie: "Cookie", dnt: "DNT", date: "Date", etag: "ETag", expect: "Expect", expires: "Expires", from: "From", host: "Host", "if-match": "If-Match", "if-modified-since": "If-Modified-Since", "if-none-match": "If-None-Match", "if-range": "If-Range", "if-unmodified-since": "If-Unmodified-Since", "last-event-id": "Last-Event-ID", "last-modified": "Last-Modified", link: "Link", location: "Location", "max-forwards": "Max-Forwards", negotiate: "Negotiate", origin: "Origin", pragma: "Pragma", "proxy-authenticate": "Proxy-Authenticate", "proxy-authorization": "Proxy-Authorization", range: "Range", referer: "Referer", "retry-after": "Retry-After", "sec-websocket-extensions": "Sec-Websocket-Extensions", "sec-websocket-key": "Sec-Websocket-Key", "sec-websocket-origin": "Sec-Websocket-Origin", "sec-websocket-protocol": "Sec-Websocket-Protocol", "sec-websocket-version": "Sec-Websocket-Version", server: "Server", "set-cookie": "Set-Cookie", "set-cookie2": "Set-Cookie2", "strict-transport-security": "Strict-Transport-Security", tcn: "TCN", te: "TE", trailer: "Trailer", "transfer-encoding": "Transfer-Encoding", upgrade: "Upgrade", "user-agent": "User-Agent", "variant-vary": "Variant-Vary", vary: "Vary", via: "Via", warning: "Warning", "www-authenticate": "WWW-Authenticate", "x-content-duration": "X-Content-Duration", "x-content-security-policy": "X-Content-Security-Policy", "x-dnsprefetch-control": "X-DNSPrefetch-Control", "x-frame-options": "X-Frame-Options", "x-requested-with": "X-Requested-With", "x-surge-skip-scripting": "X-Surge-Skip-Scripting" }; return new class { constructor() { this.version = "2.2.3.3"; this.scriptName = e; this.logLevels = { DEBUG: 5, INFO: 4, NOTIFY: 3, WARNING: 2, ERROR: 1, CRITICAL: 0, NONE: -1 }; this.isLoon = typeof $loon !== "undefined"; this.isQuanX = typeof $task !== "undefined"; this.isJSBox = typeof $drive !== "undefined"; this.isNode = typeof module !== "undefined" && !this.isJSBox; this.isSurge = typeof $httpClient !== "undefined" && !this.isLoon; this.platform = this.getPlatform(); this.node = { request: undefined, fs: undefined, data: {} }; this.iOSUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1"; this.pcUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36 Edg/84.0.522.59"; this.logLevel = t; this._unifiedPushUrl = ""; if (this.isNode) { this.node.fs = require("fs"); this.node.request = require("request"); try { this.node.fs.accessSync("./magic.json", this.node.fs.constants.R_OK | this.node.fs.constants.W_OK) } catch (e) { this.node.fs.writeFileSync("./magic.json", "{}", { encoding: "utf8" }) } this.node.data = require("./magic.json") } else if (this.isJSBox) { if (!$file.exists("drive://Mag