mirror of https://github.com/KingRan/KR.git
main
parent
b4eb28fcdf
commit
d107e53ab2
269
jd_wsck.py
269
jd_wsck.py
|
@ -16,6 +16,7 @@ from urllib.parse import unquote
|
|||
"""
|
||||
new Env('wskey本地转换');
|
||||
cron 57 21,9 * * *
|
||||
by:lonesomexz
|
||||
"""
|
||||
hadsend=True
|
||||
UserAgent=""
|
||||
|
@ -38,7 +39,30 @@ def randomuserAgent():
|
|||
lng='119.31991256596'+str(random.randint(100,999))
|
||||
lat='26.1187118976'+str(random.randint(100,999))
|
||||
UserAgent=f'jdapp;iPhone;10.0.4;{iosVer};{uuid};network/wifi;ADID/{ADID};model/iPhone{iPhone},1;addressid/{addressid};appBuild/167707;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS {iosV} like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/null;supportJDSHWK/1'
|
||||
|
||||
|
||||
def get_proxy_api(proxy_url, max_retries=5, timeout=60, retry_delay=1):
|
||||
for retry in range(max_retries):
|
||||
res = get(url=proxy_url)
|
||||
printf(f"本次获取到的代理:{res.text}")
|
||||
proxy_ip_port = res.text.strip()
|
||||
proxy_address = f"http://{proxy_ip_port}"
|
||||
|
||||
try:
|
||||
response = get("https://jd.com", proxies={"http": proxy_address, "https": proxy_address}, timeout=timeout)
|
||||
if response.status_code == 200:
|
||||
return proxy_address
|
||||
except Exception as e:
|
||||
print(f"代理检测失败,错误信息:{e}")
|
||||
|
||||
print("代理检测失败,重新获取...")
|
||||
time.sleep(retry_delay)
|
||||
|
||||
print("无法获取可用的代理IP,尝试次数已达上限。")
|
||||
return None
|
||||
|
||||
|
||||
|
||||
def load_send():
|
||||
global send
|
||||
global hadsend
|
||||
|
@ -179,10 +203,15 @@ def get_sign(functionId, body, client : str="android", clientVersion : str='11.2
|
|||
return convertUrl
|
||||
|
||||
def getcookie_wskey(key):
|
||||
proxys = proxy_url
|
||||
if os.environ.get("WSKEY_PROXY_URL") is not None:
|
||||
proxys = get_proxy_api(proxy_url)
|
||||
|
||||
body = "body=%7B%22to%22%3A%22https%3A//plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html%22%7D"
|
||||
pin = findall("pin=([^;]*);", key)[0]
|
||||
|
||||
for num in range(0,20):
|
||||
|
||||
|
||||
for num in range(0,5):
|
||||
sign = get_sign("genToken",{"url": "https://plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html"},"android","11.2.8")
|
||||
url = f"https://api.m.jd.com/client.action?functionId=genToken&{sign}"
|
||||
headers = {
|
||||
|
@ -192,34 +221,55 @@ def getcookie_wskey(key):
|
|||
'content-type': 'application/x-www-form-urlencoded;'
|
||||
}
|
||||
try:
|
||||
token = post(url=url, headers=headers, data=body, verify=False).json()
|
||||
token = post(url=url, headers=headers, data=body, verify=False, proxies={"http": proxys, "https": proxys}).json()
|
||||
token=token['tokenKey']
|
||||
except Exception as error:
|
||||
printf(f"【错误】{unquote(pin)}在获取token时:\n{error}")
|
||||
return pin, "False"
|
||||
print(f"【警告】{unquote(pin)}在获取token时失败,等待5秒后重试")
|
||||
time.sleep(5)
|
||||
if num == 4:
|
||||
print(f"【错误】{unquote(pin)}在获取token时:\n{error}")
|
||||
return pin, "False"
|
||||
randomuserAgent()
|
||||
if os.environ.get("WSKEY_PROXY_URL") is not None:
|
||||
proxys = get_proxy_api(proxy_url)
|
||||
continue
|
||||
|
||||
if token!="xxx":
|
||||
break
|
||||
else:
|
||||
printf(f"【警告】{unquote(pin)}在获取token时失败,等待5秒后重试")
|
||||
time.sleep(5)
|
||||
randomuserAgent()
|
||||
if os.environ.get("WSKEY_PROXY_URL") is not None:
|
||||
proxys = get_proxy_api(proxy_url)
|
||||
|
||||
if token=="xxx":
|
||||
printf(f"【错误】{unquote(pin)}在获取token时失败,跳过")
|
||||
return "Error"
|
||||
url = 'https://un.m.jd.com/cgi-bin/app/appjmp'
|
||||
params = {
|
||||
'tokenKey': token,
|
||||
'to': 'https://plogin.m.jd.com/cgi-bin/m/thirdapp_auth_page',
|
||||
'client_type': 'android',
|
||||
'appid': 879,
|
||||
'appup_type': 1,
|
||||
}
|
||||
try:
|
||||
res = get(url=url, params=params, verify=False,
|
||||
allow_redirects=False).cookies.get_dict()
|
||||
except Exception as error:
|
||||
printf(f"【错误】{unquote(pin)}在获取cookie时:\n{error}")
|
||||
return "Error"
|
||||
|
||||
for num in range(0, 5):
|
||||
url = 'https://un.m.jd.com/cgi-bin/app/appjmp'
|
||||
params = {
|
||||
'tokenKey': token,
|
||||
'to': 'https://plogin.m.jd.com/cgi-bin/m/thirdapp_auth_page',
|
||||
'client_type': 'android',
|
||||
'appid': 879,
|
||||
'appup_type': 1,
|
||||
}
|
||||
try:
|
||||
res = get(url=url, params=params, verify=False,
|
||||
allow_redirects=False, proxies={"http": proxys, "https": proxys}).cookies.get_dict()
|
||||
except Exception as error:
|
||||
print(f"【警告】{unquote(pin)}在获取cookie时失败,等待5秒后重试")
|
||||
time.sleep(5)
|
||||
if num == 4:
|
||||
# 最后一次重试时输出错误消息并返回 "Error"
|
||||
print(f"【错误】{unquote(pin)}在获取cookie时:\n{error}")
|
||||
return "Error"
|
||||
randomuserAgent()
|
||||
if os.environ.get("WSKEY_PROXY_URL") is not None:
|
||||
proxys = get_proxy_api(proxy_url)
|
||||
continue
|
||||
|
||||
try:
|
||||
if "app_open" in res['pt_key']:
|
||||
|
@ -231,6 +281,35 @@ def getcookie_wskey(key):
|
|||
printf(f"【错误】{unquote(pin)}在获取cookie时:\n{str(res)}")
|
||||
return "Error"
|
||||
|
||||
def arcadia_getwskey():
|
||||
possible_paths = ['/arcadia/config/account.json', '/jd/config/account.json']
|
||||
|
||||
for wskey_file in possible_paths:
|
||||
if os.path.isfile(wskey_file):
|
||||
with open(wskey_file, 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
json_data = []
|
||||
for item in data:
|
||||
# 跳过空的 pt_pin 或 ws_key
|
||||
if not item['pt_pin'] or not item['ws_key']:
|
||||
continue
|
||||
pt_pin = item['pt_pin']
|
||||
ws_key = item['ws_key']
|
||||
remarks = item['remarks'][0] if item['remarks'] else ''
|
||||
json_item = f"pin={pt_pin};wskey={ws_key};"
|
||||
json_data.append((json_item, remarks))
|
||||
return json_data
|
||||
return []
|
||||
|
||||
def arcadia_subcookie(cookie, token):
|
||||
url = 'http://127.0.0.1:5678/openApi/updateCookie'
|
||||
headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ', 'api-token': f'{token}'}
|
||||
data = {
|
||||
"cookie": cookie
|
||||
}
|
||||
res = post(url, data=json.dumps(data), headers=headers).json()
|
||||
return res
|
||||
|
||||
def subcookie(pt_pin, cookie, token):
|
||||
if True:
|
||||
|
@ -308,15 +387,33 @@ def getRemark(pt_pin,token):
|
|||
def main():
|
||||
printf("版本: 20230602")
|
||||
printf("说明: 如果用Wxpusher通知需配置WP_APP_TOKEN_ONE和WP_APP_MAIN_UID,其中WP_APP_MAIN_UID是你的Wxpusher UID")
|
||||
printf("隧道型代理池接口:export WSKEY_PROXY_TUNNRL='http://127.0.0.1:123456'")
|
||||
printf("拉取型代理API接口(数据格式:txt;提取数量:每次一个):export WSKEY_PROXY_URL='http://xxx.com/apiUrl'")
|
||||
printf("没有代理可以自行注册,比如携趣,巨量,每日免费1000IP,完全够用")
|
||||
printf("====================================")
|
||||
config=""
|
||||
envtype=""
|
||||
global proxy_url
|
||||
proxy_url=os.environ.get("WSKEY_PROXY_URL") or os.environ.get("WSKEY_PROXY_TUNNRL") or None
|
||||
iswxpusher=False
|
||||
counttime=0
|
||||
|
||||
if os.path.exists("/ql/config/auth.json"):
|
||||
config="/ql/config/auth.json"
|
||||
envtype="ql"
|
||||
|
||||
if os.path.exists("/ql/data/config/auth.json"):
|
||||
config="/ql/data/config/auth.json"
|
||||
envtype="ql"
|
||||
|
||||
if os.path.exists("/jd/config/auth.json"):
|
||||
config="/jd/config/auth.json"
|
||||
envtype="arcadia"
|
||||
|
||||
|
||||
if os.path.exists("/arcadia/config/auth.json"):
|
||||
config="/arcadia/config/auth.json"
|
||||
envtype="arcadia"
|
||||
|
||||
if config=="":
|
||||
printf(f"无法判断使用环境,退出脚本!")
|
||||
|
@ -332,57 +429,105 @@ def main():
|
|||
iswxpusher=True
|
||||
except:
|
||||
iswxpusher=False
|
||||
|
||||
if proxy_url is None:
|
||||
print("没有配置代理,无法使用代理!\n请配置环境变量WSKEY_PROXY_TUNNRL或WSKEY_PROXY_URL\n")
|
||||
print("====================================")
|
||||
else:
|
||||
print(f"已配置代理: {proxy_url}\n")
|
||||
|
||||
resurt=""
|
||||
resurt1=""
|
||||
resurt2=""
|
||||
summary=""
|
||||
|
||||
with open(config, "r", encoding="utf-8") as f1:
|
||||
token = json.load(f1)['token']
|
||||
url = 'http://127.0.0.1:5600/api/envs'
|
||||
headers = {'Authorization': f'Bearer {token}'}
|
||||
body = {
|
||||
'searchValue': 'JD_WSCK',
|
||||
'Authorization': f'Bearer {token}'
|
||||
}
|
||||
datas = get(url, params=body, headers=headers).json()['data']
|
||||
if len(datas)>0:
|
||||
if envtype == "ql":
|
||||
with open(config, "r", encoding="utf-8") as f1:
|
||||
token = json.load(f1)['token']
|
||||
url = 'http://127.0.0.1:5600/api/envs'
|
||||
headers = {'Authorization': f'Bearer {token}'}
|
||||
body = {
|
||||
'searchValue': 'JD_WSCK',
|
||||
'Authorization': f'Bearer {token}'
|
||||
}
|
||||
datas = get(url, params=body, headers=headers).json()['data']
|
||||
elif envtype == "arcadia":
|
||||
with open(config, "r", encoding="utf-8") as f1:
|
||||
#token = json.load(f1)['token']
|
||||
data = json.load(f1)
|
||||
token = data.get('openApiToken', '')
|
||||
url = 'http://127.0.0.1:5678/openApi/count'
|
||||
headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ', 'api-token': f'{token}'}
|
||||
datas = get(url, headers=headers).json()["data"]["accountCount"]
|
||||
|
||||
# printf(f"token:{token}")
|
||||
# printf(f"datas:{datas}")
|
||||
|
||||
|
||||
if datas > 0 if isinstance(datas, int) else len(datas) > 0:
|
||||
printf("\n===============开始转换JD_WSCK==============")
|
||||
else:
|
||||
printf("\n错误:没有需要转换的JD_WSCK,退出脚本!")
|
||||
return
|
||||
|
||||
for data in datas:
|
||||
randomuserAgent()
|
||||
if data['status']!=0:
|
||||
continue
|
||||
key = data['value']
|
||||
pin = re.findall(r'(pin=([^; ]+)(?=;?))',key)[0][1]
|
||||
cookie = getcookie_wskey(key)
|
||||
|
||||
if "app_open" in cookie:
|
||||
#printf("转换成功:"cookie)
|
||||
orgpin = cookie.split(";")[1].split("=")[1]
|
||||
subcookie(orgpin, cookie, token)
|
||||
newpin=getRemark(orgpin,token)
|
||||
resurt1=resurt1+f"转换成功:{newpin}\n"
|
||||
else:
|
||||
newpin=getRemark(pin,token)
|
||||
if "fake_" in cookie:
|
||||
message = f"pin为{newpin}的wskey过期了!"
|
||||
printf(message)
|
||||
url = 'http://127.0.0.1:5600/api/envs/disable'
|
||||
try:
|
||||
body = [data['_id']]
|
||||
except:
|
||||
body = [data['id']]
|
||||
put(url, json=body, headers=headers)
|
||||
printf(f"禁用成功:{newpin}")
|
||||
resurt2=resurt2+f"wskey已禁用:{newpin}\n"
|
||||
if envtype == "ql":
|
||||
for data in datas:
|
||||
randomuserAgent()
|
||||
if data['status']!=0:
|
||||
continue
|
||||
key = data['value']
|
||||
pin = re.findall(r'(pin=([^; ]+)(?=;?))',key)[0][1]
|
||||
cookie = getcookie_wskey(key)
|
||||
if "app_open" in cookie:
|
||||
#printf("转换成功:"cookie)
|
||||
orgpin = cookie.split(";")[1].split("=")[1]
|
||||
subcookie(orgpin, cookie, token)
|
||||
newpin=getRemark(orgpin,token)
|
||||
resurt1=resurt1+f"转换成功:{newpin}\n"
|
||||
else:
|
||||
message = f"转换失败:{newpin}"
|
||||
resurt2=resurt2+f"转换失败:{newpin}\n"
|
||||
newpin=getRemark(pin,token)
|
||||
if "fake_" in cookie:
|
||||
message = f"pin为{newpin}的wskey过期了!"
|
||||
printf(message)
|
||||
url = 'http://127.0.0.1:5600/api/envs/disable'
|
||||
try:
|
||||
body = [data['_id']]
|
||||
except:
|
||||
body = [data['id']]
|
||||
put(url, json=body, headers=headers)
|
||||
printf(f"禁用成功:{newpin}")
|
||||
resurt2=resurt2+f"wskey已禁用:{newpin}\n"
|
||||
else:
|
||||
message = f"转换失败:{newpin}"
|
||||
resurt2=resurt2+f"转换失败:{newpin}\n"
|
||||
|
||||
elif envtype == "arcadia":
|
||||
wslist = arcadia_getwskey()
|
||||
#printf(f"wslist:\n{wslist}")
|
||||
for ws,remark in wslist:
|
||||
randomuserAgent()
|
||||
pin = re.findall(r'(pin=([^; ]+)(?=;?))',ws)[0][1]
|
||||
printf(f"当前转换的pin:\n{pin}")
|
||||
cookie = getcookie_wskey(ws)
|
||||
printf(f"转换后的cookie:\n{cookie}\n")
|
||||
|
||||
if "app_open" in cookie:
|
||||
#printf("转换成功:"cookie)
|
||||
res = arcadia_subcookie(cookie, token)
|
||||
resurt1=resurt1+f"转换成功:{remark}@{pin}"
|
||||
if res["code"] == 1:
|
||||
resurt1=resurt1+f",面板同步成功! ✅\n"
|
||||
else:
|
||||
resurt1=resurt1+f",面板同步失败,token错误或者请求失败。 ❌\n"
|
||||
else:
|
||||
if "fake_" in cookie:
|
||||
message = f"{remark}@{pin},wskeyk可能过期了! ❌\n"
|
||||
printf(message)
|
||||
resurt2=resurt2+f"{remark}@{pin},wskeyk可能过期了! ❌\n"
|
||||
else:
|
||||
message = f"{remark}@{pin},转换失败! ❌"
|
||||
printf(message)
|
||||
resurt2=resurt2+f"{remark}@{pin},转换失败! ❌\n"
|
||||
|
||||
|
||||
if resurt2!="":
|
||||
|
@ -405,6 +550,14 @@ def main():
|
|||
if resurt1!="":
|
||||
resurt=resurt+"👇👇👇👇👇转换成功👇👇👇👇👇\n"+resurt1
|
||||
|
||||
if iswxpusher:
|
||||
send_notification("JD_WSCK转换结果",resurt,summary)
|
||||
else:
|
||||
if hadsend:
|
||||
send("JD_WSCK转换结果",resurt)
|
||||
else:
|
||||
printf("没有启用通知!")
|
||||
|
||||
printf("\n\n===============转换结果==============\n")
|
||||
printf(resurt)
|
||||
|
||||
|
|
Loading…
Reference in New Issue