Initial Qinglong script classification corpus

This commit is contained in:
Hermes Agent
2026-05-23 18:48:48 +00:00
commit 5b4854515c
32 changed files with 15496 additions and 0 deletions

View File

@@ -0,0 +1,297 @@
# Source: https://github.com/lksky8/sign-ql/blob/main/jksign.py
# Raw: https://raw.githubusercontent.com/lksky8/sign-ql/main/jksign.py
# Repo: lksky8/sign-ql
# Path: jksign.py
# UploadedAt: 2025-12-07T17:42:50Z
# SHA256: b722f903ef41b1cab2540fc2a7b84bb51cb2e8d354783a225e3c364b0799a4e6
# Category: web版/账密
# Evidence: web/H5关键词 + username/password/login
"""
方舟健客app签到
作者https://github.com/lksky8/sign-ql
日期2025-12-5
使用方法APP抓登录包获取refresh_token填入jktoken
支持多用户运行,多用户用&或者@隔开
则变量为
export jktoken="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9........&eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9........"
每日签到一次即可
cron: 0 5 * * *
const $ = new Env("方舟健客签到");
"""
import time
import requests
import re
import os
import datetime
import hashlib
#推送开关开启为True关闭为False
push_message = True
def md5_encrypt(text):
md5_hash = hashlib.md5()
md5_hash.update(text.encode('utf-8'))
md5_result = md5_hash.hexdigest()
return md5_result
def time13():
now = datetime.datetime.now()
timestamp_ms = int(now.timestamp() * 1000) + (now.microsecond // 1000)
return timestamp_ms
def get_jkx():
a = time13() - 1500000000000
j = a % 999983
j2 = a % 9973
h = "6470"
md5_1 = md5_encrypt(f"39CC231D-C1F9-48DC-93DA-4CA0EA53C141{j}{h}")
md5_2 = md5_encrypt(f"{md5_1}{j2}{h}")
return f'{j}#{md5_2}#{j2}#{h}'
api_headers = {
'Host': 'acgi.jianke.com',
'Accept': 'application/json, text/plain, */*',
'Sec-Fetch-Site': 'same-site',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'platform': 'APP',
'Sec-Fetch-Mode': 'cors',
'Origin': 'https://app-hybrid.jianke.com',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 jiankeMall/6.47.0 JiankeMall/6.47.0',
'Referer': 'https://app-hybrid.jianke.com/',
'Content-Type': 'application/json;charset=utf-8',
'Sec-Fetch-Dest': 'empty',
}
api_headers2 = {
'Host': 'fe-acgi.jianke.com',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 jiankeMall/6.47.0',
'versionName': '6.47.0',
'X-JK-UDID': '39CC231D-C1F9-48DC-93DA-4CA0EA53C141',
'versionCode': '6470',
'X-JK-X': get_jkx(),
'platform': 'APP',
'Accept-Language': 'zh-Hans-CN;q=1',
'Accept': 'application/json',
'Content-Type': 'application/json',
}
send_msg = ''
one_msg = ''
def Log(cont=''):
global send_msg, one_msg
if cont:
one_msg += f'{cont}\n'
send_msg += f'{cont}\n'
def send_notification_message(title):
try:
from notify import send
print("加载通知服务成功!")
send(title, send_msg)
except Exception as e:
if e:
print('发送通知消息失败!')
def refresh_token(token):
headers = {'Content-Type': 'application/json; charset=utf-8','User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.135 Mobile Safari/537.36 jiankeMall/6.26.0(w1080*h2029)','Host': 'acgi.jianke.com','organizationCode': 'app.jianke'}
data = {'refreshToken': token }
response = requests.post('https://acgi.jianke.com/passport/account/refreshToken', json=data, headers=headers)
if '授权失败' in response.text:
print('账号刷新token已失效请重新获取')
Log('账号刷新token已失效请重新获取')
return False
else:
response_json = response.json()
if response_json['token_type'] == 'bearer':
print("账号token刷新成功新的access_token已填入:\n" + response_json['access_token'])
return response_json['access_token']
else:
print("Failed to send POST request. Status Code:", response.status_code)
print("出错了:", response.text)
def do_sign(new_token,user_name):
# headers = api_headers2.copy()
# headers['Authorization'] = f'bearer {new_token}'
headers = {'Authorization':'bearer ' + new_token,'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.135 Mobile Safari/537.36 jiankeMall/6.26.0(w1080*h2029)','X-JK-X': get_jkx(),'versionName': '6.47.0','X-JK-UDID': '39CC231D-C1F9-48DC-93DA-4CA0EA53C141'}
dl = requests.put('https://acgi.jianke.com/v2/member/signConfig/sign', headers=headers)
dl_json = dl.json()
if dl.status_code == 200:
print(f"[{user_name}] 本次签到获得:{dl_json['coinNum']}金币,今天是本周第{dl_json['cumulativeNum']}天签到")
Log(f"\n{user_name}] 本次签到获得:{dl_json['coinNum']}金币,今天是本周第{dl_json['cumulativeNum']}天签到")
elif dl_json['message'] == '今日已签到':
print(f'[{user_name}] 今天已经签到了')
Log(f'\n[{user_name}] 今天已经签到了')
else:
print("出错了:", dl.text)
def today_question(new_token,task_id,user_name):
headers = api_headers.copy()
headers['Authorization'] = f'bearer {new_token}'
response = requests.get('https://acgi.jianke.com/support/coin/task/daily-tasks/today-question', headers=headers)
response_json = response.json()
if response_json['code'] == '0' and response_json['message'] == 'success':
print(f'[{user_name}]【每日一答】 任务获取成功')
question_id = response_json['data']['id']
rightChoice = response_json['data']['rightChoice']
json_data = {
'id': str(task_id),
'questionItem': {
'id': question_id,
'rightChoice': rightChoice,
'userChoice': rightChoice,
'roundNum': 1,
},
}
response = requests.post('https://acgi.jianke.com/support/coin/task/complete', headers=headers, json=json_data)
response_json = response.json()
if response_json['code'] == '0' and response_json['message'] == 'success':
print(f'[{user_name}]【每日一答】 任务完成')
Log(f'[{user_name}]【每日一答】 任务完成')
else:
print(f'[{user_name}]【每日一答】 {response_json["message"]}')
Log(f'[{user_name}]【每日一答】 {response_json["message"]}')
else:
print(f'[{user_name}]【每日一答】 任务获取失败')
Log(f'[{user_name}]【每日一答】 任务获取失败')
print(response.text)
def get_today_tasks(new_token, user_name):
headers = api_headers.copy()
headers['Authorization'] = f'bearer {new_token}'
response = requests.get('https://acgi.jianke.com/support/coin/task/daily-tasks', headers=headers)
if response.status_code == 200:
response_json = response.json()
task_list = []
for item in response_json['data']:
task_id = item['id']
task_name = item['taskName']
task_list.append({'task_id': task_id, 'task_name': task_name})
return task_list
else:
print(f'{user_name} 获取任务数据失败')
print(response.text)
return None
def do_task(new_token,user_name, task_id, task_name):
headers = api_headers.copy()
headers['Authorization'] = f'bearer {new_token}'
json_data = {
'id': str(task_id)
}
response = requests.post('https://acgi.jianke.com/support/coin/task/complete', headers=headers, json=json_data)
response_json = response.json()
if response_json['code'] == '0' and response_json['message'] == 'success':
print(f'[{user_name}]【{task_name}】 任务完成')
Log(f'[{user_name}]【{task_name}】 任务完成')
else:
print(f'[{user_name}]【{task_name}{response_json["message"]}')
Log(f'[{user_name}]【{task_name}{response_json["message"]}')
def task_receive(new_token, user_name, task_id,task_name):
headers = api_headers.copy()
headers['Authorization'] = f'bearer {new_token}'
json_data = {
'id': task_id,
}
response = requests.post('https://acgi.jianke.com/support/coin/task/receive', headers=headers, json=json_data)
response_json = response.json()
if response_json['code'] == '0' and response_json['message'] == 'success':
print(f'[{user_name}]【{task_name}】 任务奖励:领取成功')
elif response_json['message'] == '奖励领取失败':
print(f'[{user_name}]【{task_name}】 任务奖励:领取失败')
Log(f'[{user_name}]【{task_name}】 任务奖励:领取失败')
else:
print('奖励领取失败')
print(response.text)
def get_coin(new_token, user_name):
headers = api_headers.copy()
headers['Authorization'] = f'bearer {new_token}'
response = requests.get('https://acgi.jianke.com/v1/coin/balance', headers=headers)
if response.status_code == 200:
response_json = response.json()
print(f'[{user_name}] 当前健康币:{response_json["balance"]}')
Log(f'[{user_name}] 当前健康币:{response_json["balance"]}')
else:
print('获取金币数失败')
print(response.text)
def get_userinfo(new_token):
headers = api_headers2.copy()
headers['Authorization'] = f'bearer {new_token}'
response = requests.get('https://fe-acgi.jianke.com/v5/userCenter', headers=headers)
response_json = response.json()
if response_json['statusCode'] == 200:
return response_json['data']['memberInfo']['nickName']
else:
print('获取用户信息失败')
print(response.text)
return None
if __name__ == '__main__':
if 'jktoken' in os.environ:
jktoken = re.split("@|&", os.environ.get("jktoken"))
print(f'查找到{len(jktoken)}个账号')
else:
jktoken = []
print('未填写 jktoken 变量')
if jktoken:
try:
z = 1
for ck in jktoken:
print(f'登录第{z}个账号')
print('----------------------\n')
access_token = refresh_token(ck)
if access_token:
user_nickname = get_userinfo(access_token)
print(f'[{user_nickname}] 刷新token成功')
print('\n开始签到操作>>>>>>>>>>\n')
do_sign(access_token, user_nickname)
print('\n开始执行任务>>>>>>>>>>\n')
task_data = get_today_tasks(access_token, user_nickname)
if task_data:
for task in task_data:
task_id = task['task_id']
task_name = task['task_name']
# print(f'[{user_nickname}] 开始执行任务:{task_name}')
if task_name == '每日一答':
today_question(access_token, task_id, user_nickname)
time.sleep(1)
task_receive(access_token, user_nickname, task_id, task_name)
time.sleep(2)
continue
if task_name == '下单返币':
continue
if task_name == '打开健客医生App':
continue
do_task(access_token, user_nickname, task_id, task_name)
time.sleep(1)
task_receive(access_token, user_nickname, task_id, task_name)
time.sleep(3)
get_coin(access_token, user_nickname)
print('\n----------------------')
z = z + 1
except Exception as e:
print('未知错误:' + str(e))
if push_message:
try:
send_notification_message(title='方舟健客') # 发送通知
except Exception as e:
print('推送失败:' + str(e))