refactor: code update
This commit is contained in:
parent
c682c5186b
commit
14f000d9d7
83
genshin.py
83
genshin.py
@ -18,8 +18,19 @@ logging.basicConfig(
|
|||||||
|
|
||||||
class ConfMeta(type):
|
class ConfMeta(type):
|
||||||
@property
|
@property
|
||||||
def index_url(self):
|
def ref_url(self):
|
||||||
return 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html'
|
return 'https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?' \
|
||||||
|
'bbs_auth_required={}&act_id={}&utm_source={}&utm_medium={}&' \
|
||||||
|
'utm_campaign={}'.format('true', self.act_id, 'bbs', 'mys', 'icon')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def role_url(self):
|
||||||
|
return 'https://api-takumi.mihoyo.com/binding/api/' \
|
||||||
|
'getUserGameRolesByCookie?game_biz={}'.format('hk4e_cn')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sign_url(self):
|
||||||
|
return 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def app_version(self):
|
def app_version(self):
|
||||||
@ -27,9 +38,12 @@ class ConfMeta(type):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def ua(self):
|
def ua(self):
|
||||||
return 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) ' \
|
return 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) Apple' \
|
||||||
'AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/%s' \
|
'WebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/{}'.format(self.app_version)
|
||||||
%(self.app_version)
|
|
||||||
|
@property
|
||||||
|
def act_id(self):
|
||||||
|
return 'e202009291139501'
|
||||||
|
|
||||||
|
|
||||||
class Conf(metaclass=ConfMeta):
|
class Conf(metaclass=ConfMeta):
|
||||||
@ -39,22 +53,14 @@ class Conf(metaclass=ConfMeta):
|
|||||||
class Roles(object):
|
class Roles(object):
|
||||||
def __init__(self, cookie:str=None):
|
def __init__(self, cookie:str=None):
|
||||||
if type(cookie) is not str:
|
if type(cookie) is not str:
|
||||||
raise TypeError("%s want a %s but got %s" %(
|
raise TypeError('%s want a %s but got %s' %(
|
||||||
self.__class__, type(__name__), type(cookie)))
|
self.__class__, type(__name__), type(cookie)))
|
||||||
|
|
||||||
self._cookie = cookie
|
|
||||||
self._url = "https://api-takumi.mihoyo.com/binding/api/" \
|
|
||||||
"getUserGameRolesByCookie?game_biz=%s" %('hk4e_cn')
|
|
||||||
|
|
||||||
def get_header(self):
|
def get_header(self):
|
||||||
actid = 'e202009291139501'
|
self._cookie = cookie
|
||||||
ref = "%s?bbs_auth_required=%s&act_id=%s&utm_source=%s" \
|
|
||||||
"&utm_medium=%s&utm_campaign=%s" %(
|
|
||||||
Conf.index_url, 'true', actid, 'bbs', 'mys', 'icon')
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'User-Agent': Conf.ua,
|
'User-Agent': Conf.ua,
|
||||||
'Referer': ref,
|
'Referer': Conf.ref_url,
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
'Accept-Encoding': 'gzip, deflate, br',
|
||||||
'Cookie': self._cookie
|
'Cookie': self._cookie
|
||||||
}
|
}
|
||||||
@ -63,7 +69,7 @@ class Roles(object):
|
|||||||
try:
|
try:
|
||||||
jdict = json.loads(
|
jdict = json.loads(
|
||||||
requests.Session().get(
|
requests.Session().get(
|
||||||
self._url, headers = self.get_header()).text)
|
Conf.role_url, headers = self.get_header()).text)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(e)
|
logging.error(e)
|
||||||
raise HTTPError
|
raise HTTPError
|
||||||
@ -78,19 +84,19 @@ class Roles(object):
|
|||||||
try:
|
try:
|
||||||
self._rolesInfo = self.get_roles()
|
self._rolesInfo = self.get_roles()
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
logging.error("HTTP error when get user game roles, " \
|
logging.error('HTTP error when get user game roles, ' \
|
||||||
"retry %s time(s) ..." %(i))
|
'retry %s time(s) ...' %(i))
|
||||||
logging.error("error is %s" %(e))
|
logging.error('error is %s' %(e))
|
||||||
errstr = str(e)
|
errstr = str(e)
|
||||||
continue
|
continue
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
logging.error("Wrong response to get user game roles, " \
|
logging.error('Wrong response to get user game roles, ' \
|
||||||
"retry %s time(s) ..." %(i))
|
'retry %s time(s) ...' %(i))
|
||||||
logging.error("response is %s" %(e))
|
logging.error('response is %s' %(e))
|
||||||
errstr = str(e)
|
errstr = str(e)
|
||||||
continue
|
continue
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error("Unknown error %s, die" %(e))
|
logging.error('Unknown error %s, die' %(e))
|
||||||
errstr = str(e)
|
errstr = str(e)
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
@ -100,38 +106,31 @@ class Roles(object):
|
|||||||
self._rolesInfo
|
self._rolesInfo
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise Exception(errstr)
|
raise Exception(errstr)
|
||||||
|
|
||||||
return self._rolesInfo
|
return self._rolesInfo
|
||||||
|
|
||||||
|
|
||||||
class Sign(object):
|
class Sign(object):
|
||||||
def __init__(self, cookie:str=None):
|
def __init__(self, cookie:str=None):
|
||||||
if type(cookie) is not str:
|
if type(cookie) is not str:
|
||||||
raise TypeError("%s want a %s but got %s" %(
|
raise TypeError('%s want a %s but got %s' %(
|
||||||
self.__class__, type(__name__), type(cookie)))
|
self.__class__, type(__name__), type(cookie)))
|
||||||
|
|
||||||
self._cookie = cookie
|
|
||||||
self._url = 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign'
|
|
||||||
|
|
||||||
# Provided by Steesha
|
# Provided by Steesha
|
||||||
def md5(self, text):
|
def md5(self, text):
|
||||||
md5 = hashlib.md5()
|
md5 = hashlib.md5()
|
||||||
md5.update(text.encode())
|
md5.update(text.encode())
|
||||||
return (md5.hexdigest())
|
return md5.hexdigest()
|
||||||
|
|
||||||
def get_DS(self):
|
def get_DS(self):
|
||||||
n = self.md5(Conf.app_version)
|
n = self.md5(Conf.app_version)
|
||||||
i = str(int(time.time()))
|
i = str(int(time.time()))
|
||||||
r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6))
|
r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6))
|
||||||
c = self.md5("salt=" + n + "&t="+ i + "&r=" + r)
|
c = self.md5('salt=' + n + '&t='+ i + '&r=' + r)
|
||||||
return i + "," + r + "," + c
|
return '{},{},{}'.format(i, r, c)
|
||||||
|
|
||||||
def get_header(self):
|
def get_header(self):
|
||||||
actid = 'e202009291139501'
|
self._cookie = cookie
|
||||||
ref = "%s?bbs_auth_required=%s&act_id=%s&utm_source=%s" \
|
|
||||||
"&utm_medium=%s&utm_campaign=%s" %(
|
|
||||||
Conf.index_url, 'true', actid, 'bbs', 'mys', 'icon')
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'x-rpc-device_id': str(uuid.uuid3(
|
'x-rpc-device_id': str(uuid.uuid3(
|
||||||
uuid.NAMESPACE_URL, self._cookie)).replace('-','').upper(),
|
uuid.NAMESPACE_URL, self._cookie)).replace('-','').upper(),
|
||||||
@ -142,7 +141,7 @@ class Sign(object):
|
|||||||
'x-rpc-client_type': '5',
|
'x-rpc-client_type': '5',
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
'Accept-Encoding': 'gzip, deflate, br',
|
||||||
'User-Agent': Conf.ua,
|
'User-Agent': Conf.ua,
|
||||||
'Referer': ref,
|
'Referer': Conf.ref_url,
|
||||||
'x-rpc-app_version': Conf.app_version,
|
'x-rpc-app_version': Conf.app_version,
|
||||||
'DS': self.get_DS(),
|
'DS': self.get_DS(),
|
||||||
'Cookie': self._cookie
|
'Cookie': self._cookie
|
||||||
@ -156,7 +155,7 @@ class Sign(object):
|
|||||||
self._uid = rolesList[i]['game_uid']
|
self._uid = rolesList[i]['game_uid']
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'act_id': 'e202009291139501',
|
'act_id': Conf.act_id,
|
||||||
'region': self._region,
|
'region': self._region,
|
||||||
'uid': self._uid
|
'uid': self._uid
|
||||||
}
|
}
|
||||||
@ -165,7 +164,7 @@ class Sign(object):
|
|||||||
i+1, str(self._uid).replace(str(self._uid)[3:6],'***',1), self._region_name))
|
i+1, str(self._uid).replace(str(self._uid)[3:6],'***',1), self._region_name))
|
||||||
try:
|
try:
|
||||||
jdict = json.loads(requests.Session().post(
|
jdict = json.loads(requests.Session().post(
|
||||||
self._url, headers = self.get_header(),
|
Conf.sign_url, headers = self.get_header(),
|
||||||
data = json.dumps(data, ensure_ascii=False)).text)
|
data = json.dumps(data, ensure_ascii=False)).text)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise
|
raise
|
||||||
@ -199,13 +198,13 @@ def notify(key, massage):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(e)
|
logging.error(e)
|
||||||
raise HTTPError
|
raise HTTPError
|
||||||
|
|
||||||
return jdict
|
return jdict
|
||||||
else:
|
else:
|
||||||
logging.info('未配置SCKEY,正在跳过推送...')
|
logging.info('未配置SCKEY,正在跳过推送...')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == '__main__':
|
||||||
secret = input().strip().split('#')
|
secret = input().strip().split('#')
|
||||||
secret.append('')
|
secret.append('')
|
||||||
cookie=secret[0]
|
cookie=secret[0]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user