diff --git a/沙发速运/sfexpress.js b/沙发速运/sfexpress.js new file mode 100644 index 0000000..b7cccb0 --- /dev/null +++ b/沙发速运/sfexpress.js @@ -0,0 +1,254 @@ +#!/usr/bin/python3 +# -- coding: utf-8 -- +# ------------------------------- +# @Author : github@limoruirui https://github.com/limoruirui +# @Time : 2022/8/1 23:33 +# ------------------------------- +# cron "" +# const $ = new Env('沙发速运签到'); +""" +1. 某快递app签到 脚本仅供学习交流使用, 请在下载后24h内删除 +2. 环境变量说明: + 必须 SF_SIGN : 顺丰app的sign 有效期挺久的(目前测试大于一个月) +3. 环境变量获取说明: + i. app内手动抓包 开启抓包工具 app内首页点击右上角的签到 + 链接 https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect?sign=xxx&source=SFAPP&... + 此链接内的sign即为所需的值 只保留示例中xxx的部分 + ii. 可通过 tools文件夹内的 sfExpressLogin.py 手机号验证码登录自动获取 适合不会抓包或者无法抓包 + iii. 方式二不可和app登录共存 自己登录app会顶号导致sign失效 需要登录app的话 请手动抓包 +""" +""" +update: + time: 2022/10/9 + content: 参考chavy佬(github@chavyleung https://github.com/chavyleung)之前脚本内的旧版本的任务接口, 增加三个以前的每日任务 +""" +from requests import Session +from json import dumps +from tools.send_msg import push +from tools.tool import timestamp, md5, print_now, get_environ + +sign = get_environ("SF_SIGN") +if sign == "": + exit(0) + + +class SFExpress: + def __init__(self, sign): + self.session = Session() + self.sign = sign + self.sign = str(self.sign).replace("+", "%2B") + self.sign = str(self.sign).replace("/", "%2F") + + def refersh_cookie(self): + login_url = f"https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect?sign={self.sign}&source=SFAPP&bizCode=647@RnlvejM1R3VTSVZ6d3BNaXJxRFpOUVVtQkp0ZnFpNDBKdytobm5TQWxMeHpVUXVrVzVGMHVmTU5BVFA1bXlwcw==" + self.headers = { + "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", + "accept-encoding": "gzip, deflate, br", + "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7", + "cache-control": "no-cache", + "pragma": "no-cache", + "sec-ch-ua": "\".Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"103\", \"Chromium\";v=\"103\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"Windows\"", + "sec-fetch-dest": "document", + "sec-fetch-mode": "navigate", + "sec-fetch-site": "none", + "sec-fetch-user": "?1", + "upgrade-insecure-requests": "1", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" + } + req = self.session.get(login_url, headers=self.headers) + self.referer_url = req.url + + def get_sign(self, timestam): + return md5(f"token=wwesldfs29aniversaryvdld29×tamp={timestam}&sysCode=MCS-MIMP-CORE") + + def wx_check_in(self): + # 微信小程序签到 + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/integralTaskSignPlusService/automaticSignFetchPackage" + timestam = timestamp() + body = { + "channelFrom": "MINI_PROGRAM", + # "channelFrom" : "WEIXIN", + "comeFrom": "vioin" + } + headers = { + "Host": "mcs-mimp-web.sf-express.com", + "Accept": "application/json, text/plain, */*", + "timestamp": str(timestam), + "sysCode": "MCS-MIMP-CORE", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Accept-Encoding": "gzip, deflate, br", + "signature": self.get_sign(timestam), + "Content-Type": "application/json;charset=utf-8", + "Origin": "https://mcs-mimp-web.sf-express.com", + "User-Agent": "Mozilla/5.0 (iPad; CPU OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.26(0x18001a29) NetType/WIFI Language/zh_CN miniProgram/wxd4185d00bf7e08ac ", + "Referer": self.referer_url, + "Content-Length": str(len(dumps(body).replace(" ", ""))), + "Connection": "keep-alive ", + } + print_now(self.session.post(url, headers=headers, json=body).text) + + def app_check_in(self): + # url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~getUnFetchPointAndDiscount" + # url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/integralTaskSignPlusService/automaticSignFetchPackage" + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~automaticSignFetchPackage" + timestam = timestamp() + body = { + "comeFrom": "vioin", + "channelFrom": "SFAPP" + } + headers = { + "Host": "mcs-mimp-web.sf-express.com", + "Accept": "application/json, text/plain, */*", + "timestamp": str(timestam), + "sysCode": "MCS-MIMP-CORE ", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Accept-Encoding": "gzip, deflate, br", + "signature": self.get_sign(timestam), + "Content-Type": "application/json;charset=utf-8", + "Origin": "https://mcs-mimp-web.sf-express.com", + "User-Agent": "Mozilla/5.0 (iPad; CPU OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 mediaCode=SFEXPRESSAPP-iOS-ML", + "Referer": self.referer_url, + "Content-Length": str(len(dumps(body).replace(" ", ""))), + "Connection": "keep-alive " + } + print_now(self.session.post(url, headers=headers, json=body).json()) + + # 获取任务信息 status 2 未完成 1待领取奖励 3已完成 + def get_task(self): + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~queryPointTaskAndSignFromES" + # url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/appTask/queryPointTaskAndSign" + timestam = timestamp() + headers = { + "Host": "mcs-mimp-web.sf-express.com", + "Accept": "application/json, text/plain, */*", + "timestamp": str(timestam), + "sysCode": "MCS-MIMP-CORE ", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Accept-Encoding": "gzip, deflate, br", + "signature": self.get_sign(timestam), + "Content-Type": "application/json;charset=utf-8", + "Origin": "https://mcs-mimp-web.sf-express.com", + "User-Agent": "Mozilla/5.0 (iPad; CPU OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.26(0x18001a29) NetType/WIFI Language/zh_CN miniProgram/wxd4185d00bf7e08ac ", + "Referer": self.referer_url, + "Content-Length": "22", + "Connection": "keep-alive ", + } + for i in range(1, 3): + body = {"channelType": f"{i}"} + req = self.session.post(url, headers=headers, json=body) + for task_msg in req.json()["obj"]["taskTitleLevels"]: + task_title = task_msg["title"] + task_status = task_msg["status"] + task_strategyId = task_msg["strategyId"] + task_code = task_msg["taskCode"] + task_id = task_msg["taskId"] + # print(task_title, end=": ") + print_now(task_title) + if task_status == 2: + self.finish_task(task_code) + self.exchange_task(task_strategyId, task_id, task_code) + elif task_status == 1: + self.exchange_task(task_strategyId, task_id, task_code) + elif task_status == 3: + print("当前任务已完成") + + def finish_task(self, task_code): + url = f"https://mcs-mimp-web.sf-express.com/mcs-mimp/task/finishTask?id={task_code}" + print_now(self.session.get(url, headers=self.headers).json()) + + def exchange_task(self, strategyId, task_id, task_code): + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~fetchIntegral" + timestam = timestamp() + body = {"strategyId": strategyId, "taskId": task_id, "taskCode": task_code} + headers = { + "Host": "mcs-mimp-web.sf-express.com", + "Accept": "application/json, text/plain, */*", + "timestamp": str(timestam), + "sysCode": "MCS-MIMP-CORE", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Accept-Encoding": "gzip, deflate, br", + "signature": self.get_sign(timestam), + "Content-Type": "application/json;charset=utf-8", + "Origin": "https://mcs-mimp-web.sf-express.com", + "User-Agent": "Mozilla/5.0 (iPad; CPU OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.26(0x18001a29) NetType/WIFI Language/zh_CN miniProgram/wxd4185d00bf7e08ac", + "Referer": self.referer_url, + "Content-Length": str(len(dumps(body).replace(" ", ""))), + "Connection": "keep-alive ", + } + print_now(self.session.post(url, headers=headers, json=body).json()) + + def query_score(self): + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/member/points/balance" + body = {} + timestam = timestamp() + headers = { + "Host": "mcs-mimp-web.sf-express.com", + "Accept": "application/json, text/plain, */*", + "timestamp": str(timestam), + "sysCode": "MCS-MIMP-CORE", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Accept-Encoding": "gzip, deflate, br", + "signature": self.get_sign(timestam), + "Content-Type": "application/json;charset=utf-8", + "Origin": "https://mcs-mimp-web.sf-express.com", + "User-Agent": "Mozilla/5.0 (iPad; CPU OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.26(0x18001a29) NetType/WIFI Language/zh_CN miniProgram/wxd4185d00bf7e08ac", + "Referer": self.referer_url, + "Content-Length": str(len(dumps(body).replace(" ", ""))), + "Connection": "keep-alive ", + } + data = self.session.post(url, headers=headers, json=body).json() + total_score = data["obj"]["availablePoints"] + print_now(f"您当前账号共有积分{total_score}") + push("顺丰签到", f"您当前账号共有积分{total_score}") + + def old_daily_task(self): + # url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/appTask/queryPointTaskAndSign" + # body = {"channel":"SFAPP","pageType": "APP_MINE_TASK"} + # data = self.session.post(url, json=body).json() + # print(data) + # pageType_list = data["obj"]["taskTitleLevels"] + pageType_list = ["packageProcess", "scanPointMarket", "scanMemberEquity"] + for pageType in pageType_list: + self.do_old_task(pageType) + self.old_task_exchange(pageType) + + def do_old_task(self, pageType): + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/appTask/scanPageToRecord" + body = {"channel": "SFAPP", "pageType": pageType} + timestam = timestamp() + self.old_headers = { + "Host": "mcs-mimp-web.sf-express.com", + "Accept": "application/json, text/plain, */*", + "timestamp": str(timestam), + "sysCode": "MCS-MIMP-CORE", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Accept-Encoding": "gzip, deflate, br", + "signature": self.get_sign(timestam), + "Content-Type": "application/json;charset=utf-8", + "Origin": "https://mcs-mimp-web.sf-express.com", + "User-Agent": "Mozilla/5.0 (iPad; CPU OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.26(0x18001a29) NetType/WIFI Language/zh_CN miniProgram/wxd4185d00bf7e08ac", + "Referer": self.referer_url, + "Content-Length": str(len(dumps(body).replace(" ", ""))), + "Connection": "keep-alive ", + } + self.session.post(url, headers=self.old_headers, json=body) + + def old_task_exchange(self, pageType): + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/appTask/fetchPoint" + body = {"channel": "SFAPP", "pageType": pageType} + print_now(self.session.post(url, headers=self.old_headers, json=body).json()) + + def main(self): + self.refersh_cookie() + # self.wx_check_in() + self.app_check_in() + self.get_task() + self.old_daily_task() + self.query_score() + + +if __name__ == "__main__": + sf = SFExpress(sign) + sf.main()