def get_five_data(self): """ 功能:获取活动数据 返回值:dict """ try: url = self.server + 'five/getPveData/' + self.get_url_end() data = zlib.decompress( session.get(url=url, headers=HEADER, cookies=self.cookies, timeout=20).content) data = json.loads(data) error_find(data) for node in data['fifth_level_node']: gameData.allPoint[int(node["id"])] = node for node in data['fifth_level']: gameData.allLevel[int(node["id"])] = node self.fivedata = data if is_write and os.path.exists('requestsData'): with open('requestsData/get_five_data.json', 'w') as f: f.write(json.dumps(data)) return data except HmError as e: print('Get five data FAILED! Reason:', e.message) raise except Exception as Error_information: print('Get five data FAILED! Reason:', Error_information) raise
def get_five_user_data(self): """ 功能:获取活动数据 返回值:dict """ try: url = self.server + 'five/getUserData/' + self.get_url_end() data = zlib.decompress( session.get(url=url, headers=HEADER, cookies=self.cookies, timeout=20).content) data = json.loads(data) error_find(data) if "joyFleet" in data: self.joyFleet = data["joyFleet"] if "joyShipVo" in data: self.joyShipVo = data["joyShipVo"] if is_write and os.path.exists('requestsData'): with open('requestsData/get_ocean_data.json', 'w') as f: f.write(json.dumps(data)) return data except HmError as e: print('Get ocean data FAILED! Reason:', e.message) raise except Exception as Error_information: print('Get ocean data FAILED! Reason:', Error_information) raise
def get_pve_data(self): print('Getting pve data...') try: pve_data = zlib.decompress( session.get(url=self.server + 'pve/getPveData/' + self.get_url_end(), headers=HEADER, cookies=self.cookies, timeout=20).content) pve_data = json.loads(pve_data) error_find(pve_data) if is_write and os.path.exists('requestsData'): with open('requestsData/get_pve_data.json', 'w') as f: f.write(json.dumps(pve_data)) for eachPoint in pve_data['pveNode']: self.allPoint[int(eachPoint['id'])] = eachPoint for level in pve_data['pveLevel']: self.allLevel[int(level['id'])] = level if 'pveBuff' in pve_data: for pveBuff in pve_data['pveBuff']: self.allpveBuff[int(pveBuff['id'])] = pveBuff print('Get pve data success!') except HmError as e: print('Get ship info FAILED! Reason:', e.message) raise except Exception as e: print('Get ship info FAILED! Reason:', e) raise
def get_ocean_level(self): """ 功能:获取活动数据 返回值:dict """ try: url = self.server + 'ocean/getCIAList/' + self.get_url_end() data = zlib.decompress( session.get(url=url, headers=HEADER, cookies=self.cookies, timeout=20).content) data = json.loads(data) error_find(data) if "pveEventLevel" in data: for level in data['pveEventLevel']: self.allLevel[int(level['id'])] = level if is_write and os.path.exists('requestsData'): with open('requestsData/get_ocean_data.json', 'w') as f: f.write(json.dumps(data)) return data except HmError as e: print('Get ocean data FAILED! Reason:', e.message) raise except Exception as Error_information: print('Get ocean data FAILED! Reason:', Error_information) raise
def get_activity_point(self): print('Get_activity_point') try: pve_data = zlib.decompress( session.get(url=self.server + 'pevent/getPveData/' + self.get_url_end(), headers=HEADER, cookies=self.cookies, timeout=20).content) pve_data = json.loads(pve_data) error_find(pve_data) if is_write and os.path.exists('requestsData'): with open('requestsData/peventGetPveData.json', 'w') as f: f.write(json.dumps(pve_data)) if type(pve_data) == dict: if "pveNode" in pve_data: for eachPoint in pve_data['pveNode']: self.allPoint[int(eachPoint['id'])] = eachPoint if "pveEventLevel" in pve_data: for level in pve_data['pveEventLevel']: self.allLevel[int(level['id'])] = level if 'pveActive' in pve_data: self.activedata = pve_data['pveActive'] print('Get pve data success!') except HmError as e: print('Get ship info FAILED! Reason:', e.message) raise except Exception as e: print('Get ship info FAILED! Reason:', e) raise
def get_campaign_data(self): """ 功能:获取战役信息 无返回值 """ print('Getting campaign data...') try: user_data = zlib.decompress( session.get(url=self.server + 'campaign/getUserData/' + self.get_url_end(), headers=HEADER, cookies=self.cookies, timeout=20).content) user_data = json.loads(user_data) error_find(user_data) self.campaignTotal = user_data['passInfo']['totalNum'] self.campaignRemainNum = user_data['passInfo']['remainNum'] self.campaignMap = user_data['canCampaignChallengeLevel'] if is_write and os.path.exists('requestsData'): with open('requestsData/get_campaign_data.json', 'w') as f: f.write(json.dumps(user_data)) return user_data except HmError as e: print('Get campaign data FAILED! Reason:', e.message) raise except Exception as e: print('Get campaign data FAILED! Reason:', e) raise
def second_login(self, host, uid, windows_login): try: # 生成随机设备码 # windows_login.statusBarSignal.emit("生成设备随机码...") now_time = str(int(round(time.time() * 1000))) random.seed(hashlib.md5(self.uid.encode('utf-8')).hexdigest()) data_dict = { 'client_version': self.version, 'phone_type': 'huawei tag-al00', 'phone_version': '5.1.1', 'ratio': '1280*720', 'service': 'CHINA MOBILE', 'udid': str(random.randint(100000000000000, 999999999999999)), 'source': 'android', 'affiliate': 'WIFI', 't': now_time, 'e': self.get_url_end(now_time), 'gz': '1', 'market': '2', 'channel': self.channel, 'version': self.version } random.seed() # 获取欺骗数据 # windows_login.statusBarSignal.emit("连接服务器...") login_url_1 = host + 'index/login/' + uid + \ '?&' + urllib.parse.urlencode(data_dict) session.get(url=login_url_1, headers=HEADER, cookies=self.cookies, timeout=20) # windows_login.statusBarSignal.emit("请求init数据...") self.get_init_data() # windows_login.statusBarSignal.emit("初始化界面...") windows_login.second_login_deal({}) return True except HmError as e: log.e("第二次登录请求数据出错", e.message) windows_login.second_login_deal({"error": 0, "errmsg": e.message}) return False except Exception as e: log.e("第二次登录请求数据出错", e) windows_login.second_login_deal({"error": 0, "errmsg": str(e)}) return False
def get_init_data2(self, res_url, end): """ 获取init数据 :return: """ try: print("请求新的res数据") user_data = zlib.decompress( session.get(url=res_url + end, headers=HEADER, timeout=30).content) user_data = json.loads(user_data) user_data["res_url"] = res_url user_data = json.dumps(user_data) return user_data except Exception as e_s: log.e("获取init数据出错", e_s) raise
def Mdecompress(self, url, *vdata): if len(vdata) == 0: content = session.get(url=url, headers=HEADER, cookies=self.cookies, timeout=20).content else: h = HEADER h["Content-Type"] = "application/x-www-form-urlencoded" content = session.post(url=url, data=str(vdata[0]), headers=h, cookies=self.cookies, timeout=20).content try: # 解码统一 data = zlib.decompress(content) except Exception as e_s: data = content if data == b'': data = '{}' return data
def decurl(self, name, ret=True): if name not in self.verurl: url_cheat = self.server + name + self.get_url_end() cont = session.get(url=url_cheat, headers=HEADER, cookies=self.cookies, timeout=20).content try: # 解码统一 cont = zlib.decompress(cont) except Exception as e_s: if "not exist" in str(cont, 'utf-8'): self.verurl.append(name) log.info("忽略请求: " + name) return {} shop_canbuy = json.loads(cont) disname = name.strip("/").replace("/", "_") if is_write and os.path.exists('requestsData') and ret: with open("requestsData/" + disname + ".json", 'w') as f: f.write(json.dumps(shop_canbuy)) return shop_canbuy else: return {}
def first_login_usual(self, server, username, pwd, windows_login): """ 第一次登录,获取cookies和服务器列表 :return: """ try: # windows_login.tv_selfVersion.setText(str(VERSION)) # windows_login.tv_selfVersion.setFont( # QFont("Roman times", 10, QFont.Bold)) url_version = "" if server == 0: # 安卓服 url_version = 'http://version.jr.moefantasy.com/' \ 'index/checkVer/4.6.0/100016/2&version=4.6.0&channel=100016&market=2' self.res = 'http://login.jr.moefantasy.com/index/getInitConfigs/' self.channel = "100016" self.portHead = "881d3SlFucX5R5hE" self.key = "kHPmWZ4zQBYP24ubmJ5wA4oz0d8EgIFe" elif server == 1: # ios服 url_version = 'http://version.jr.moefantasy.com/' \ 'index/checkVer/4.1.0/100015/2&version=4.1.0&channel=100015&market=2' self.res = 'http://loginios.jr.moefantasy.com/index/getInitConfigs/' self.channel = "100015" self.portHead = "881d3SlFucX5R5hE" self.key = "kHPmWZ4zQBYP24ubmJ5wA4oz0d8EgIFe" elif server == 2: # 台服 url_version = 'http://version.jr.moepoint.tw/' \ 'index/checkVer/4.0.3/100033/2&version=4.0.3&channel=100033&market=2' self.res = "http://login.jr.moepoint.tw/index/getInitConfigs/" self.channel = "100033" self.portHead = "6f67d7612241" self.key = "c918ae4f4a75464fa964093ae8a66dae" elif server == 3: # 日服 url_version = 'http://version.jp.warshipgirls.com/' \ 'index/checkVer/4.0.3/100024/2&version=3.8.0&channel=100024&market=2' self.res = "https://loginand.jp.warshipgirls.com/index/getInitConfigs/" self.channel = "100024" elif server == 4: # 国际服 url_version = 'http://enversion.warshipgirls.com/' \ 'index/checkVer/4.1.0/100060/2&version=4.1.0&channel=100060&market=2' self.res = "http://enlogin.warshipgirls.com/index/getInitConfigs/" self.channel = "100060" self.portHead = "krtestfrontend" self.key = "abcdef01234567890abcdef01234567890" # 请求version # ----------------- # 拉取版本信息 # windows_login.statusBarSignal.emit("拉取版本信息...") response_version = session.get(url=url_version, headers=HEADER, timeout=20) response_version = response_version.text response_version = json.loads(response_version) if 'eid' in response_version: return_data = {"error": 0, "errmsg": ''} if response_version['eid'] == -9999: log.error("拉取版本信息出错:", "服务器维护中...") return_data["errmsg"] = "服务器维护中..." else: log.error("拉取版本信息出错:", "未知错误...") return_data["errmsg"] = "未知错误..." windows_login.first_login_deal(return_data) return False init_data.new_init_version = response_version['DataVersion'] error_find(response_version) if is_write and os.path.exists('requestsData'): with open('requestsData/version.json', 'w') as f: f.write(json.dumps(response_version)) # 获取版本号, 登录地址 self.version = response_version["version"]["newVersionId"] self.login_server = response_version["loginServer"] self.hm_login_server = response_version["hmLoginServer"] # windows_login.tv_gameVersion.setText(str(self.version)) # windows_login.tv_gameVersion.setFont( # QFont("Roman times", 10, QFont.Bold)) # # ------------------ # 进行登录游戏 server_data = {} if server == 0 or server == 1 or server == 2 or server == 4: server_data = self.login_usual(server=server, username=username, pwd=pwd) else: server_data = self.login_japan(username=username, password=pwd) self.defaultServer = int(server_data["defaultServer"]) self.server_list = server_data["serverList"] self.uid = server_data["userId"] return_data = { "version": self.version, "channel": self.channel, "cookie": self.cookies, "server_list": self.server_list, "default_server": self.defaultServer, "uid": self.uid } windows_login.first_login_deal(return_data) return True except HmError as e: return_data = {"error": 0, "errmsg": e.message} windows_login.first_login_deal(return_data) log.error("第一次登录出错:", e.message) return False except Exception as e: return_data = {"error": 0, "errmsg": str(e)} windows_login.first_login_deal(return_data) log.error("第一次登录出错:", e) return False
def get_user_data(self): """ 功能:首次登陆获取信息 无返回值 """ print('Getting user data...') try: user_data = zlib.decompress( session.get(url=self.server + 'api/initGame?&crazy=0' + self.get_url_end(), headers=HEADER, cookies=self.cookies, timeout=20).content) user_data = json.loads(user_data) error_find(user_data) if is_write and os.path.exists('requestsData'): with open('requestsData/user_data.json', 'w') as f: f.write(json.dumps(user_data)) self.allData = user_data if "detailInfo" in user_data["userVo"]: self.userDetail = user_data["userVo"]["detailInfo"] self.uid = user_data['userVo']['uid'] self.username = user_data['userVo']['username'] self.level = user_data['userVo']['level'] self.shipNumTop = user_data['userVo']['shipNumTop'] self.exp = user_data['userVo']['exp'] self.nextExp = user_data['userVo']['nextExp'] self.upgrade_fleet(user_data) self.oil = user_data['userVo']['oil'] self.ammo = user_data['userVo']['ammo'] self.steel = user_data['userVo']['steel'] self.aluminium = user_data['userVo']['aluminium'] self.secretary = int(user_data['secretary']) self.login_award = user_data['marketingData'][ 'continueLoginAward']['canGetDay'] self.main_data = user_data self.startTime = user_data['systime'] self.exploreInfo.clear() for eachExplore in user_data['pveExploreVo']['levels']: self.exploreInfo.append(eachExplore) self.taskInfo.clear() for eachTask in user_data['taskVo']: self.taskInfo[int(eachTask['taskCid'])] = eachTask self.allShip.clear() if 'userShipVO' in user_data: for eachShip in user_data['userShipVO']: self.allShip[eachShip['id']] = eachShip self.allEquipment.clear() for eachEquipment in user_data['equipmentVo']: self.allEquipment[ eachEquipment['equipmentCid']] = eachEquipment self.package.clear() for eachPackage in user_data['packageVo']: self.package[eachPackage['itemCid']] = eachPackage['num'] self.unlockShip.clear() for eachUnlockShip in user_data["unlockShip"]: self.unlockShip.append(int(eachUnlockShip)) self.dock = user_data['dockVo'] self.equipmentDock = user_data['equipmentDockVo'] self.repairDock = user_data['repairDockVo'] if 541 in self.package: self.fastRepair = int(self.package[541]) if 141 in self.package: self.fastBuild = int(self.package[141]) if 741 in self.package: self.equipmentMap = int(self.package[741]) if 241 in self.package: self.shipBlueMap = int(self.package[241]) if 10141 in self.package: self.cvCube = int(self.package[10141]) if 10241 in self.package: self.bbCube = int(self.package[10241]) if 10341 in self.package: self.clCube = int(self.package[10341]) if 10441 in self.package: self.ddCube = int(self.package[10441]) if 10541 in self.package: self.ssCube = int(self.package[10541]) if self.is_first_login is True: self.oilFirst = self.oil self.ammoFirst = self.ammo self.steelFirst = self.steel self.aluminiumFirst = self.aluminium self.fastRepairFirst = self.fastRepair self.is_first_login = False print('Get user data success!') except HmError as e: print('Get user data FAILED! Reason:', e.message) raise except Exception as Error_information: print('Get user data FAILED! Reason:', Error_information) raise
def login_usual(self, username, pwd, server): try: def login_token(): # windows_login.statusBarSignal.emit("获取token...") url_login = self.hm_login_server + "1.0/get/login/@self" # 获取tokens data = {} if server == 0 or server == 1 or server == 4: # 安卓服 ios服 国际服 data = { "platform": "0", "appid": "0", "app_server_type": "0", "password": pwd, "username": username } elif server == 2: # 台服 data = { "appId": "0", "appServerType": "0", "password": pwd, "userName": username } self.refresh_headers(url_login) login_response = session.post(url=url_login, data=json.dumps(data).replace( " ", ""), headers=self.pastport_headers, timeout=20).text login_response = json.loads(login_response) if "error" in login_response and int( login_response["error"]) != 0: if "errmsg" in login_response: raise HmError(-113, login_response["errmsg"]) else: raise HmError(-113, "无法登录服务器") # 字段里是否存在存在token tokens = "" if "access_token" in login_response: tokens = login_response["access_token"] if "token" in login_response: tokens = login_response["token"] token_list = {} # 写入tokens if os.path.exists("config/token.json"): with open("config/token.json", 'r') as f2: token_list = json.loads(f2.read()) token_list[username] = tokens with open("config/token.json", 'w') as f1: f1.write(json.dumps(token_list)) return tokens # 第一个意义不明 # windows_login.statusBarSignal.emit("请求initConfig...") url_init = self.hm_login_server + "1.0/get/initConfig/@self" self.refresh_headers(url_init) session.post(url=url_init, data="{}", headers=self.pastport_headers, timeout=20) time.sleep(1) # 获取token token = "" if os.path.exists("config/token.json"): with open("config/token.json", "r") as f: token_json = json.loads(f.read()) if username in token_json: token = token_json[username] while True: # 没有token,获取token if len(token) < 10: token = login_token() time.sleep(1) # 验证token # windows_login.statusBarSignal.emit("验证token...") url_info = self.hm_login_server + "1.0/get/userInfo/@self" login_data = {} if server == 0 or server == 1: login_data = json.dumps({"access_token": token}) else: login_data = json.dumps({"token": token}) self.refresh_headers(url_info) user_info = session.post(url=url_info, data=login_data, headers=self.pastport_headers, timeout=20).text user_info = json.loads(user_info) # 口令失效, 重新获取 if "error" in user_info and user_info["error"] != 0: token = "" continue else: # 口令正确 break # 获取用户信息 # windows_login.statusBarSignal.emit("获取用户信息...") login_url = self.login_server + "index/hmLogin/" + token + self.get_url_end( ) login_response = session.get(url=login_url, headers=HEADER, timeout=20) login_text = json.loads(zlib.decompress(login_response.content)) if is_write and os.path.exists('requestsData'): with open("requestsData/login.json", 'w') as f: f.write(json.dumps(login_text)) self.cookies = login_response.cookies.get_dict() self.uid = str(login_text['userId']) return login_text except HmError as e: raise except Exception as e: log.error("登录游戏出错", e)