Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
 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 {}
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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)