2025年9月13日星期六

方舟健客任务脚本

1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/DT4XYh若失效,可用地址

1.购买服务器

阿里云:

服务器购买地址

https://t.aliyun.com/U/DT4XYh

若失效,可用地址

https://www.aliyun.com/activity/wuying/dj?source=5176.29345612&userCode=49hts92d

腾讯云:

https://curl.qcloud.com/wJpWmSfU

若失效,可用地址

https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console

华为云

https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905

2.部署教程

2024年最新青龙面板跑脚本教程(一)持续更新中

3.代码如下

"""方舟健客签到cron: 0 5 * * *const $ = new Env("方舟健客签到");"""import requestsimport reimport osimport datetimeimport hashlibimport json

if 'jktoken' in os.environ:    jktoken = re.split("@|&",os.environ.get("jktoken"))    print(f'查找到{len(jktoken)}个账号')else:    jktoken =['']    print('无jktoken变量')

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 b():    a = time13() - 1500000000000    j = a % 999983    j2 = a % 9973    h = "6260"    return str(j) + "#" + md5_encrypt(        md5_encrypt("19874ee7-ea2c-4043-a24a-16a14816399c" + str(j) + "6260") + str(j2) + "6260") + "#" + str(        j2) + "#" + "6260"

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 JK_sign(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': b(),'versionName''6.26.0','X-JK-UDID''19874ee7-ea2c-4043-a24a-16a14816399c'}    dl = requests.put(url='https://acgi.jianke.com/v2/member/signConfig/sign',headers=headers)    dl_json = dl.json()    if dl.status_code == 200:        print(f"本次签到获得:{dl_json['coinNum']}金币,今天是本周第{dl_json['cumulativeNum']}天签到")        Log(f"\n本次签到获得:{dl_json['coinNum']}金币,今天是本周第{dl_json['cumulativeNum']}天签到")    elif dl_json['message'] == '今日已签到':        print('今天已经签到了')        Log('\n今天已经签到了')    else:        print("出错了:", dl.text)


def main():    z = 1    for ck in jktoken:        try:            print(f'登录第{z}个账号')            print('----------------------\n')            access_token = refresh_token(ck)            if access_token:                print('刷新token成功')                print('\n开始签到操作>>>>>>>>>>\n')                JK_sign(access_token)                print('\n----------------------')            z = z + 1        except Exception as e:            print('未知错误:' + str(e))
if __name__ == '__main__':    try:        main()    except Exception as e:        print('未知错误:' + str(e))    try:        send_notification_message(title='方舟健客')  # 发送通知    except Exception as e:        print('推送失败:' + str(e))

解析

该脚本为方舟健客自动签到脚本,主要作用包括:

  • 读取环境变量 jktoken(抓包得到的 refresh_token),支持多账号(用 & 或 @ 分隔)。

  • 逐账号执行两步:

    1. 刷新 tokenPOST /passport/account/refreshToken,得到 access_token(bearer)。

    2. 签到PUT /v2/member/signConfig/sign 携带 Authorization: bearer ... 和自算头 X-JK-X(由 b() 生成),打印"获得金币、本周第几天"。

  • 结束后用青龙的 notify.py 发一条汇总通知(标题"方舟健客")。

怎么用

  1. 在青龙或你的环境里设置变量(多账号用 & 或 @):

    export jktoken="refresh_token_A&refresh_token_B"
  2. cron(脚本注释里给的):

    0 5 * * *
  3. 运行日志里能看到每个账号是否刷新成功、签到结果(金币数、连续天数),或"今日已签到"。

抓包提示

  • 刷新接口用的是 refresh_token,不是 access_token。App 登录包里找 refreshToken

  • 若接口返回"授权失败",说明 refresh token 失效,需要重新抓一次。

  •  建议增强:

    • 超时与重试:给 requests.post/put 增 timeout=(5,10),失败指数退避重试 2–3 次,降低偶发网络抖动影响。

    • 更安全的日志:刷新成功时当前会原样打印 access_token,建议只打印前后 4 位做脱敏,避免日志泄露:

      def mask(tok): return tok[:6] + '...' + tok[-6:]
      print("刷新成功,新 access_token=", mask(response_json['access_token']))
    • 异常分支更细JK_sign 里除了 status_code==200 和 "今日已签到",其他返回最好打印 dl_json 的 code/message,并在 401/403 时提示"token 过期,需重新抓包"。

    • User-Agent/版本可配置:把 versionNamejiankeMall/6.26.0X-JK-UDIDorganizationCode 这类常量抽到顶部或环境变量,便于服务端升级时快速调整。

    • 并发与限速:多账号很多时可在循环里 time.sleep(1~3s),降低相同指纹高频请求特征。

    • 通知内容:把每个账号的"金币+累计天数"汇总成表格/清单,更直观;失败账号单独列出原因。

常见故障速查

  • 刷新失败/授权失败refresh_token 过期 → 重新抓。

  • 签到返回非 200:多半是 access_token 无效(刷新失败或签名头不符);也可能是接口改版,优先对齐 App 的 UA/版本。

  • 今日已签到:脚本幂等性正常,无需处理。


注意

本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。


历史脚本txt文件获取>>
服务器搭建,人工服务咨询>>

没有评论:

发表评论

搬砖界顶梁柱!流放之路降临!散人搬砖攻略搭配详解!

大家好,我是高总前言:《流放之路》最近算的上风头正劲了,很多朋友都想从流放里吃一口,今天给大家出一些详细的搬砖 大家好,我是高总 前言: 《 流放之路》 最近算的上风头正劲了,很多朋友都想从流放里吃一口,今天给大家出一些详细的搬砖攻略,话不多说,进入正题 相信国服有很多萌新会...