From cef213faf5af8fd437de994fe6dfe188a1b32aa8 Mon Sep 17 00:00:00 2001 From: daiyanan1992 <52912788+daiyanan1992@users.noreply.github.com> Date: Fri, 3 Feb 2023 10:12:08 +0800 Subject: [PATCH] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加周五的金豆抢话费 --- 兑换链接.py | 255 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 兑换链接.py diff --git a/兑换链接.py b/兑换链接.py new file mode 100644 index 0000000..a66f5b1 --- /dev/null +++ b/兑换链接.py @@ -0,0 +1,255 @@ +#!/usr/bin/python3 +# -- coding: utf-8 -- +# ------------------------------- +# @Author : github@limoruirui https://github.com/limoruirui +# @Time : 2022/9/12 16:10 +# cron "0 9,10,14 * * *" script-path=xxx.py,tag=匹配cron用 +# const $ = new Env('电信并发多账号签到'); +# ------------------------------- + +""" +1. 电信签到 不需要抓包 脚本仅供学习交流使用, 请在下载后24h内删除 +2. cron说明 默认10点14点执行一次(用于兑换话费) +2. 环境变量说明: + 必须 TELECOM1 : 电信手机号@电信服务密码@宠物喂食次数(默认0,最大10)&手机号2@密码2@喂食数2 + # TELECOM 13311111111@111111@0&13322222222@222222@10 + 并发命令:task WWJqingcheng_dx/china_telecom.py conc TELECOM + task 后边是脚本所在目录/china_telecom.py conc TELECOM +3. 必须登录过 电信营业厅 app的账号才能正常运行 +""" +import calendar +import requests +import json +""" +update: + 2022.10.25 参考大佬 github@QGCliveDavis https://github.com/QGCliveDavis 的 loginAuthCipherAsymmertric 参数解密 新增app登录获取token 完成星播客系列任务 感谢大佬 + 2022.11.11 增加分享任务 + 2023.02.03 新增方便获取金豆话费连接,GOLDDATA:除周五的活动id变量名称上午1 2 5 下午1 2 5 按顺序排中间&分隔 + ZHOUDATA周五活动ID变量 +""" +from datetime import date, datetime +from random import shuffle, randint, choices +from time import sleep, strftime +from re import findall +import re +from requests import get, post +from base64 import b64encode +from tools.aes_encrypt import AES_Ctypt +from tools.rsa_encrypt import RSA_Encrypt +from tools.tool import timestamp, get_environ, print_now +from tools.send_msg import push +from login.telecom_login import TelecomLogin +from string import ascii_letters, digits +from tools.notify import send + + +class ChinaTelecom: + def __init__(self, account, pwd, checkin=True): + self.phone = account + self.ticket = "" + self.token = "" + if pwd != "" and checkin: + userLoginInfo = TelecomLogin(account, pwd).main() + self.ticket = userLoginInfo[0] + self.token = userLoginInfo[1] + + def init(self): + self.msg = "" + self.ua = f"CtClient;9.6.1;Android;12;SM-G9860;{b64encode(self.phone[5:11].encode()).decode().strip('=+')}!#!{b64encode(self.phone[0:5].encode()).decode().strip('=+')}" + self.headers = { + "Host": "wapside.189.cn:9001", + "Referer": "https://wapside.189.cn:9001/resources/dist/signInActivity.html", + "User-Agent": self.ua + } + self.key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+ugG5A8cZ3FqUKDwM57GM4io6\nJGcStivT8UdGt67PEOihLZTw3P7371+N47PrmsCpnTRzbTgcupKtUv8ImZalYk65\ndU8rjC/ridwhw9ffW2LBwvkEnDkkKKRi2liWIItDftJVBiWOh17o6gfbPoNrWORc\nAdcbpk2L+udld5kZNwIDAQAB\n-----END PUBLIC KEY-----" + + def req(self, url, method, data=None): + if method == "GET": + data = get(url, headers=self.headers) + print(data.headers.get('Referer')) + return data.json() + elif method.upper() == "POST": + data = post(url, headers=self.headers, json=data) + print(data.headers.get('Referer')) + return data.json() + else: + print_now("您当前使用的请求方式有误,请检查") + + # 长明文分段rsa加密 + def telecom_encrypt(self, text): + if len(text) <= 32: + return RSA_Encrypt(self.key).encrypt(text) + else: + encrypt_text = "" + for i in range(int(len(text) / 32) + 1): + split_text = text[(32 * i):(32 * (i + 1))] + encrypt_text += RSA_Encrypt(self.key).encrypt(split_text) + return encrypt_text + + @staticmethod + def geneRandomToken(): + randomList = choices(ascii_letters + digits, k=129) + token = f"V1.0{''.join(x for x in randomList)}" + return token + + # 查询宠物等级 + def get_level(self): + url = "https://wapside.189.cn:9001/jt-sign/paradise/getParadiseInfo" + body = { + "para": self.telecom_encrypt(f'{{"phone":{self.phone}}}') + } + data = self.req(url, "POST", body) + self.level = int(data["userInfo"]["paradiseDressup"]["level"]) + if self.level < 5: + print_now("当前等级小于5级 不领取等级权益") + return + url = "https://wapside.189.cn:9001/jt-sign/paradise/getLevelRightsList" + right_list = self.req(url, "POST", body)[f"V{self.level}"] + for data in right_list: + # print(dumps(data, indent=2, ensure_ascii=0)) + if "00金豆" in data["righstName"] or "话费" in data["righstName"]: + rightsId = data["id"] + self.level_ex(rightsId) + continue + # print(self.rightsId) + + # 每月领取等级金豆 + def level_ex(self, rightsId): + # self.get_level() + url = "https://wapside.189.cn:9001/jt-sign/paradise/conversionRights" + data = { + "para": self.telecom_encrypt(f'{{"phone":{self.phone},"rightsId":"{rightsId}"}},"receiveCount":1') + } + resp = self.req(url, "POST", data) + # print(type(resp)) + print_now(resp) + + def author(self): + """ + 通过usercode 获取 authorization + :return: + """ + self.get_usercode() + url = "https://xbk.189.cn/xbkapi/api/auth/userinfo/codeToken" + data = { + "usercode": self.usercode + } + data = post(url, headers=self.headers_live, json=data).json() + self.authorization = f"Bearer {data['data']['token']}" + self.headers_live["Authorization"] = self.authorization + + def get_userid(self): + url = "https://wapside.189.cn:9001/jt-sign/api/home/homeInfo" + body = { + "para": self.telecom_encrypt( + f'{{"phone":"{self.phone}","signDate":"{datetime.now().__format__("%Y-%m")}"}}') + } + userid = post(url, json=body).json()["data"]["userInfo"]["userThirdId"] + return userid + + # @staticmethod + def referer(self): + currentday = calendar.weekday(datetime.now().year, datetime.now().month, datetime.now().day) + data = get_environ("GOLDDATA") + zhoudata = get_environ("ZHOUDATA") + # zhoudata = '63b66a5fe7f0643fd094dc59&63b66c2030fa8f3ee7311432&63b66dd281385e2acfd76a85&63b0f2a4b4ac414e589ad295&63b0f2fc195af930e24cc957&63b0f362165ee4785ce3ae2a&63b672fb30fa8f3ee7311443' + # data = '63b66f2314e2af076ac5fd06&63b67045195af930e24cccde&63b6714db4ac414e589ad60b&63b66f2314e2af076ac5fd06c&63b67045195af930e24cccdeb&63b6714db4ac414e589ad60ba' + mondata =[] + wudata =[] + data2 = data.split("&") + data3 = zhoudata.split("&") + for i in range(len(data2)): + mondata.append(data2[i]) + for i in range(len(data3)): + wudata.append(data3[i]) + msg_str = '' + if currentday != 4 and datetime.now().hour > 0 and datetime.now().hour < 11: + print('+++++++' + self.phone + '+++++++') + print( + f'上午场一元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[0]}') + print( + f'上午场两元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[1]}') + print( + f'上午场五元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[2]}') + msg_str += f'{self.phone}\n上午场一元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[0]}' + f'\n上午场两元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[1]}' + f'\n上午场五元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[2]}' + elif currentday != 4 and datetime.now().hour >= 11: + print('+++++++' + self.phone + '+++++++') + print( + f'下午场一元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[3]}') + print( + f'下午场两元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[4]}') + print( + f'下午场五元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[5]}') + msg_str += f'{self.phone}\n下午场一元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[3]}' + f'\n下午场两元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[4]}' + f'\n下午场五元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={mondata[5]}' + elif currentday == 4 and datetime.now().hour > 0 and datetime.now().hour < 11: + print('+++++++' + self.phone + '+++++++') + print( + f'周五上午场二元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[0]}') + print( + f'周五上午场五元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[1]}') + print( + f'周五上午场十元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[2]}') + msg_str += f'{self.phone}\n周五上午场二元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[0]}' + f'\n周五上午场五元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[1]}' + f'\n周五上午场十元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[2]}' + elif currentday == 4 and datetime.now().hour >= 11: + print('+++++++' + self.phone + '+++++++') + print( + f'周五下午场一元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[3]}') + print( + f'周五下午场二元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[4]}') + print( + f'周五下午场五元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[5]}') + print( + f'周五下午场十元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[6]}') + msg_str += f'{self.phone}\n周五下午场一元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[3]}' + f'周五上午场二元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[4]}' + f'\n周五上午场五元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[5]}' + f'\n周五上午场十元元抢购连接:https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html?ticket={self.ticket}&activitieId={wudata[6]}' + + print('链接获取成功') + send('获取兑换链接通知', msg_str) + + def change_type(byte): + if isinstance(byte, bytes): + return str(byte, encoding="utf-8") + return json.JSONEncoder.default(byte) + + + def testGetID(self): + url = 'https://wapact.189.cn:9001/jdscBaiWanLua/queryTurntableBaiWan.do' + + res = requests.get(url,"GET") + print(res.json()) + + def main(self): + try: + self.referer() + except Exception as e: + print(f"请求失败:" + str(e)) + print('========================================================') + print('============================分隔符=======================') + print('========================================================') + + +# 主方法与源文件不同;增加了多账号的判断;变量格式如下 +# TELECOM 13311111111@111111@10&13322222222@222222@10 +if __name__ == "__main__": + TELECOM = get_environ("TELECOM1") + # TELECOM = '18118663878@@10' + users = TELECOM.split("&") + for i in range(len(users)): + user = users[i].split("@") + phone = user[0] + password = user[1] + foods = int(float(user[2])) + print(phone, password, foods) + if phone == "": + exit(0) + if password == "": + print_now("电信服务密码未提供 只执行部分任务") + + if datetime.now().hour + (8 - int(strftime("%z")[2])) == 12: + telecom = ChinaTelecom(phone, password, False) + telecom.init() + telecom.convert_reward() + else: + telecom = ChinaTelecom(phone, password) + telecom.main() + +