Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -88,6 +88,29 @@ def get_hash(str):
|
|
| 88 |
return hashlib.md5(str.encode()).hexdigest()
|
| 89 |
|
| 90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
async def get_change_ip():
|
| 92 |
m = random.randint(0, 255)
|
| 93 |
n = random.randint(0, 255)
|
|
@@ -97,15 +120,18 @@ async def get_change_ip():
|
|
| 97 |
return randomIP
|
| 98 |
|
| 99 |
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
|
| 111 |
# 设置请求头基本信息
|
|
@@ -131,13 +157,12 @@ async def get_image_d(pid, device_id, f, change_ip):
|
|
| 131 |
}
|
| 132 |
response = requests.request("POST", url, json=payload, headers=headers)
|
| 133 |
response_data = response.json()
|
| 134 |
-
# print(f"d:{response_data['d']}")
|
| 135 |
return response_data['d']
|
| 136 |
|
| 137 |
|
| 138 |
# 安全验证-登录
|
| 139 |
async def init(client_id, device_id, User_Agent, mail, change_ip):
|
| 140 |
-
url = f"https://user.mypikpak.
|
| 141 |
payload = {
|
| 142 |
"action": "POST:/v1/auth/signin",
|
| 143 |
"captcha_token": '',
|
|
@@ -148,13 +173,19 @@ async def init(client_id, device_id, User_Agent, mail, change_ip):
|
|
| 148 |
},
|
| 149 |
}
|
| 150 |
headers = {
|
| 151 |
-
"x-client-id": "YUMx5nI8ZU8Ap8pm",
|
| 152 |
"X-Device-Id": device_id,
|
| 153 |
"User-Agent": User_Agent,
|
| 154 |
'X-Forwarded-For': str(change_ip)
|
| 155 |
}
|
| 156 |
headers.update(basicRequestHeaders_1)
|
| 157 |
response = requests.request("POST", url, json=payload, headers=headers)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 158 |
return json.loads(response.text)
|
| 159 |
|
| 160 |
|
|
@@ -482,11 +513,15 @@ async def login():
|
|
| 482 |
return jsonify({"error": "没有指定参数"}), 400
|
| 483 |
email = data.get('userName')
|
| 484 |
password = data.get('passWord')
|
|
|
|
|
|
|
|
|
|
| 485 |
try:
|
| 486 |
change_ip = await get_change_ip()
|
| 487 |
client_id1 = "YNxT9w7GMdWvEOKa"
|
| 488 |
device_id = str(uuid.uuid4()).replace("-", "")
|
| 489 |
-
|
|
|
|
| 490 |
action_init = await init(client_id1, device_id, user_agent, email, change_ip)
|
| 491 |
captcha_token = action_init["captcha_token"]
|
| 492 |
if 'url' in action_init.keys():
|
|
@@ -504,7 +539,7 @@ async def login():
|
|
| 504 |
return jsonify({"code": 200, "data": login_data, "msg": 'success'}), 200
|
| 505 |
except Exception as e:
|
| 506 |
print(e)
|
| 507 |
-
return jsonify({"code": 500, "data": {}, "msg":
|
| 508 |
|
| 509 |
|
| 510 |
config = Config()
|
|
|
|
| 88 |
return hashlib.md5(str.encode()).hexdigest()
|
| 89 |
|
| 90 |
|
| 91 |
+
Name = ["VIVO-", 'OPPO-', 'HUAWEI-', 'Honor-', 'XIAOMI', 'HONGMI-', 'APPLE-']
|
| 92 |
+
Type = ["S ", " pro ", "A "]
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
def B():
|
| 96 |
+
timestamp = str(int(time.time()) * 1000)
|
| 97 |
+
device_id = str(uuid.uuid4()).replace("-", "")
|
| 98 |
+
phoneModel = ""
|
| 99 |
+
for i in range(3):
|
| 100 |
+
r = chr(random.randint(65, 90))
|
| 101 |
+
phoneModel += r
|
| 102 |
+
phoneModel = phoneModel + "-"
|
| 103 |
+
for i in range(5):
|
| 104 |
+
if random.randint(0, 4) != 2:
|
| 105 |
+
r = chr(random.randint(65, 90))
|
| 106 |
+
else:
|
| 107 |
+
r = chr(random.randint(48, 57))
|
| 108 |
+
phoneModel += r
|
| 109 |
+
phoneBuilder = Name[random.randint(0, 6)] + str(random.randint(3, 9)) + Type[random.randint(0, 2)] + str(
|
| 110 |
+
random.randint(5, 6)) + "G"
|
| 111 |
+
return timestamp, device_id, phoneModel, phoneBuilder
|
| 112 |
+
|
| 113 |
+
|
| 114 |
async def get_change_ip():
|
| 115 |
m = random.randint(0, 255)
|
| 116 |
n = random.randint(0, 255)
|
|
|
|
| 120 |
return randomIP
|
| 121 |
|
| 122 |
|
| 123 |
+
def get_UA(id, ua_key, timestamp, phoneModel, phoneBuilder, version):
|
| 124 |
+
UA = "ANDROID-com.pikcloud.pikpak/" + version + " accessmode/ devicename/" + phoneBuilder + " appname/ android-com.pikcloud.pikpak appid/ action_type/ clientid/ YNxT9w7GMdWvEOKa deviceid/" + id + "refresh_token/ grant_type/ devicemodel/ " + phoneModel + " networktype/WIFI accesstype/ sessionid/ osversion/" + "13." + str(
|
| 125 |
+
random.randint(0, 9)) + "." + str(random.randint(0,
|
| 126 |
+
9)) + " datetime/" + timestamp + " protocolversion/200 sdkversion/2.0.1.200200 clientversion/" + version + " providername/NONE clientip/ session_origin/ devicesign/div101." + ua_key + "platformversion/10 usrno/"
|
| 127 |
+
return UA
|
| 128 |
+
|
| 129 |
+
|
| 130 |
+
def get_ua_key(id):
|
| 131 |
+
k = "com.pikcloud.pikpak1appkey"
|
| 132 |
+
rank_1 = hashlib.sha1((id + k).encode("utf-8")).hexdigest()
|
| 133 |
+
rank_2 = get_hash(rank_1)
|
| 134 |
+
return id + rank_2
|
| 135 |
|
| 136 |
|
| 137 |
# 设置请求头基本信息
|
|
|
|
| 157 |
}
|
| 158 |
response = requests.request("POST", url, json=payload, headers=headers)
|
| 159 |
response_data = response.json()
|
|
|
|
| 160 |
return response_data['d']
|
| 161 |
|
| 162 |
|
| 163 |
# 安全验证-登录
|
| 164 |
async def init(client_id, device_id, User_Agent, mail, change_ip):
|
| 165 |
+
url = f"https://user.mypikpak.com/v1/shield/captcha/init?client_id={client_id}"
|
| 166 |
payload = {
|
| 167 |
"action": "POST:/v1/auth/signin",
|
| 168 |
"captcha_token": '',
|
|
|
|
| 173 |
},
|
| 174 |
}
|
| 175 |
headers = {
|
|
|
|
| 176 |
"X-Device-Id": device_id,
|
| 177 |
"User-Agent": User_Agent,
|
| 178 |
'X-Forwarded-For': str(change_ip)
|
| 179 |
}
|
| 180 |
headers.update(basicRequestHeaders_1)
|
| 181 |
response = requests.request("POST", url, json=payload, headers=headers)
|
| 182 |
+
if response.status_code != 200:
|
| 183 |
+
error_response = response.json()
|
| 184 |
+
message = None
|
| 185 |
+
if "details" in error_response and len(error_response["details"]) > 0:
|
| 186 |
+
last_detail = error_response["details"][-1]
|
| 187 |
+
message = last_detail.get("message", "操作频繁...")
|
| 188 |
+
raise Exception(f"{message}")
|
| 189 |
return json.loads(response.text)
|
| 190 |
|
| 191 |
|
|
|
|
| 513 |
return jsonify({"error": "没有指定参数"}), 400
|
| 514 |
email = data.get('userName')
|
| 515 |
password = data.get('passWord')
|
| 516 |
+
timestamp = B()[0]
|
| 517 |
+
phoneModel = B()[2]
|
| 518 |
+
phoneBuilder = B()[3]
|
| 519 |
try:
|
| 520 |
change_ip = await get_change_ip()
|
| 521 |
client_id1 = "YNxT9w7GMdWvEOKa"
|
| 522 |
device_id = str(uuid.uuid4()).replace("-", "")
|
| 523 |
+
ua_key = get_ua_key(device_id)
|
| 524 |
+
user_agent = get_UA(device_id, ua_key, timestamp, phoneModel, phoneBuilder, "1.47.1")
|
| 525 |
action_init = await init(client_id1, device_id, user_agent, email, change_ip)
|
| 526 |
captcha_token = action_init["captcha_token"]
|
| 527 |
if 'url' in action_init.keys():
|
|
|
|
| 539 |
return jsonify({"code": 200, "data": login_data, "msg": 'success'}), 200
|
| 540 |
except Exception as e:
|
| 541 |
print(e)
|
| 542 |
+
return jsonify({"code": 500, "data": {}, "msg": str(e)}), 200
|
| 543 |
|
| 544 |
|
| 545 |
config = Config()
|