mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-23 02:48:44 +08:00
update
This commit is contained in:
parent
fcb29bc2fc
commit
f525ffae60
23
jd_dpqd.js
23
jd_dpqd.js
@ -3,14 +3,14 @@
|
||||
============Quantumultx===============
|
||||
[task_local]
|
||||
#店铺签到
|
||||
15 2,14 * * * https://raw.githubusercontent.com/shufflewzc/faker2/main/jd_shop_sign.js, tag=店铺签到, enabled=true
|
||||
15 2,14 * * * https://raw.githubusercontent.com/KingRan/KR/main/jd_shop_sign.js, tag=店铺签到, enabled=true
|
||||
===========Loon============
|
||||
[Script]
|
||||
cron "15 2,14 * * *" script-path=https://raw.githubusercontent.com/shufflewzc/faker2/main/jd_shop_sign.js,tag=店铺签到
|
||||
cron "15 2,14 * * *" script-path=https://raw.githubusercontent.com/KingRan/KR/main/jd_shop_sign.js,tag=店铺签到
|
||||
============Surge=============
|
||||
店铺签到 = type=cron,cronexp="15 2,14 * * *",wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/shufflewzc/faker2/main/jd_shop_sign.js
|
||||
店铺签到 = type=cron,cronexp="15 2,14 * * *",wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/KingRan/KR/main/jd_shop_sign.js
|
||||
===========小火箭========
|
||||
店铺签到 = type=cron,script-path=https://raw.githubusercontent.com/shufflewzc/faker2/main/jd_shop_sign.jss, cronexpr="15 2,14 * * *", timeout=3600, enable=true
|
||||
店铺签到 = type=cron,script-path=https://raw.githubusercontent.com/KingRan/KR/main/jd_shop_sign.jss, cronexpr="15 2,14 * * *", timeout=3600, enable=true
|
||||
*/
|
||||
const $ = new Env('店铺签到');
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
@ -27,29 +27,28 @@ let shopname=''
|
||||
const token = [
|
||||
"4BE1B58FE1360409A5967CAD1127B5A8",
|
||||
"34864F266AFC02DDB7EEAD5A2AF9B4F7",
|
||||
"87DC11A01AE814025159ECE32F5EECBF",
|
||||
"7166EF6ED03BA34C3DBBA1ADB27E56C1",
|
||||
"3BA9AEE39889419A46E8784C982C7280",
|
||||
"09947018BD0B4AC7E218519F81551296",
|
||||
"18FB7E1DE514D5E40D880585D4145DEC",
|
||||
"DB00412CD5F5853526FB3A3B1662A7F3",
|
||||
"7156E72ACEA65FB5FFCB256A024A2657",
|
||||
"CACEC89AD3A20309748FEC03B0B0C50C",
|
||||
"D881655EDC90A9B4387ACFE495CA3F18",
|
||||
"35F3ED7E5BDFCE58F95E01695927EC24",
|
||||
"6359776E10B514A773610D94579BFA3B",
|
||||
"D40F4D162DD53F2CE9F1C48176461634",
|
||||
"3AF4B68A4BB3BD09D371B766E6A1B721",
|
||||
"273EC9E9CA27DFDD85478972A1A0ED6F",
|
||||
"A5BD60451DC9BCB10EB6009C18679D70",
|
||||
"A7DDDEAE3438B27260BDC8B1A555CE6F",
|
||||
"3B27B2B9E70249C339D66F27B7E133F0",
|
||||
"99B695DFEF69DD31BB78B58D61B9C6A2",
|
||||
"BE26A80288BECA1CAB80B5643CE716B4",
|
||||
"6CB820BAC6C0CD8D1F90C342F0EA1018",
|
||||
"ADF510FDA71E07151B8F8AD4964A5D90",
|
||||
"37F05E334A3F6D36E54E13892CE379A9",
|
||||
"A5BD60451DC9BCB10EB6009C18679D70",
|
||||
"71DC699CFECAD1BBA618F412D8B54943",
|
||||
"35BA76ED53A953E03F77EE5379C28BE5",
|
||||
"038B83D1D0D374F58821C7EDC4F3B5AE",
|
||||
"0EED5C32E8002D6EF892D3995A0A9AA5",
|
||||
"D5A12069E47F17718EF7E7381444A5FE",
|
||||
"CFE4E21426A3E633238CBA33DEBE693E",
|
||||
"80BD65344753D10B8C61EA2EF4B61946",
|
||||
"501933E61B74CEE450856EDD10AAF7CB",
|
||||
"9F64084BD36FE0EBCDE1EDC956656501",
|
||||
"7516691B34E89137D3C911BBF7D86ACD"
|
||||
|
143
jd_wskey.py
143
jd_wskey.py
@ -9,9 +9,14 @@ import os # 用于导入系统变量
|
||||
import sys # 实现 sys.exit
|
||||
import logging # 用于日志输出
|
||||
import time # 时间
|
||||
import re # 正则过率
|
||||
import re # 正则过滤
|
||||
import hmac
|
||||
import struct
|
||||
|
||||
if "WSKEY_DEBUG" in os.environ: # 判断调试模式变量
|
||||
WSKEY_MODE = 0
|
||||
# 0 = Default / 1 = Debug!
|
||||
|
||||
if "WSKEY_DEBUG" in os.environ or WSKEY_MODE: # 判断调试模式变量
|
||||
logging.basicConfig(level=logging.DEBUG, format='%(message)s') # 设置日志为 Debug等级输出
|
||||
logger = logging.getLogger(__name__) # 主模块
|
||||
logger.debug("\nDEBUG模式开启!\n") # 消息输出
|
||||
@ -27,15 +32,63 @@ except Exception as e: # 异常捕捉
|
||||
os.environ['no_proxy'] = '*' # 禁用代理
|
||||
requests.packages.urllib3.disable_warnings() # 抑制错误
|
||||
try: # 异常捕捉
|
||||
from sendNotify import send # 导入青龙消息通知模块
|
||||
from notify import send # 导入青龙消息通知模块
|
||||
except Exception as err: # 异常捕捉
|
||||
logger.debug(str(err)) # 调试日志输出
|
||||
logger.info("无推送文件") # 标准日志输出
|
||||
|
||||
ver = 20505 # 版本号
|
||||
ver = 20524 # 版本号
|
||||
|
||||
|
||||
# def ql_2fa():
|
||||
# ''' Demo
|
||||
# if "WSKEY_TOKEN" in os.environ:
|
||||
# url = 'http://127.0.0.1:{0}/api/user'.format(port) # 设置 URL地址
|
||||
# try: # 异常捕捉
|
||||
# res = s.get(url) # HTTP请求 [GET] 使用 session
|
||||
# except Exception as err: # 异常捕捉
|
||||
# logger.debug(str(err)) # 调试日志输出
|
||||
# else: # 判断分支
|
||||
# if res.status_code == 200 and res.json()["code"] == 200:
|
||||
# twoFactorActivated = str(res.json()["data"]["twoFactorActivated"])
|
||||
# if twoFactorActivated == 'true':
|
||||
# logger.info("青龙 2FA 已开启!")
|
||||
# url = 'http://127.0.0.1:{0}/api/envs?searchValue=WSKEY_Client'.format(port) # 设置 URL地址
|
||||
# res = s.get(url)
|
||||
# if res.status_code == 200 and res.json()["code"] == 200:
|
||||
# data = res.json()["data"]
|
||||
# if len(data) == 0:
|
||||
# url = 'http://127.0.0.1:{0}/api/apps'
|
||||
# data = json.dumps({
|
||||
# "name": "wskey",
|
||||
# "scopes": ["crons", "envs", "configs", "scripts", "logs", "dependencies", "system"]
|
||||
# })
|
||||
# res = s.post(url, data=data)
|
||||
# if res.status_code == 200 and res.json()["code"] == 200:
|
||||
# logger.info("OpenApi创建成功")
|
||||
# client_id = res.json()["data"]["client_id"]
|
||||
# client_secret = res.json()["data"]["client_secret"]
|
||||
# wskey_value = 'client_id={0}&client_secret={1}'.format(client_id, client_secret)
|
||||
# data = [{"value": wskey_value, "name": "WSKEY_Client", "remarks": "WSKEY_OpenApi请勿删除"}]
|
||||
# data = json.dumps(data) # Json格式化数据
|
||||
# url = 'http://127.0.0.1:{0}/api/envs'.format(port) # 设置 URL地址
|
||||
# s.post(url=url, data=data) # HTTP[POST]请求 使用session
|
||||
# logger.info("\nWSKEY_Client变量添加完成\n--------------------\n") # 标准日志输出
|
||||
# '''
|
||||
|
||||
def ttotp(key):
|
||||
key = base64.b32decode(key.upper() + '=' * ((8 - len(key)) % 8))
|
||||
counter = struct.pack('>Q', int(time.time() / 30))
|
||||
mac = hmac.new(key, counter, 'sha1').digest()
|
||||
offset = mac[-1] & 0x0f
|
||||
binary = struct.unpack('>L', mac[offset:offset + 4])[0] & 0x7fffffff
|
||||
return str(binary)[-6:].zfill(6)
|
||||
|
||||
|
||||
def ql_send(text):
|
||||
if "WSKEY_SEND" in os.environ and os.environ["WSKEY_SEND"] == 'disable':
|
||||
return True
|
||||
else:
|
||||
try: # 异常捕捉
|
||||
send('WSKEY转换', text) # 消息发送
|
||||
except Exception as err: # 异常捕捉
|
||||
@ -44,9 +97,48 @@ def ql_send(text):
|
||||
|
||||
|
||||
# 登录青龙 返回值 token
|
||||
def get_qltoken(username, password): # 方法 用于获取青龙 Token
|
||||
def get_qltoken(username, password, twoFactorSecret): # 方法 用于获取青龙 Token
|
||||
logger.info("Token失效, 新登陆\n") # 日志输出
|
||||
url = "http://127.0.0.1:{0}/api/user/login".format(port) # 设置青龙地址 使用 format格式化自定义端口
|
||||
if twoFactorSecret:
|
||||
try:
|
||||
twoCode = ttotp(twoFactorSecret)
|
||||
except Exception as err:
|
||||
logger.debug(str(err)) # Debug日志输出
|
||||
logger.info("TOTP异常")
|
||||
sys.exit(1)
|
||||
url = ql_url + "api/user/login" # 设置青龙地址 使用 format格式化自定义端口
|
||||
payload = json.dumps({
|
||||
'username': username,
|
||||
'password': password
|
||||
}) # HTTP请求载荷
|
||||
headers = {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
} # HTTP请求头 设置为 Json格式
|
||||
try: # 异常捕捉
|
||||
res = requests.post(url=url, headers=headers, data=payload) # 使用 requests模块进行 HTTP POST请求
|
||||
if res.status_code == 200 and res.json()["code"] == 420:
|
||||
url = ql_url + 'api/user/two-factor/login'
|
||||
data = json.dumps({
|
||||
"username": username,
|
||||
"password": password,
|
||||
"code": twoCode
|
||||
})
|
||||
res = requests.put(url=url, headers=headers, data=data)
|
||||
if res.status_code == 200 and res.json()["code"] == 200:
|
||||
token = res.json()["data"]['token'] # 从 res.text 返回值中 取出 Token值
|
||||
return token
|
||||
else:
|
||||
logger.info("两步校验失败\n") # 日志输出
|
||||
sys.exit(1)
|
||||
elif res.status_code == 200 and res.json()["code"] == 200:
|
||||
token = res.json()["data"]['token'] # 从 res.text 返回值中 取出 Token值
|
||||
return token
|
||||
except Exception as err:
|
||||
logger.debug(str(err)) # Debug日志输出
|
||||
sys.exit(1)
|
||||
else:
|
||||
url = ql_url + 'api/user/login'
|
||||
payload = {
|
||||
'username': username,
|
||||
'password': password
|
||||
@ -62,13 +154,12 @@ def get_qltoken(username, password): # 方法 用于获取青龙 Token
|
||||
token = res.json()["data"]['token'] # 从 res.text 返回值中 取出 Token值
|
||||
return token
|
||||
else:
|
||||
logger.info("暂未兼容两步验证")
|
||||
ql_send("青龙登录失败, 请检查是否开启两步验证 脚本暂未兼容两步验证")
|
||||
ql_send("青龙登录失败!")
|
||||
sys.exit(1) # 脚本退出
|
||||
except Exception as err:
|
||||
logger.debug(str(err)) # Debug日志输出
|
||||
logger.info("使用旧版青龙登录接口")
|
||||
url = "http://127.0.0.1:{0}/api/login".format(port) # 设置青龙地址 使用 format格式化自定义端口
|
||||
url = ql_url + 'api/login' # 设置青龙地址 使用 format格式化自定义端口
|
||||
payload = {
|
||||
'username': username,
|
||||
'password': password
|
||||
@ -105,10 +196,15 @@ def ql_login(): # 方法 青龙登录(获取Token 功能同上)
|
||||
username = auth["username"] # 提取 username
|
||||
password = auth["password"] # 提取 password
|
||||
token = auth["token"] # 提取 authkey
|
||||
try:
|
||||
twoFactorSecret = auth["twoFactorSecret"]
|
||||
except Exception as err:
|
||||
logger.debug(str(err)) # Debug日志输出
|
||||
twoFactorSecret = ''
|
||||
if token == '': # 判断 Token是否为空
|
||||
return get_qltoken(username, password) # 调用方法 get_qltoken 传递 username & password
|
||||
return get_qltoken(username, password, twoFactorSecret) # 调用方法 get_qltoken 传递 username & password
|
||||
else: # 判断分支
|
||||
url = "http://127.0.0.1:{0}/api/user".format(port) # 设置URL请求地址 使用 Format格式化端口
|
||||
url = ql_url + 'api/user' # 设置URL请求地址 使用 Format格式化端口
|
||||
headers = {
|
||||
'Authorization': 'Bearer {0}'.format(token),
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'
|
||||
@ -117,7 +213,7 @@ def ql_login(): # 方法 青龙登录(获取Token 功能同上)
|
||||
if res.status_code == 200: # 判断 HTTP返回状态码
|
||||
return token # 有效 返回 token
|
||||
else: # 判断分支
|
||||
return get_qltoken(username, password) # 调用方法 get_qltoken 传递 username & password
|
||||
return get_qltoken(username, password, twoFactorSecret) # 调用方法 get_qltoken 传递 username & password
|
||||
else: # 判断分支
|
||||
logger.info("没有发现auth文件, 你这是青龙吗???") # 输出标准日志
|
||||
sys.exit(0) # 脚本退出
|
||||
@ -209,7 +305,7 @@ def check_ck(ck): # 方法 检查 Cookie有效性 使用变量传递 单次调
|
||||
# 返回值 bool jd_ck
|
||||
def getToken(wskey): # 方法 获取 Wskey转换使用的 Token 由 JD_API 返回 这里传递 wskey
|
||||
try: # 异常捕捉
|
||||
url = str(base64.b64decode(url_t).decode()) + 'genToken' # 设置云端服务器地址 路由为 genToken
|
||||
url = str(base64.b64decode(url_t).decode()) + 'api/genToken' # 设置云端服务器地址 路由为 genToken
|
||||
header = {"User-Agent": ua} # 设置 HTTP头
|
||||
params = requests.get(url=url, headers=header, verify=False, timeout=20).json() # 设置 HTTP请求参数 超时 20秒 Json解析
|
||||
except Exception as err: # 异常捕捉
|
||||
@ -327,7 +423,7 @@ def serch_ck(pin): # 方法 搜索 Pin
|
||||
|
||||
|
||||
def get_env(): # 方法 读取变量
|
||||
url = 'http://127.0.0.1:{0}/api/envs'.format(port) # 设置 URL地址
|
||||
url = ql_url + 'api/envs'
|
||||
try: # 异常捕捉
|
||||
res = s.get(url) # HTTP请求 [GET] 使用 session
|
||||
except Exception as err: # 异常捕捉
|
||||
@ -340,7 +436,7 @@ def get_env(): # 方法 读取变量
|
||||
|
||||
|
||||
def check_id(): # 方法 兼容青龙老版本与新版本 id & _id的问题
|
||||
url = 'http://127.0.0.1:{0}/api/envs'.format(port) # 设置 URL地址
|
||||
url = ql_url + 'api/envs'
|
||||
try: # 异常捕捉
|
||||
res = s.get(url).json() # HTTP[GET] 请求 使用 session
|
||||
except Exception as err: # 异常捕捉
|
||||
@ -357,7 +453,7 @@ def check_id(): # 方法 兼容青龙老版本与新版本 id & _id的问题
|
||||
|
||||
|
||||
def ql_update(e_id, n_ck): # 方法 青龙更新变量 传递 id cookie
|
||||
url = 'http://127.0.0.1:{0}/api/envs'.format(port) # 设置 URL地址
|
||||
url = ql_url + 'api/envs'
|
||||
data = {
|
||||
"name": "JD_COOKIE",
|
||||
"value": n_ck,
|
||||
@ -369,7 +465,7 @@ def ql_update(e_id, n_ck): # 方法 青龙更新变量 传递 id cookie
|
||||
|
||||
|
||||
def ql_enable(e_id): # 方法 青龙变量启用 传递值 eid
|
||||
url = 'http://127.0.0.1:{0}/api/envs/enable'.format(port) # 设置 URL地址
|
||||
url = ql_url + 'api/envs/enable'
|
||||
data = '["{0}"]'.format(e_id) # 格式化 POST 载荷
|
||||
res = json.loads(s.put(url=url, data=data).text) # json模块读取 HTTP[PUT] 的返回值
|
||||
if res['code'] == 200: # 判断返回值为 200
|
||||
@ -381,7 +477,7 @@ def ql_enable(e_id): # 方法 青龙变量启用 传递值 eid
|
||||
|
||||
|
||||
def ql_disable(e_id): # 方法 青龙变量禁用 传递 eid
|
||||
url = 'http://127.0.0.1:{0}/api/envs/disable'.format(port) # 设置 URL地址
|
||||
url = ql_url + 'api/envs/disable'
|
||||
data = '["{0}"]'.format(e_id) # 格式化 POST 载荷
|
||||
res = json.loads(s.put(url=url, data=data).text) # json模块读取 HTTP[PUT] 的返回值
|
||||
if res['code'] == 200: # 判断返回值为 200
|
||||
@ -395,13 +491,13 @@ def ql_disable(e_id): # 方法 青龙变量禁用 传递 eid
|
||||
def ql_insert(i_ck): # 方法 插入新变量
|
||||
data = [{"value": i_ck, "name": "JD_COOKIE"}] # POST数据载荷组合
|
||||
data = json.dumps(data) # Json格式化数据
|
||||
url = 'http://127.0.0.1:{0}/api/envs'.format(port) # 设置 URL地址
|
||||
url = ql_url + 'api/envs'
|
||||
s.post(url=url, data=data) # HTTP[POST]请求 使用session
|
||||
logger.info("\n账号添加完成\n--------------------\n") # 标准日志输出
|
||||
|
||||
|
||||
def cloud_info(): # 方法 云端信息
|
||||
url = str(base64.b64decode(url_t).decode()) + 'check_api' # 设置 URL地址 路由 [check_api]
|
||||
url = str(base64.b64decode(url_t).decode()) + 'api/check_api' # 设置 URL地址 路由 [check_api]
|
||||
for i in range(3): # For循环 3次
|
||||
try: # 异常捕捉
|
||||
headers = {"authorization": "Bearer Shizuku"} # 设置 HTTP头
|
||||
@ -430,8 +526,8 @@ def cloud_info(): # 方法 云端信息
|
||||
|
||||
|
||||
def check_cloud(): # 方法 云端地址检查
|
||||
url_list = ['aHR0cDovLzQzLjEzNS45MC4yMy8=', 'aHR0cHM6Ly9zaGl6dWt1Lm1sLw==',
|
||||
'aHR0cHM6Ly9jZi5zaGl6dWt1Lm1sLw=='] # URL list Encode
|
||||
url_list = ['aHR0cDovL2FwaS5tb21vZS5tbC8=', 'aHR0cHM6Ly9hcGkubW9tb2UubWwv',
|
||||
'aHR0cHM6Ly9hcGkuaWxpeWEuY2Yv'] # URL list Encode
|
||||
for i in url_list: # for循环 url_list
|
||||
url = str(base64.b64decode(i).decode()) # 设置 url地址 [str]
|
||||
try: # 异常捕捉
|
||||
@ -440,7 +536,7 @@ def check_cloud(): # 方法 云端地址检查
|
||||
logger.debug(str(err)) # 调试日志输出
|
||||
continue # 循环继续
|
||||
else: # 分支判断
|
||||
info = ['Default', 'HTTPS', 'CloudFlare'] # 输出信息[List]
|
||||
info = ['HTTP', 'HTTPS', 'CloudFlare'] # 输出信息[List]
|
||||
logger.info(str(info[url_list.index(i)]) + " Server Check OK\n--------------------\n") # 标准日志输出
|
||||
return i # 返回 ->i
|
||||
logger.info("\n云端地址全部失效, 请检查网络!") # 标准日志输出
|
||||
@ -471,6 +567,7 @@ def check_port(): # 方法 检查变量传递端口
|
||||
|
||||
if __name__ == '__main__': # Python主函数执行入口
|
||||
port = check_port() # 调用方法 [check_port] 并赋值 [port]
|
||||
ql_url = 'http://127.0.0.1:{0}/'.format(port)
|
||||
token = ql_login() # 调用方法 [ql_login] 并赋值 [token]
|
||||
s = requests.session() # 设置 request session方法
|
||||
s.headers.update({"authorization": "Bearer " + str(token)}) # 增加 HTTP头认证
|
||||
|
Loading…
Reference in New Issue
Block a user