diff --git a/TYYP.py b/TYYP.py new file mode 100644 index 0000000..3a0e701 --- /dev/null +++ b/TYYP.py @@ -0,0 +1,286 @@ +# !/usr/bin/python3 +# -- coding: utf-8 -- +# ------------------------------- +# const $ = new Env('天翼云盘签到'); + +import base64 +import hashlib +import os +import re +import time +import requests +import rsa +from os import path +from requests.packages.urllib3.exceptions import InsecureRequestWarning + +# import CHERWIN_TOOLS +# 禁用安全请求警告 +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) +IS_DEV = False +if os.path.isfile('DEV_ENV.py'): + import DEV_ENV + IS_DEV = True +if os.path.isfile('notify.py'): + from notify import send + print("加载通知服务成功!") +else: + print("加载通知服务失败!") +send_msg = '' +one_msg='' +def Log(cont=''): + global send_msg,one_msg + print(cont) + if cont: + one_msg += f'{cont}\n' + send_msg += f'{cont}\n' + +class RUN: + def __init__(self,info,index): + global one_msg + one_msg = '' + split_info = info.split('@') + self.userid = split_info[0] + self.pwd = split_info[1] + len_split_info = len(split_info) + last_info = split_info[len_split_info - 1] + self.send_UID = None + if len_split_info > 0 and "UID_" in last_info: + print('检测到设置了UID') + print(last_info) + self.send_UID = last_info + self.index = index + 1 + + self.b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + self.UA = 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6' + self.headers = { + 'User-Agent': self.UA, + "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1", + "Host": "m.cloud.189.cn", + "Accept-Encoding": "gzip, deflate", + } + + @staticmethod + def int2char(a): + return list("0123456789abcdefghijklmnopqrstuvwxyz")[a] + + def b64tohex(self, a): + d = "" + e = 0 + c = 0 + for i in range(len(a)): + if list(a)[i] != "=": + v = self.b64map.index(list(a)[i]) + if e == 0: + e = 1 + d += self.int2char(v >> 2) + c = 3 & v + elif e == 1: + e = 2 + d += self.int2char(c << 2 | v >> 4) + c = 15 & v + elif e == 2: + e = 3 + d += self.int2char(c) + d += self.int2char(v >> 2) + c = 3 & v + else: + e = 0 + d += self.int2char(c << 2 | v >> 4) + d += self.int2char(15 & v) + if e == 1: + d += self.int2char(c << 2) + return d + + def rsa_encode(self, j_rsakey, string): + rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----" + pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode()) + return self.b64tohex( + (base64.b64encode(rsa.encrypt(f"{string}".encode(), pubkey))).decode() + ) + + def login(self): + # https://m.cloud.189.cn/login2014.jsp?redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html + url = "" + urlToken = "https://m.cloud.189.cn/udb/udb_login.jsp?pageId=1&pageKey=default&clientType=wap&redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html" + r = s.get(urlToken) + pattern = r"https?://[^\s'\"]+" # 匹配以http或https开头的url + match = re.search(pattern, r.text) # 在文本中搜索匹配 + if match: # 如果找到匹配 + url = match.group() # 获取匹配的字符串 + # print(url) # 打印url + else: # 如果没有找到匹配 + print("没有找到url") + + r = s.get(url) + # print(r.text) + pattern = r"]*href=\"([^\"]+)\"" # 匹配id为j-tab-login-link的a标签,并捕获href引号内的内容 + match = re.search(pattern, r.text) # 在文本中搜索匹配 + if match: # 如果找到匹配 + href = match.group(1) # 获取捕获的内容 + r = s.get(href) + # print("href:" + href) # 打印href链接 + else: # 如果没有找到匹配 + print("没有找到href链接") + exit() + + captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0] + lt = re.findall(r'lt = "(.+?)"', r.text)[0] + returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0] + paramId = re.findall(r'paramId = "(.+?)"', r.text)[0] + j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0] + s.headers.update({"lt": lt}) + + username = self.rsa_encode(j_rsakey, self.userid) + password = self.rsa_encode(j_rsakey, self.pwd) + url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do" + headers = { + 'User-Agent': self.UA, + 'Referer': 'https://open.e.189.cn/', + } + data = { + "appKey": "cloud", + "accountType": '01', + "userName": f"{{RSA}}{username}", + "password": f"{{RSA}}{password}", + "validateCode": "", + "captchaToken": captchaToken, + "returnUrl": returnUrl, + "mailSuffix": "@189.cn", + "paramId": paramId + } + r = s.post(url, data=data, headers=headers, timeout=5) + if (r.json()['result'] == 0): + Log('登陆成功!') + print(r.json()['msg']) + else: + Log('登陆失败!') + print(r.json()['msg']) + redirect_url = r.json()['toUrl'] + r = s.get(redirect_url) + if r.status_code == 200: + return r + else: + return False + + def signIn(self): + Log('>>>>>>签到') + rand = str(round(time.time() * 1000)) + # print(rand) + surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K' + + response = s.get(surl, headers=self.headers) + netdiskBonus = response.json()['netdiskBonus'] + if (response.json().get('isSign','false') == "false"): + Log(f"未签到,签到获得{netdiskBonus}M空间\n") + else: + Log(f"已经签到过了,签到获得{netdiskBonus}M空间\n") + + def lottery(self): + Log('>>>>>>抽奖') + url_list = ['https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN', + 'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN', + 'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN'] + for index, urls in enumerate(url_list): + response = s.get(urls, headers=self.headers) + if ("errorCode" in response.text): + Log(f"链接{index + 1}抽奖失败") + print(response.text) + else: + description = response.json()['prizeName'] + Log(f"链接{index + 1}抽奖获得{description}\n") + + def main(self): + Log(f"\n开始执行第{self.index}个账号【{self.userid[-4:]}】--------------->>>>>") + if not self.login(): + print(f'\n第{self.index}个账号【{self.userid[-4:]}登陆失败!') + return False + self.signIn() + self.lottery() + self.sendMsg() + return True + + def sendMsg(self): + if self.send_UID: + push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME) + print(push_res) + + +def down_file(filename, file_url): + print(f'开始下载:{filename},下载地址:{file_url}') + try: + response = requests.get(file_url, verify=False, timeout=10) + response.raise_for_status() + with open(filename + '.tmp', 'wb') as f: + f.write(response.content) + print(f'【{filename}】下载完成!') + + # 检查临时文件是否存在 + temp_filename = filename + '.tmp' + if os.path.exists(temp_filename): + # 删除原有文件 + if os.path.exists(filename): + os.remove(filename) + # 重命名临时文件 + os.rename(temp_filename, filename) + print(f'【{filename}】重命名成功!') + return True + else: + print(f'【{filename}】临时文件不存在!') + return False + except Exception as e: + print(f'【{filename}】下载失败:{str(e)}') + return False + +def import_Tools(): + global CHERWIN_TOOLS,ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode + import CHERWIN_TOOLS + ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,local_version) + +if __name__ == '__main__': + APP_NAME = '天翼云盘' + ENV_NAME = 'TYYP' + CK_NAME = '手机号@密码' + print(f''' +✨✨✨ {APP_NAME}签到抽奖✨✨✨ +✨ 功能: + 签到 + 抽奖 +参数示例:18888888888@123456 +✨ 设置青龙变量: +export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割 +export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启 +✨ 推荐cron:0 9 * * * +✨✨✨ @Author CHERWIN✨✨✨ +''') + local_script_name = os.path.basename(__file__) + local_version = '2024.05.15' + if IS_DEV: + import_Tools() + else: + if os.path.isfile('CHERWIN_TOOLS.py'): + import_Tools() + else: + if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'): + print('脚本依赖下载完成请重新运行脚本') + import_Tools() + else: + print( + '脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖') + exit() + print(TIPS) + token = '' + token = ENV if ENV else token + if not token: + print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''") + exit() + tokens = CHERWIN_TOOLS.ENV_SPLIT(token) + # print(tokens) + if len(tokens) > 0: + print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") + access_token = [] + for index, infos in enumerate(tokens): + s = requests.session() + s.verify=False + run_result = RUN(infos, index).main() + if not run_result: continue + if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML)