2025年9月15日星期一

喜马拉雅任务脚本

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.代码如下

// 喜马拉雅自动签到脚本// 支持自动签到和Cookie更新
const KEY_COOKIE = 'ximalaya_cookie'const KEY_TOKEN = 'ximalaya_token'const KEY_USERID = 'ximalaya_userid'const KEY_LAST_SIGN = 'ximalaya_last_sign'const KEY_DEVICE_ID = 'ximalaya_device_id'
// 主函数async function main() {    // 获取存储的Cookie和Token    const cookie = $persistentStore.read(KEY_COOKIE)    const token = $persistentStore.read(KEY_TOKEN)    const userId = $persistentStore.read(KEY_USERID)    const deviceId = $persistentStore.read(KEY_DEVICE_ID) || generateDeviceId()
    if (!cookie || !token || !userId) {        $notification.post('喜马拉雅签到''失败''未找到认证信息,请打开喜马拉雅小程序')        return    }
    // 检查今日是否已签到    const lastSignDate = $persistentStore.read(KEY_LAST_SIGN)    const today = new Date().toDateString()    if (lastSignDate === today) {        $notification.post('喜马拉雅签到''跳过''今日已签到过')        return    }
    try {        // 执行签到        const signResult = await performSignIn(cookie, token, userId, deviceId)
        if (signResult.code === 0) {            // 签到成功            $persistentStore.write(today, KEY_LAST_SIGN)            $notification.post('喜马拉雅签到''成功'`获得奖励: ${signResult.data.award.award_received_text}`)
            // 获取积分信息            const integralResult = await getIntegral(cookie, token, userId, deviceId)            if (integralResult.code === 10000) {                $notification.post('喜马拉雅积分'`当前积分: ${integralResult.result.integral}`'')            }        } else {            $notification.post('喜马拉雅签到''失败'`错误: ${signResult.msg}`)        }    } catch (error) {        $notification.post('喜马拉雅签到''错误', error.message || '未知错误')    }}
// 执行签到async function performSignIn(cookie, token, userId, deviceId) {    const timestamp = Date.now()    const nonce = generateNonce()
    // 构建签名参数(需要根据实际算法调整)    const signParams = {        device_id: deviceId,        sn'11480_00_100480',        version'2.1',        app_key'e23df0e3d21c4379bf2a5b302a843a25',        device_id_type'UUID',        version_code'9094',        product_type'child_watches_okii',        client_os_type'2',        nonce: nonce,        timestamp: timestamp,        user_id: userId    }
    // 生成签名(需要根据实际算法实现)    const sig = generateSignature(signParams)    signParams.sig = sig
    // 构建请求参数    const formBody = Object.keys(signParams).map(key =>         encodeURIComponent(key) + '=' + encodeURIComponent(signParams[key])    ).join('&')
    return new Promise((resolve, reject) => {        $httpClient.post({            url'https://api.ximalaya.com/ximalayaos-smart-wear/api/parent_sign_in/sign_in',            headers: {                'Content-Type''application/x-www-form-urlencoded;charset=UTF-8',                'Cookie': cookie,                'User-Agent''Mozilla/5.0 (iPhone; CPU iPhone OS 18_3_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.63(0x18003f28) NetType/WIFI Language/zh_CN',                'Referer''https://m.ximalaya.com/',                'Origin''https://m.ximalaya.com'            },            body: formBody        }, (error, response, data) => {            if (error) {                reject(error)            } else {                try {                    resolve(JSON.parse(data))                } catch (e) {                    reject(e)                }            }        })    })}
// 获取积分信息async function getIntegral(cookie, token, userId, deviceId) {    const timestamp = Date.now()    const nonce = generateNonce()
    // 构建签名参数    const signParams = {        device_id: deviceId,        sn'11480_00_100480',        version'2.2',        app_key'e23df0e3d21c4379bf2a5b302a843a25',        device_id_type'UUID',        version_code'9093',        product_type'child_watches_okii',        client_os_type'3',        nonce: nonce,        timestamp: timestamp,        userId: userId    }
    // 生成签名    const sig = generateSignature(signParams)
    const url = `https://api.ximalaya.com/ximalayaos-smart-wear/api/integral/getUserIntegral?${Object.keys(signParams).map(key =>         encodeURIComponent(key) + '=' + encodeURIComponent(signParams[key])    ).join('&')}&sig=${encodeURIComponent(sig)}`
    return new Promise((resolve, reject) => {        $httpClient.get({            url: url,            headers: {                'Cookie': cookie,                'User-Agent''Mozilla/5.0 (iPhone; CPU iPhone OS 18_3_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.63(0x18003f28) NetType/WIFI Language/zh_CN',                'Referer''https://m.ximalaya.com/'            }        }, (error, response, data) => {            if (error) {                reject(error)            } else {                try {                    resolve(JSON.parse(data))                } catch (e) {                    reject(e)                }            }        })    })}
// HTTP请求处理(用于抓取Cookie和Token)function handleHTTPRequest(request) {    // 只处理喜马拉雅API请求    if (request.url.includes('api.ximalaya.com')) {        // 获取请求头中的Cookie        const cookie = request.headers['Cookie'] || request.headers['cookie']        if (cookie && cookie.includes('_token')) {            // 提取Token            const tokenMatch = cookie.match(/_token=([^&;]+)/)            if (tokenMatch && tokenMatch[1]) {                $persistentStore.write(tokenMatch[1], KEY_TOKEN)
                // 尝试从Token中提取用户ID                const userIdMatch = tokenMatch[1].match(/(\d+)/)                if (userIdMatch && userIdMatch[1]) {                    $persistentStore.write(userIdMatch[1], KEY_USERID)                }            }
            // 保存完整Cookie            $persistentStore.write(cookie, KEY_COOKIE)
            // 生成设备ID并保存            const deviceId = generateDeviceId()            $persistentStore.write(deviceId, KEY_DEVICE_ID)        }    }
    // 继续原始请求    return request}
// HTTP响应处理function handleHTTPResponse(response) {    // 可以在这里处理响应,例如检查是否认证过期    if (response.status === 401 || response.status === 403) {        // 认证过期,清除保存的认证信息        $persistentStore.write(''KEY_COOKIE)        $persistentStore.write(''KEY_TOKEN)        $notification.post('喜马拉雅认证''过期''请重新打开喜马拉雅小程序以更新认证信息')    }
    return response}
// 生成随机设备IDfunction generateDeviceId() {    const randomStr = Math.random().toString(36).substring(212)    return `h5_${randomStr}_2.4.25`}
// 生成随机Noncefunction generateNonce() {    const chars = 'abcdefghijklmnopqrstuvwxyz0123456789'    let nonce = ''    for (let i = 0; i < 32; i++) {        nonce += chars.charAt(Math.floor(Math.random() * chars.length))    }    return nonce}
// 生成签名(需要根据实际算法实现)function generateSignature(params) {    // 这里是签名算法的伪实现    // 实际签名算法需要根据喜马拉雅的实际算法进行调整    // 可能需要使用MD5、SHA1或其他哈希算法
    // 示例:将参数按key排序后拼接成字符串,然后进行MD5哈希    const sortedKeys = Object.keys(params).sort()    let signStr = ''
    for (const key of sortedKeys) {        signStr += key + params[key]    }
    // 添加密钥(如果有)    signStr += 'your_secret_key'
    // 返回模拟签名(实际需要实现正确的哈希算法)    return md5(signStr)}
// MD5哈希函数(示例实现)function md5(str) {    // 这是一个简单的MD5实现示例    // 在实际使用中,可能需要使用更完整的MD5实现    let hash = 0    if (str.length === 0return hash.toString()    for (let i = 0; i < str.length; i++) {        const char = str.charCodeAt(i)        hash = (hash << 5) - hash + char        hash = hash & hash // Convert to 32bit integer    }    return hash.toString()}
// 模块导出if (typeof $argument !== 'undefined') {    // 脚本被调用时执行    main()}
if (typeof $request !== 'undefined') {    // HTTP请求处理    const modifiedRequest = handleHTTPRequest($request)    $done(modifiedRequest)}
if (typeof $response !== 'undefined') {    // HTTP响应处理    const modifiedResponse = handleHTTPResponse($response)    $done(modifiedResponse)}

解析

该脚本为喜马拉雅自动签到脚本,其主要作用如下:

  • 在网络脚本环境中,自动完成喜马拉雅小程序的每日签到,并查询积分

  • 通过重写规则拦截请求,自动抓取并持久化 Cookie/Token/用户ID/设备ID,后续定时任务即可静默签到。

  • 记录"今日是否已签",避免重复提交。

关键存储键

  • ximalaya_cookie:完整 Cookie

  • ximalaya_token:从 Cookie 提取的 token(或单独保存)

  • ximalaya_userid:用户 ID

  • ximalaya_last_sign:上次签到日期(用于去重)

  • ximalaya_device_id:设备 ID(无则生成)

主流程入口

  • main()

    1. 读 Cookie/Token/UserId/DeviceId → 校验。

    2. 判断是否已签到(比对 ximalaya_last_sign 与今天)。

    3. 调用 performSignIn() 执行签到;成功后写入今天日期。

    4. 调用 getIntegral() 查询当前积分。

    5. 通过系统通知展示结果。

HTTP 拦截与认证信息更新

  • handleHTTPRequest(request)

    • 抓取请求头里的 Cookie;从中提取 _token 并保存到 ximalaya_token

    • 尝试从 token 中提取用户 ID 保存到 ximalaya_userid

    • 保存完整 Cookie 到 ximalaya_cookie

    • 若无设备 ID,生成并保存。

    • 当 URL 命中 api.ximalaya.com

    • 返回(可能被修改的)请求,继续原始访问。

  • handleHTTPResponse(response)

    • 若状态为 401/403,则清空已保存的认证信息并发出"认证过期"提示。

    • 返回响应。

以上两者依赖你在 配置 rewrite/script 规则与 MITM,脚本才能"看到"请求/响应并写入持久化数据。

具体业务请求

  • performSignIn(cookie, token, userId, deviceId)

    组装签到所需参数

    (device_id/sn/version/app_key/.../nonce/timestamp/user_id)
  • 通过 generateSignature() 生成 sigPOST 到签到接口。

  • 返回接口 JSON。

  • getIntegral(cookie, token, userId, deviceId)

    • 同样组装参数并生成 sigGET 查询积分。

    • 返回接口 JSON。

签名与标识辅助

  • generateSignature(params)

    • 签名生成函数:当前为示例/占位实现(把排序后的参数拼接并"md5"),实际需按喜马拉雅真实算法调整。

  • md5(str)

    • 示例/占位哈希函数:并非真正 MD5,仅作演示。

  • generateDeviceId()

    • 生成随机设备 ID(形如 h5_xxxxx_2.4.25),并在首次抓取时保存。

  • generateNonce()

    • 生成 32 位的随机 nonce。

其他逻辑

  • 通过 $persistentStore.read/write 持久化数据;

  • 通过 $notification.post 发送结果通知;

  • 通过 $httpClient.get/post 发起请求;

  • 入口控制:

    • 存在 $argument 时执行 main()(定时任务/手动触发);

    • 存在 $request 时走 handleHTTPRequest()

    • 存在 $response 时走 handleHTTPResponse()

使用要点(简述)

  • 需要在配置相应的 rewrite + MITM,使脚本能拦截喜马拉雅请求以自动更新 Cookie/Token。

  • generateSignature() 与 md5() 仅为占位,需要按实际抓包或逆向的算法替换为真实签名,否则签到/查询很可能失败。

  • ximalaya_last_sign 用于当日去重,避免多次请求。


注意

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


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


没有评论:

发表评论

不承诺任何交付的雪球社群

雪球做自媒体已经有一段时间了,目前自己的项目其实年收入稳定,也没有考虑说从新媒体变现。 自己也建了蛮多个社群,基本上都是免费的,但是发现了,我做着做着,群聊会越来越没有动静,所以自己也渐渐没有动力去做这一块。 但是我坚信社群的作用,这不仅是一个整合资源的入口,还是一个可以提供...