├── .gitignore ├── README.md ├── config ├── profile.js ├── test.ini └── test.js ├── cookie └── test.js ├── creat.js ├── creat.sh ├── creatAll.js ├── invite └── temp.json ├── main.js ├── package.json ├── parse ├── jd │ ├── jd_answer_superMarket.js │ ├── jd_extra_wskey.js │ ├── jd_help_goldDump.js │ ├── jd_task_assets.js │ ├── jd_task_bSignin.js │ ├── jd_task_backBean.js │ ├── jd_task_baoxian.js │ ├── jd_task_baoxiaoji.js │ ├── jd_task_beanHome.js │ ├── jd_task_beanList.js │ ├── jd_task_chatReward.js │ ├── jd_task_checkCookie.js │ ├── jd_task_comment.js │ ├── jd_task_couponSpace.js │ ├── jd_task_deliverySign.js │ ├── jd_task_drawFission.js │ ├── jd_task_dwapp.js │ ├── jd_task_farm.js │ ├── jd_task_farmNew.js │ ├── jd_task_fission.js │ ├── jd_task_global.js │ ├── jd_task_goldDump.js │ ├── jd_task_hall.js │ ├── jd_task_hby.js │ ├── jd_task_healthy.js │ ├── jd_task_hongbaoyu.js │ ├── jd_task_hudong.js │ ├── jd_task_ini.js │ ├── jd_task_inviteFission.js │ ├── jd_task_jdBean.js │ ├── jd_task_jdjoy.js │ ├── jd_task_jiadian.js │ ├── jd_task_joyPark.js │ ├── jd_task_joyPark2.js │ ├── jd_task_jutou.js │ ├── jd_task_jxParty.js │ ├── jd_task_live.js │ ├── jd_task_lottery.js │ ├── jd_task_lotteryDraw.js │ ├── jd_task_lotteryMachine.js │ ├── jd_task_luban.js │ ├── jd_task_morningHb.js │ ├── jd_task_pcSign.js │ ├── jd_task_plantBean.js │ ├── jd_task_price.js │ ├── jd_task_question.js │ ├── jd_task_receive.js │ ├── jd_task_redRain2021.js │ ├── jd_task_rmCart.js │ ├── jd_task_rmCoupon.js │ ├── jd_task_rmFavorite.js │ ├── jd_task_rmFollow.js │ ├── jd_task_sharkBean.js │ ├── jd_task_shopGift.js │ ├── jd_task_shopSign.js │ ├── jd_task_shopappSign.js │ ├── jd_task_signin.js │ ├── jd_task_startShop.js │ ├── jd_task_supBox.js │ ├── jd_task_superBrand.js │ ├── jd_task_superFission.js │ ├── jd_task_superLeague.js │ ├── jd_task_superMarket.js │ ├── jd_task_telegram.js │ ├── jd_task_test.js │ ├── jd_task_union.js │ ├── jd_task_united.js │ ├── jd_task_user.js │ ├── jd_task_videoHb.js │ ├── jd_task_wFans.js │ ├── jd_task_wanyiwan.js │ ├── jd_task_wskey.js │ ├── jd_task_wuxian.js │ ├── js_task_drawPrize.js │ ├── js_task_inviteFission.js │ ├── js_task_joyPark.js │ ├── js_task_signin.js │ ├── js_task_yaoyiyao.js │ ├── jw_task_drainage.js │ ├── jw_task_signRedpacket.js │ └── jw_task_signin.js └── kejiwanjia │ └── kejiwanjia_task_signin.js ├── qitoBot.js ├── qitoCreat.js ├── qitoCreate.js ├── static ├── fp │ └── index.e800ec19.js ├── h5st │ ├── 481.js │ ├── 482.js │ ├── 491.js │ ├── 495.js │ ├── 5.1.js │ ├── 501.js │ └── xcx491.js ├── log.html └── vendors.683f5a61.js ├── temp └── jdvalidate.txt ├── template.js └── util ├── cacheFile.js ├── common.js ├── fileCache.js ├── jdAlgo.js ├── jdFinger.js ├── jdLogs.js ├── jdObf.js ├── jdSign.js ├── jdUrl.js ├── jdValidate.js ├── parseIni.js └── redisCache.js /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | .idea/vcs.xml 4 | .idea/workspace.xml 5 | config/config.js 6 | cookie/jd.js 7 | extractor/util.js 8 | *.iml 9 | .idea/misc.xml 10 | .idea/modules.xml 11 | config/jd.js 12 | qlCreat.js 13 | config/jdUser.js 14 | invite/jd_task_farm.json 15 | config/jd.ini 16 | package-lock.json 17 | dump.rdb 18 | config/proxy.ini 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bug龙订阅 2 | ``` 3 | 添加环境变量: QITOQITO_PLATFORM=qinglong 4 | Nodejs添加依赖: crypto-js axios request node-file-cache 5 | 6 | 链接: https://github.com/qitoqito/kedaya.git 7 | 定时类型: crontab 8 | 定时规则: 自定(23 23 * * *) 9 | 白名单: kedaya 10 | 执行后: cp -a /ql/data/repo/qitoqito_kedaya/. /ql/data/scripts && task qitoCreat.js now 11 | ``` 12 | ![图片](https://github.com/user-attachments/assets/c2c0473e-54cb-4588-988f-a8fc85208080) 13 | 14 | 15 | # 注意事项 16 | 此项目与单文件脚本结构不同,请不要将无关文件放进parse目录 17 | 请不要将parse目录文件放scripts目录运行 18 | 某些面板不支持项目文件整体拉取,会破坏拉取的项目结构,请先翻阅README了解 19 | 环境变量不能有shareCode 20 | 21 | # 框架结构 22 | util: 调用函数目录 23 | parse: 解析脚本目录 24 | temp: 缓存文件目录 25 | static: 静态文件目录 26 | cookie: 数据文件目录 27 | config: 配置文件目录 28 | log: 日志文件目录 29 | template.js: 项目主体文件 30 | main.js: 项目入口文件 31 | qitoCreat: 生成入口以及添加定时 32 | 33 | # 使用方法 34 | node main.js jd_task_test [-help n -custom x -limit x] 35 | 36 | # 初始化 37 | 38 | QITOQITO_PLATFORM=按照所使用面板正确填写 qinglong|jtask|jd 其中一个 [青龙面板:qinglong, v3系列:jtask, 衍生面板:jd], 39 | QITOQITO_SYNC=1 当有此变量时,面板定时会与项目定时同步,如需自行修改,请勿添加该字段 40 | QITOQITO_COVER=1 当有此变量时候,qitoCreat会强制覆盖之前生成的入口文件 41 | 42 | 初始安装请确保nodejs安装了axios request crypto-js node-file-cache模块 43 | 44 | # 环境变量 45 | # COOKIE 46 | JD_COOKIE=ck1&ck2&ck3 47 | JD_COOKIE_MAIN=n 全局主号助力人数,假设你有20个账号,当参数设置为5时候,这20个账号会去助力排前面的5个账号 48 | msgWhite=fn1|fn2|fn3 通知白名单 49 | msgBlack=fn1|fn2|fn3 通知黑名单 50 | 51 | 52 | # 脚本字段 53 | 脚本字段是自行定义某一个脚本运行的一些变量,如果有需求可自行添加环境变量 54 | 55 | filename_help=n 或 pin1|pin2 (设置助力主号数) 56 | filename_custom=custom (自定义字段) 57 | filename_limit=n (限制运行账号数) 58 | filename_msgWork=pin1|pin2|pin3 (通知账号白名单) 59 | filename_msgExcept=pin1|pin2|pin3 (通知账号黑名单) 60 | 61 | # 食用方法 62 | # qinglong面板 63 | rm -rf /ql/data/repo/qitoqito_kedaya && ql repo https://github.com/qitoqito/kedaya.git kedaya && cp -a /ql/data/repo/qitoqito_kedaya/. /ql/data/scripts && task qitoCreat.js now 64 | # 青龙面板(旧) 65 | rm -rf /ql/repo/qitoqito_kedaya && ql repo https://github.com/qitoqito/kedaya.git kedaya && cp -a /ql/repo/qitoqito_kedaya/. /ql/scripts && task qitoCreat.js now 66 | 67 | # v3系列 68 | rm -rf kedaya && git clone https://github.com/qitoqito/kedaya.git && cp -a kedaya/. ./scripts && jtask qitoCreat now 69 | 70 | # 衍生面板 71 | rm -rf kedaya && git clone https://github.com/qitoqito/kedaya.git && cp -a kedaya/. ./scripts && jd qitoCreat now 72 | 73 | # 其他面板 74 | 同步解压到scripts目录,运行creat.js生成入口文件 75 | 76 | 77 | # 定时任务 78 | # v3系列 79 | 45 * * * * bash -c "rm -rf kedaya && git clone https://github.com/qitoqito/kedaya.git && cp -a kedaya/. ./scripts && jtask qitoCreat now" 80 | 81 | # 衍生面板 82 | 45 * * * * bash -c "rm -rf kedaya && git clone https://github.com/qitoqito/kedaya.git && cp -a kedaya/. ./scripts && jd qitoCreat now" 83 | 84 | # 京东SIGN 85 | 如果环境变量中,已经部署过 JD_SIGN_API, JD_SIGN_KRAPI 可以跳过以下步骤 86 | 87 | ``` 88 | docker run -dit \ 89 | -p 17840:17840 \ 90 | -e TZ=Asia/Shanghai \ 91 | --name Sign \ 92 | --hostname Sign \ 93 | --restart unless-stopped \ 94 | seansuny/signapi:latest 95 | 96 | 添加环境变量 QITOQITO_JDSIGN=http://ip:17840/sign 97 | ``` 98 | 99 | 100 | # 通知字段 101 | 102 | # telegram 103 | TELEGRAM_TOKEN= 104 | TELEGRAM_ID= 105 | TELEGRAM_URL=自定义TG代理链接 106 | TELEGRAM_PROXY=代理服务器 (http|https|sock)://ip:port, 使用sock需要安装 socks-proxy-agent 模块 107 | 108 | # bark 109 | BARK_TOKEN= 110 | BARK_URL=自定义url 111 | BARK_SOUND=自定义铃声 112 | 113 | # 钉钉 114 | DINGTALK_TOKEN= 115 | DINGTALK_SECRET=密钥 116 | 117 | # igot 118 | IGOT_TOKEN= 119 | 120 | # server酱 121 | FTQQ_TOKEN= 122 | 123 | # pushplus 124 | PUSHPLUS_TOKEN= 125 | PUSHPLUS_TOPIC=群组 126 | 127 | # 企业微信 128 | WEIXIN_TOKEN= 129 | 130 | # 企业微信AM 131 | WXAM_TOKEN= 132 | 133 | # 通知昵称 134 | 运行jd_task_user 135 | 编辑config/jdUser.js 136 | 找到对应账号的nickName字段填写后保存 137 | 138 | # 单独通知 139 | 框架支持给不同用户推送通知 140 | 141 | 142 | -------------------------------------------------------------------------------- /config/profile.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | qitoApi: new Buffer.from("687474703a2f2f3131362e3139382e3234302e39362f746f6f6c6b69742f6a642f6170692e706870", 'hex').toString('utf8'), 3 | algoVersion: '5.0', 4 | globalSalt: 2876, 5 | hdIds: "redrain-2021|wh5|SecKill2020|content_ecology|u|u_hongbao|babelh5|publicUseApi|newtry", 6 | keywords: ['model', 'task', 'thread', 'help', 'exit', 'limit', 'except', 'reward', 'loop', 'interval', 'cron', 'expand', 'custom', 'turn', 'endTime', 'send', 'work', 'msgNum', 'msgTotal', 'msgExcept', 'msgWork', 'count', 'proxy', 'timeout', 'skip', 'aid', 'hideCode', 'timer', 'delay', 'urlProxy', 'proxyUrl', 'proxyInterval', 'proxyProtocol', 'proxyVerify', 'proxyRetry'], 7 | userRegular: { 8 | 'jd': /pin=([^;]+)/, 9 | 'kejiwanjia': [/pin=([^;]+)/, /username=([^;]+)/], 10 | 'baidu': /pin=([^;]+)/, 11 | 'smzdm': /pin=([^;]+)/, 12 | }, 13 | communal: ['options', 'curl', 'jsonParse', 'uuid', 'response', 'location', 'dumps', 'loads', 'match', 'matchAll', 'md5', 'unique', 'rand', 'random', 'compact', 'column', 'wait', 'query', 'sha1', 'md5', 'sha256', 'hmacsha256', 'query', 'haskey', 'type', 'parseIni', 'redisCli', 'fileCache', 'userAgents', 'userName', 'userPin', 'userDict', 'userRegular', 'urlProxy', 'proxyRow', 'proxyList', 'delay', 'proxy', 'clientUa', 'QITOQITO_JDSIGN', 'JD_SIGN_API', 'JD_SIGN_KRAPI', 'procedure', 'dirname', 'algoVersion'], 14 | timerRegular: { 15 | jd: { 16 | wait: 120, 17 | rule: 18 | { 19 | 'url': 20 | 'https://api.m.jd.com/client.action?functionId=jdDiscoveryRedPoint&body=%7B%7D&uuid=487f7b22f68312d2c1bbc93b1&client=apple&clientVersion=10.0.10&st=1677768101596&sv=120&sign=fbaf17e9b2a79543cd3e296665517fb5', 21 | 'haskey': 22 | 'time' 23 | } 24 | } 25 | }, 26 | verifyUrl: 'https://api.m.jd.com/client.action?functionId=queryMaterialProducts&client=wh5', 27 | } 28 | -------------------------------------------------------------------------------- /config/test.ini: -------------------------------------------------------------------------------- 1 | [env] 2 | # filename_limit=2 3 | 4 | [filename_custom] 5 | # id1 6 | # id2 7 | 8 | [filename_expand] 9 | # id1 10 | # id2 11 | 12 | -------------------------------------------------------------------------------- /config/test.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'help': 234, 3 | "BARK_TOKEN": "xxxxxx", 4 | "BARK_URL": "http://bark.xxxx.com", 5 | "BARK_SOUND": "shake", 6 | "TG_TOKEN": "242423423:aaaaaaaa", 7 | "TG_ID": "2342423423", 8 | } 9 | -------------------------------------------------------------------------------- /cookie/test.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'main': [], 3 | 'other': [], 4 | } 5 | -------------------------------------------------------------------------------- /creat.js: -------------------------------------------------------------------------------- 1 | let fs = require("fs") 2 | let dirname = process.mainModule.path 3 | let dir = fs.readdirSync(`${dirname}/parse`); 4 | let dicts = {} 5 | let prefix=process.env.QITOQITO_PREFIX ||'' 6 | dir.forEach(function(item, index) { 7 | let stat = fs.lstatSync(`${dirname}/parse/` + item) 8 | if (stat.isDirectory() === true) { 9 | dicts[item] = fs.readdirSync(`${dirname}/parse/${item}`) 10 | } 11 | }) 12 | let pathFile = fs.readdirSync(dirname) 13 | 14 | let content= ` 15 | !(async () => { 16 | let prefix = process.env.QITOQITO_PREFIX ||'' 17 | let filename = process.mainModule.filename.replace(prefix,'').match(/(\\w+)\\.js/)[1] 18 | let dirname = process.mainModule.path 19 | let type = filename.split('_')[0] 20 | if (['js', 'jx', 'jr', 'jw'].includes(type)) { 21 | type = 'jd' 22 | } 23 | let qitoqito = require(\`\${dirname}/parse/\${type}/\${filename}\`) 24 | let kedaya = new qitoqito() 25 | await kedaya.init({}) 26 | } 27 | )().catch((e) => { 28 | console.log(e.message) 29 | }) 30 | 31 | ` 32 | 33 | for (let i in dicts) { 34 | for (let j of dicts[i]) { 35 | let filename=`${prefix}${j}` 36 | if (pathFile.includes(filename)) { 37 | console.log(`目录里面已经有${filename}了`) 38 | }else{ 39 | fs.writeFile(`${dirname}/${filename}`, content, function(err, data) { 40 | if (err) { 41 | throw err; 42 | } 43 | console.log(`${filename}写入成功`) 44 | }) 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /creat.sh: -------------------------------------------------------------------------------- 1 | if [ $1 ]; then 2 | cat> $1.js < { 4 | let filename = process.mainModule.filename.match(/(\w+)\\.js/)[1] 5 | let dirname = process.mainModule.path 6 | let type = filename.split('_')[0] 7 | if (['js', 'jx', 'jr', 'jw'].includes(type)) { 8 | type = 'jd' 9 | } 10 | let qitoqito = require(\`\${dirname}/parse/\${type}/\${filename}\`) 11 | let kedaya = new qitoqito() 12 | await kedaya.init({}) 13 | } 14 | )().catch((e) => { 15 | console.log(e.message) 16 | }) 17 | EOF 18 | fi 19 | -------------------------------------------------------------------------------- /creatAll.js: -------------------------------------------------------------------------------- 1 | let fs = require("fs") 2 | const path = require("path") 3 | let dirname = process.mainModule.path 4 | let dir = fs.readdirSync(`${dirname}/parse`); 5 | let dicts = {} 6 | var env = {} 7 | try { 8 | var parseIni = require("./util/parseIni") 9 | var file = `${__dirname}/config/jd.ini` 10 | env = parseIni.parse(file) 11 | } catch (e1) { 12 | try { 13 | let rootPath = path.resolve(__dirname, '..'); 14 | var file = `${rootPath}/config/jd.ini` 15 | env = parseIni.parse(file) 16 | } catch (e2) { 17 | try { 18 | let rootPath = path.resolve(__dirname, '../..'); 19 | var file = `${rootPath}/config/jd.ini` 20 | env = parseIni.parse(file) 21 | } catch (e3) {} 22 | } 23 | } 24 | if (env) { 25 | for (let i in env) { 26 | if (i.includes('QITOQITO')) { 27 | console.log(i, ":", env[i]) 28 | } else if (i == 'env') { 29 | for (let j in env.env) { 30 | if (j.includes('QITOQITO')) { 31 | console.log(j, ":", env.env[j]) 32 | env[j] = env.env[j] 33 | } 34 | } 35 | } 36 | } 37 | } 38 | var prefix = env.QITOQITO_PREFIX || process.env.QITOQITO_PREFIX || '' 39 | var map = env.QITOQITO_MAP || process.env.QITOQITO_MAP || '' 40 | dir.forEach(function(item, index) { 41 | let stat = fs.lstatSync(`${dirname}/parse/` + item) 42 | if (stat.isDirectory() === true) { 43 | dicts[item] = fs.readdirSync(`${dirname}/parse/${item}`) 44 | } 45 | }) 46 | let pathFile = fs.readdirSync(dirname) 47 | let change = {} 48 | if (map) { 49 | if (typeof map == 'object') { 50 | for (let i in map) { 51 | change[i] = { 52 | map: map[i], 53 | type: map[i].split("_")[0] 54 | } 55 | } 56 | } else { 57 | for (let k of map.replace(/\&/g, "\|").split("|")) { 58 | let a = k.split("=") 59 | for (let i of a[0].split(',')) { 60 | change[i] = { 61 | map: a[1], 62 | type: a[1].split("_")[0] 63 | } 64 | } 65 | } 66 | } 67 | console.log(change) 68 | } 69 | dicts['extra'] = Object.keys(change) 70 | let content = ` 71 | !(async () => { 72 | let prefix = process.env.QITOQITO_PREFIX ||'' 73 | let filename = process.mainModule.filename.replace(prefix,'').match(/(\\w+)\\.js/)[1] 74 | let dirname = process.mainModule.path 75 | let type = filename.split('_')[0] 76 | if (['js', 'jx', 'jr', 'jw'].includes(type)) { 77 | type = 'jd' 78 | } 79 | let qitoqito = require(\`\${dirname}/parse/\${type}/\${filename}\`) 80 | let kedaya = new qitoqito() 81 | await kedaya.init({}) 82 | } 83 | )().catch((e) => { 84 | console.log(e.message) 85 | }) 86 | 87 | ` 88 | for (let i in dicts) { 89 | for (let j of dicts[i]) { 90 | let filename = `${prefix}${j}` 91 | if (i == 'extra') { 92 | let exc = ` 93 | !(async () => { 94 | let prefix = process.env.QITOQITO_PREFIX ||'' 95 | let filename = process.mainModule.filename.replace(prefix,'').match(/(\\w+)\\.js/)[1] 96 | let dirname = process.mainModule.path 97 | let type = filename.split('_')[0] 98 | if (['js', 'jx', 'jr', 'jw'].includes(type)) { 99 | type = 'jd' 100 | } 101 | let qitoqito = require(\`\${dirname}/parse/${change[j].type}/${change[j].map}\`) 102 | let kedaya = new qitoqito() 103 | await kedaya.init({"filename":"${j}"}) 104 | } 105 | )().catch((e) => { 106 | console.log(e.message) 107 | }) 108 | `; 109 | fs.writeFile(`${dirname}/${filename}.js`, exc, function(err, data) { 110 | if (err) { 111 | throw err; 112 | } 113 | console.log(`🐯‍❄️ 写入成功: ${filename}.js 写入目录成功`) 114 | }) 115 | } else { 116 | fs.writeFile(`${dirname}/${filename}`, content, function(err, data) { 117 | if (err) { 118 | throw err; 119 | } 120 | console.log(`🐯‍❄️ 写入成功: ${filename} 写入目录成功`) 121 | }) 122 | } 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /invite/temp.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qitoqito/kedaya/2b3defe051a7d522ed5208dfd6a478db06e3d467/invite/temp.json -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | let filename; 2 | let params = {} 3 | let length = process.argv.length 4 | if (length>2) { 5 | filename = process.argv[2].split('.')[0] 6 | if (length>3) { 7 | for (let i = 3; i { 29 | let main = require(`${dirname}/parse/${type}/${filename}`) 30 | let a = new main() 31 | await a.init(params) 32 | } 33 | )().catch((e) => { 34 | console.log(e.message) 35 | }).finally(() => { 36 | }); 37 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "root", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "dependencies": { 7 | "crypto-js": "^4.1.1", 8 | "date-fns": "^2.22.1", 9 | "http": "0.0.1-security", 10 | "http-server": "^0.12.3", 11 | "https": "^1.0.0", 12 | "ini": "^2.0.0", 13 | "jsdom": "^17.0.0", 14 | "png-js": "^1.0.0", 15 | "qrcode-terminal": "^0.12.0", 16 | "readline-sync": "^1.4.10", 17 | "axios": "1.7.2", 18 | "request": "2.88.2", 19 | "secp256k1": "^5.0.0", 20 | "stream": "0.0.2", 21 | "tough-cookie": "^4.0.0", 22 | "tunnel": "0.0.6", 23 | "vm": "^0.1.0", 24 | "ws": "^7.4.3", 25 | "zlib": "^1.0.5", 26 | "user-agents": "^1.1.141", 27 | "node-file-cache": "^1.0.2", 28 | "moment": "2.29.2", 29 | "node-telegram-bot-api": "0.56.0", 30 | "socks-proxy-agent": "6.1" 31 | }, 32 | "scripts": { 33 | "test": "echo \"Error: no test specified\" && exit 1" 34 | }, 35 | "keywords": [], 36 | "author": "", 37 | "license": "ISC" 38 | } 39 | -------------------------------------------------------------------------------- /parse/jd/jd_answer_superMarket.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东超市跨年对暗号" 7 | this.cron = "6 6 6 6 6" 8 | this.task = 'local' 9 | this.import = ['jdAlgo'] 10 | this.interval = 2000 11 | this.readme = "答案远程下发,脚本晚些时候跑" 12 | } 13 | 14 | async prepare() { 15 | this.algo = new this.modules.jdAlgo({ 16 | type: "main", 17 | version: "latest" 18 | }) 19 | let s = await this.curl({ 20 | 'url': this.qitoApi, 21 | form: `script=${this.filename}` 22 | } 23 | ) 24 | if (this.haskey(s, 'data')) { 25 | this.dict = s.data 26 | } 27 | else { 28 | console.log("没有获取到答案...") 29 | this.jump = 1 30 | } 31 | } 32 | 33 | async main(p) { 34 | let cookie = p.cookie; 35 | let work = await this.algo.curl({ 36 | 'url': `https://api.m.jd.com/atop_channel_code_word`, 37 | 'form': `appid=jd-super-market&t=1735650765258&functionId=atop_channel_code_word&client=m&uuid=674ce0d97511f5ed054c3dc0af093b3b245ab68d&body={"bizCode":"cn_retail_jdsupermarket","scenario":"interactive","babelActivityId":"01722417","babelChannel":"ttt5","isJdApp":"1","isWx":"0"}&h5st=&x-api-eid-token=jdd03C3HUEKC6G2V5WV6SOXJV5E4J2ILKIIHLPARTU7DKUSMS72ICFUVMMF7ZVZXDON6VLTUCVU2GNZ2RZRMVIDXGF2FBMUAAAAMUDTKN5XQAAAAADAQS7F7R6IFNLMX`, 38 | cookie, 39 | algo: { 40 | appId: '35fa0' 41 | } 42 | } 43 | ) 44 | for (let i of this.haskey(work, 'data.floorData.items.0.roundGroupQuestionList')) { 45 | for (let j of i.roundQuestionList) { 46 | if (j.completionFlag) { 47 | console.log("已答题:", j.question) 48 | } 49 | else { 50 | console.log("正在答题:", j.question) 51 | if (this.dict[j.encryptAssignmentId]) { 52 | console.log("命中答案,正在答题:", this.dict[j.encryptAssignmentId].answer) 53 | let answer = await this.algo.curl({ 54 | 'url': `https://api.m.jd.com/atop_channel_code_submit`, 55 | 'form': `appid=jd-super-market&t=1735652014484&functionId=atop_channel_code_submit&client=m&uuid=60851eb2289770baca0cb3525ef19b4d2d51d666&body={"bizCode":"cn_retail_jdsupermarket","scenario":"interactive","babelActivityId":"01722417","encryptAssignmentId":"${j.encryptAssignmentId}","answer":"${this.dict[j.encryptAssignmentId].answer}","babelChannel":"ttt12","isJdApp":"1","isWx":"0"}`, 56 | cookie 57 | } 58 | ) 59 | if (this.haskey(answer, 'data.interactiveRewardVO')) { 60 | if (answer.data.interactiveRewardVO.rewardType == 56) { 61 | this.print(`获得: ${answer.data.interactiveRewardVO.rewardValue}超市卡`, p.user) 62 | } 63 | else { 64 | console.log(answer.data.interactiveRewardVO) 65 | } 66 | } 67 | else { 68 | console.log(answer) 69 | } 70 | await this.wait(2000) 71 | } 72 | else { 73 | console.log("答案还没更新,晚点再来....") 74 | this.jump = 1 75 | } 76 | } 77 | } 78 | } 79 | for (let i of Array(21)) { 80 | let bet = await this.curl({ 81 | 'url': `https://api.m.jd.com/atop_channel_newyear_lottery_bet`, 82 | 'form': `appid=jd-super-market&t=1735656483694&functionId=atop_channel_newyear_lottery_bet&client=m&uuid=60851eb2289770baca0cb3525ef19b4d2d51d666&body={"provinceId":16,"cityId":1341,"countyId":1347,"townId":44750,"bizCode":"cn_retail_jdsupermarket","scenario":"interactive","babelActivityId":"01722417","channelFollowStatus":1,"babelChannel":"ttt5","isJdApp":"1","isWx":"0"}&h5st=&x-api-eid-token=jdd03FQ6Z2DTGYZSJM5FKY54JLAURRHP2UZHK2ID7554EMNWWNNSK3JBCTLTR45IOP3Z5K3YJHOG64SJAOB44KVS3RH7G2UAAAAMUDS2HM3YAAAAACXDQ5P4VEVSNHEX`, 83 | cookie, 84 | algo: { 85 | appId: '32393' 86 | } 87 | } 88 | ) 89 | if (!this.haskey(bet, 'data.floorData.items.0.credits')) { 90 | break 91 | } 92 | for (let i of this.haskey(bet, 'data.floorData.items.0.rewards')) { 93 | this.print(`获得: ${i.rewardName} ${i.rewardValue}`, p.user) 94 | } 95 | } 96 | } 97 | } 98 | 99 | module.exports = Main; 100 | -------------------------------------------------------------------------------- /parse/jd/jd_extra_wskey.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东wskey配置转换" 7 | this.cron = "6 6 6 6 6" 8 | this.help = 2 9 | this.task = 'test' 10 | this.jump = 1 11 | this.import = ['fs'] 12 | this.readme=`读取环境变量JD_WSCK,将wskey写入到jdUser里面\nwskey转换ptkey可以使用jd_task_checkCookie或者jd_task_wskey生成` 13 | } 14 | 15 | async prepare() { 16 | let change = 0 17 | if (this['JD_WSCK']) { 18 | let dict = this['JD_WSCK'].split('&') 19 | console.log(dict) 20 | for (let cookie of dict) { 21 | let pin = this.userPin(cookie) 22 | let user = this.userDict[pin] 23 | if (user) { 24 | if (user.wskey == cookie) { 25 | console.log(`配置文件中已经有:${pin}账户的wskey,跳过写入`) 26 | } 27 | else { 28 | console.log(`配置文件写入:${pin}成功`) 29 | user.wskey = cookie 30 | user.verify = '1' 31 | change = 1 32 | } 33 | } 34 | else { 35 | console.log(`配置文件中没有:${pin}账户`) 36 | } 37 | } 38 | } 39 | else { 40 | console.log(`环境变量没有JD_WSCK`) 41 | } 42 | if (change) { 43 | let data = `module.exports = ${JSON.stringify(this.userDict, null, 4)}` 44 | this.modules.fs.writeFile(this.dirname + "/config/jdUser.js", data, function(err, data) { 45 | if (err) { 46 | throw err; 47 | } 48 | console.log("jdUser写入成功") 49 | }) 50 | } 51 | } 52 | } 53 | 54 | module.exports = Main; 55 | -------------------------------------------------------------------------------- /parse/jd/jd_help_goldDump.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东黄金饺助力" 7 | this.cron = "6 6 6 6 6" 8 | this.help = 'main' 9 | this.task = 'local' 10 | this.import = ['jdAlgo', 'logBill', 'jdSign'] 11 | this.verify = 1 12 | this.model = 'shuffle' 13 | this.interval = 2000 14 | } 15 | 16 | async prepare() { 17 | this.algo = new this.modules.jdAlgo({ 18 | version: 'latest', 19 | type: 'main' 20 | }) 21 | this.sign = new this.modules.jdSign() 22 | for (let cookie of this.cookies.help) { 23 | let home = await this.algo.curl({ 24 | 'url': `https://api.m.jd.com/api?functionId=goldDumplingsHome`, 25 | 'form': `functionId=goldDumplingsHome&body={"envType":1,"linkId":"tCWe8wh2f-Lll_RNU1J2_g"}&t=1734509423656&appid=activities_platform&client=ios&clientVersion=13.8.1&loginType=2&loginWQBiz=wegame`, 26 | cookie, 27 | algo: { 28 | appId: 'bdf7a' 29 | } 30 | } 31 | ) 32 | if (this.haskey(home, 'data.inviter')) { 33 | this.shareCode.push({ 34 | inviter: home.data.inviter, 35 | user: this.userName(cookie) 36 | }) 37 | } 38 | await this.wait(500) 39 | } 40 | } 41 | 42 | async main(p) { 43 | let cookie = p.cookie; 44 | console.log("正在助力:", p.inviter.user) 45 | let help = await this.algo.curl({ 46 | 'url': `https://api.m.jd.com/api?functionId=goldDumplingsHelp`, 47 | 'form': `functionId=goldDumplingsHelp&body={"envType":1,"linkId":"tCWe8wh2f-Lll_RNU1J2_g","isJdApp":true,"inviter":"${p.inviter.inviter}"}&t=1734530397943&appid=activities_platform&client=ios&clientVersion=13.8.1&loginType=2&loginWQBiz=wegame`, 48 | cookie, 49 | algo: { 50 | appId: '9e491' 51 | } 52 | } 53 | ) 54 | console.log(this.haskey(help, ['data.helpResultMsg', 'data']) || help) 55 | } 56 | } 57 | 58 | module.exports = Main; 59 | -------------------------------------------------------------------------------- /parse/jd/jd_task_backBean.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东购物返豆" 7 | this.cron = "9 9 */3 * *" 8 | this.task = 'local' 9 | this.import = ['jdUrl'] 10 | } 11 | 12 | async main(p) { 13 | let cookie = p.cookie; 14 | let s = await this.curl( 15 | this.modules.jdUrl.app("jingBeanDetail", {"pageSize": 20, "pageNo": 1}, 'post', cookie) 16 | ) 17 | if (this.haskey(s, 'others.jingBeanBackShopping.ballList')) { 18 | for (let i of this.haskey(s, 'others.jingBeanBackShopping.ballList')) { 19 | if (i.beanCount) { 20 | let c = await this.curl(this.modules.jdUrl.app("collectBeans", {"orderIdSet": [i.orderId]}, 'post', cookie) 21 | ) 22 | console.log(c) 23 | if (c.isSuccess) { 24 | this.print(`购物返豆${i.beanCount}`, p.user) 25 | } 26 | } 27 | } 28 | } 29 | else { 30 | console.log("没有获取到购物返豆订单") 31 | } 32 | } 33 | } 34 | 35 | module.exports = Main; 36 | -------------------------------------------------------------------------------- /parse/jd/jd_task_baoxiaoji.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东报销机" 7 | this.cron = "6 6 6 6 6" 8 | this.help = 'main' 9 | this.task = 'local' 10 | this.turn = 2 11 | this.interval = 1000 12 | this.import = ['jdAlgo'] 13 | } 14 | 15 | async prepare() { 16 | this.algo = new this.modules.jdAlgo({ 17 | version: 'latest' 18 | }) 19 | for (let cookie of this.cookies.help) { 20 | let s = await this.algo.curl({ 21 | 'url': `https://api.m.jd.com/api?functionId=fissionHome`, 22 | 'form': `functionId=fissionHome&body={"linkId":"RAXK1uc0RfxJl7dS25LI6g","isJDApp":true,"manual":true,"helpPin":""}&t=1725631688407&appid=activities_platform&client=ios&clientVersion=13.2.6&loginType=2&loginWQBiz=wegame`, 23 | cookie, 24 | algo: { 25 | appId: '973a9' 26 | } 27 | } 28 | ) 29 | if (this.haskey(s, 'code', 600001)) { 30 | s = await this.algo.curl({ 31 | 'url': `https://api.m.jd.com/api?functionId=fissionHome`, 32 | 'form': `functionId=fissionHome&body={"linkId":"RAXK1uc0RfxJl7dS25LI6g","isJDApp":true,"manual":false,"helpPin":""}&t=1725631688407&appid=activities_platform&client=ios&clientVersion=13.2.6&loginType=2&loginWQBiz=wegame`, 33 | cookie, 34 | algo: { 35 | appId: '973a9' 36 | } 37 | } 38 | ) 39 | } 40 | if (this.haskey(s, 'data.sharePin')) { 41 | if (s.data.status != 2) { 42 | this.shareCode.push({ 43 | sharePin: s.data.sharePin, 44 | user: this.userName(cookie) 45 | }) 46 | } 47 | } 48 | } 49 | } 50 | 51 | async main(p) { 52 | let cookie = p.cookie; 53 | if (this.turnCount == 0) { 54 | if (p.inviter.sharePin) { 55 | console.log("正在助力:", p.inviter.user) 56 | let help = await this.algo.curl({ 57 | 'url': `https://api.m.jd.com/api?functionId=fissionHelp`, 58 | 'form': `functionId=fissionHelp&body={"linkId":"RAXK1uc0RfxJl7dS25LI6g","popType":1,"helpPin":"${p.inviter.sharePin}"}&t=1725631709673&appid=activities_platform&client=ios&clientVersion=13.2.6&loginType=2&loginWQBiz=wegame`, 59 | algo: {appId: '36d93'}, 60 | cookie 61 | } 62 | ) 63 | if (this.haskey(help, 'data.helpResult')) { 64 | console.log("助力成功...") 65 | this.complete.push(p.index) 66 | } 67 | else if (this.haskey(help, 'data.failMsg')) { 68 | console.log(help.data.failMsg) 69 | if (help.data.failMsg.includes("完成")) { 70 | this.finish.push(p.number) 71 | } 72 | if (help.data.failMsg.includes("上限")) { 73 | this.complete.push(p.index) 74 | } 75 | } 76 | } 77 | } 78 | else { 79 | console.log("检测红包中....") 80 | let draw = await this.algo.curl({ 81 | 'url': `https://api.m.jd.com/client.action?functionId=comp_data_interact`, 82 | 'form': `appid=baoxiaoji&functionId=comp_data_interact&body={"token":"l27lXwlPDecqlumUHiseM","fnCode":"start","commParams":{"ubbLoc":"bxjzdtask","lid":"0_0_0_0","client":0},"bizParams":{"actLinkId":"KRdHK//8ViutvuQ2DrBqHQ==","bizScene":"hdBxj"}}`, 83 | cookie 84 | } 85 | ) 86 | if (this.haskey(draw, 'data.stagePrizeDtoList.0.rewardDtos.0')) { 87 | for (let i of draw.data.stagePrizeDtoList[0].rewardDtos) { 88 | if (i.hongBaoDataDto) { 89 | this.print(`红包: ${i.hongBaoDataDto.amount}`, p.user) 90 | } 91 | } 92 | } 93 | } 94 | } 95 | } 96 | 97 | module.exports = Main; 98 | -------------------------------------------------------------------------------- /parse/jd/jd_task_beanList.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东当天京豆汇总" 7 | this.cron = "22 22 * * *" 8 | this.task = 'local' 9 | } 10 | 11 | async prepare() { 12 | } 13 | 14 | async main(p) { 15 | let cookie = p.cookie; 16 | let x = this.getDate(this.timestamp, 0, '-') 17 | let r = new RegExp(`${x}`) 18 | let xs = [] 19 | let s = await this.curl({ 20 | 'url': `https://api.m.jd.com/?appid=jd-cphdeveloper-m&functionId=myBean&body={"tenantCode":"jgminise","bizModelCode":6,"bizModeClientType":"WxMiniProgram","externalLoginType":1}&sceneval=2&g_login_type=1&callback=draw_activetemporary&g_tk=610895985&g_ty=ls`, 21 | // 'form':``, 22 | cookie 23 | } 24 | ) 25 | for (let k of this.haskey(s, 'list')) { 26 | if (k.createDate.includes(x)) { 27 | xs.push(k) 28 | } 29 | } 30 | let z = [], f = [] 31 | let d = {} 32 | for (let i of xs) { 33 | d[i.visibleInfo] = d[i.visibleInfo] || { 34 | eventMassage: i.visibleInfo.replace(/参加|店铺活动|-奖励|\[|\]/g, ''), 35 | amount: 0 36 | } 37 | d[i.visibleInfo].amount += parseInt(i.amount) 38 | } 39 | let dict = Object.values(d).sort(function(a, b) { 40 | return b.amount - a.amount 41 | }) 42 | let echo = [`🐹 今日总共收入: ${this.sum(this.column(dict, 'amount').filter(d => d>0)) || 0} 支出: ${this.sum(this.column(dict, 'amount').filter(d => d<0)) || 0}`] 43 | for (let i of dict) { 44 | if (parseInt(i.amount)<0) { 45 | echo.push(`🐶 [${i.amount}] ${i.eventMassage}`) 46 | } 47 | else { 48 | echo.push(`🦁 [${i.amount}] ${i.eventMassage}`) 49 | } 50 | } 51 | if (this.haskey(s,'willExpireNum')) { 52 | echo.push(`🙊 [${s.willExpireNum}] 即将过期`) 53 | } 54 | console.log(echo.join("\n")) 55 | this.notices(echo.join("\n"), p.user, 5) 56 | 57 | } 58 | 59 | async main123(p) { 60 | let cookie = p.cookie; 61 | let x = this.getDate(this.timestamp, 0, '-') 62 | let r = new RegExp(`${x}`) 63 | let xs = [] 64 | for (let i = 1; i<20; i++) { 65 | let params = { 66 | "url": `https://api.m.jd.com/client.action?functionId=getJingBeanBalanceDetail`, 67 | "form": `body=${escape(JSON.stringify({"pageSize": "20", "page": i.toString()}))}&appid=ld`, 68 | 'cookie': p.cookie 69 | } 70 | let s = await this.curl(params) 71 | if (!this.match(r, JSON.stringify(s))) { 72 | break 73 | } 74 | for (let k of s.detailList) { 75 | if (k.date.includes(x)) { 76 | xs.push(k) 77 | } 78 | } 79 | } 80 | let z = [], f = [] 81 | let d = {} 82 | for (let i of xs) { 83 | d[i.eventMassage] = d[i.eventMassage] || { 84 | eventMassage: i.eventMassage.replace(/参加|店铺活动|-奖励|\[|\]/g, ''), 85 | amount: 0 86 | } 87 | d[i.eventMassage].amount += parseInt(i.amount) 88 | } 89 | let dict = Object.values(d).sort(function(a, b) { 90 | return b.amount - a.amount 91 | }) 92 | let echo = [`🐹 今日总共收入: ${this.sum(this.column(dict, 'amount').filter(d => d>0)) || 0} 支出: ${this.sum(this.column(dict, 'amount').filter(d => d<0)) || 0}`] 93 | for (let i of dict) { 94 | if (parseInt(i.amount)<0) { 95 | echo.push(`🐶 [${i.amount}] ${i.eventMassage}`) 96 | } 97 | else { 98 | echo.push(`🦁 [${i.amount}] ${i.eventMassage}`) 99 | } 100 | } 101 | console.log(echo.join("\n")) 102 | this.notices(echo.join("\n"), p.user, 5) 103 | } 104 | } 105 | 106 | module.exports = Main; 107 | -------------------------------------------------------------------------------- /parse/jd/jd_task_chatReward.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东社群红包" 7 | this.cron = `${this.rand(0, 59)} ${this.rand(0, 9)},${this.rand(14, 21)} * * *` 8 | this.import = ['jdAlgo'] 9 | this.task = 'local' 10 | this.interval = 1200 11 | this.hint = { 12 | activityId: "活动id1|id2" 13 | } 14 | this.readme = `如果脚本通知有红包,但是红包列表里面没有,可能是之前已经领取过` 15 | this.verify = 1 16 | } 17 | 18 | async prepare() { 19 | this.algo = new this.modules.jdAlgo({ 20 | appId: "323f1", 21 | type: "main", 22 | version: "latest" 23 | }) 24 | let custom = this.profile.custom || this.profile.activityId 25 | if (custom) { 26 | for (let i of custom.split("|")) { 27 | this.shareCode.push({ 28 | activityId: i 29 | }) 30 | } 31 | } 32 | } 33 | 34 | async main(p) { 35 | let cookie = p.cookie; 36 | let s = await this.curl({ 37 | 'url': `https://api.m.jd.com/client.action?functionId=chatReward_doReward&appid=wechat_activity&client=h5&body={"activityId":"${p.inviter.activityId}"}`, 38 | cookie 39 | } 40 | ) 41 | let reward = await this.algo.curl({ 42 | 'url': `https://api.m.jd.com/client.action?functionId=chatReward_mainPage&appid=wechat_activity&client=h5&body={"activityId":"${p.inviter.activityId}"}`, 43 | cookie 44 | } 45 | ) 46 | if (this.haskey(reward, 'data.rewardInfo.rewardValue')) { 47 | if (reward.data.rewardInfo.rewardType == 1) { 48 | this.print(`红包: ${reward.data.rewardInfo.rewardValue}元`, p.user) 49 | } 50 | else { 51 | console.log(`优惠券: ${reward.data.rewardInfo.rewardValue}元`) 52 | } 53 | } 54 | else { 55 | console.log("什么也没有") 56 | } 57 | } 58 | } 59 | 60 | module.exports = Main; 61 | -------------------------------------------------------------------------------- /parse/jd/jd_task_comment.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东商品自动评价" 7 | this.cron = "54 13 */3 * *" 8 | this.task = 'local' 9 | this.import = ['jdUrl', 'crypto-js', 'fs', 'vm', 'jdAlgo', 'logBill'] 10 | this.hint = { 11 | comment: "评语1|评语2" 12 | } 13 | } 14 | 15 | async prepare() { 16 | this.code = this.profile.custom || this.profile.comment 17 | if (!this.code) { 18 | console.log('没有评语列表,退出执行!') 19 | this.jump = 1 20 | } 21 | else { 22 | this.code = this.code.split("|") 23 | } 24 | this.algo = new this.modules.jdAlgo({ 25 | version: "latest", 26 | type: 'main' 27 | }) 28 | } 29 | 30 | async main(p) { 31 | let cookie = p.cookie; 32 | let s = await this.curl(this.modules.jdUrl.app('getCommentWareList', { 33 | "status": "1", 34 | "planType": "1", 35 | "pageIndex": "1", 36 | "pageSize": "400" 37 | }, 'post', cookie)) 38 | let n = this.haskey(s, 'commentWareListInfo.wait4CommentCount') 39 | let text = [] 40 | if (n) { 41 | console.log(`总共有:${n}个订单未评价`) 42 | let page = Math.ceil(parseInt(n) / 20) 43 | if (parseInt(n) % 10<3 && page>1) { 44 | page = page - 1 45 | } 46 | let q = await this.curl(this.modules.jdUrl.app('getCommentWareList', { 47 | "status": "1", 48 | "planType": "1", 49 | "pageIndex": page.toString(), 50 | "pageSize": "20" 51 | }, 'post', cookie) 52 | ) 53 | if (this.haskey(q, 'commentWareListInfo.commentWareList')) { 54 | let count = parseInt(this.profile.count || 2) 55 | for (let i of q.commentWareListInfo.commentWareList.reverse().splice(0, count)) { 56 | if (i.ahaInfo && !this.profile.ahaComment) { 57 | console.log(`${i.wname}有种草秀活动,跳出自动评价`) 58 | } 59 | else if (i.jingBeanCounts.length && !this.profile.beanComment) { 60 | console.log(`${i.wname}有评价有礼活动,跳出自动评价`) 61 | } 62 | else { 63 | console.log(`正在评论: ${i.wname}`) 64 | let content = this.random(this.code, 1)[0] 65 | let body = await this.body({ 66 | "tenantCode": "jgm", 67 | "bizModeClientType": "M", 68 | "bizModeFramework": "H5", 69 | "appId": "m91d27dbf599dff74", 70 | "token": "3852b12f8c4d869b7ed3e2b3c68c9436", 71 | "uuid": this.uuid(26, 'n'), 72 | "externalLoginType": "2", 73 | "productId": i.wareId, 74 | "orderId": i.orderId, 75 | "score": 5, 76 | "content": content, 77 | "commentTagStr": 1, 78 | "userclient": 21, 79 | "imageJson": "", 80 | "anonymous": 1, 81 | "syncsg": 0, 82 | "scence": 101100000, 83 | "videoid": "", 84 | "URL": "", 85 | }) 86 | let pub = await this.algo.curl({ 87 | 'url': `https://api.m.jd.com/api`, 88 | 'form': `functionId=sendEval&appid=jd-cphdeveloper-m&body=${this.dumps(body)}`, 89 | cookie, 90 | algo: { 91 | appId: 'c397b' 92 | } 93 | } 94 | ) 95 | if (this.haskey(pub, 'errMsg', 'success')) { 96 | this.print(`订单: ${i.orderId} 评价成功`, p.user) 97 | console.log(`开始评价物流服务,等待3秒...`) 98 | await this.wait(3000) 99 | let wuliu = await this.algo.curl({ 100 | 'url': `https://api.m.jd.com/api?body=${this.dumps({ 101 | "tenantCode": "jgm", 102 | "bizModeClientType": "M", 103 | "bizModeFramework": "H5", 104 | "appId": "m91d27dbf599dff74", 105 | "token": "3852b12f8c4d869b7ed3e2b3c68c9436", 106 | "uuid": "23359972496631655993291202", 107 | "externalLoginType": "2", 108 | "pin": p.user, 109 | "userclient": 21, 110 | "orderId": i.orderId, 111 | "otype": "0", 112 | "DSR1": 5, 113 | "DSR2": 5, 114 | "DSR3": 5 115 | })}&appid=jd-cphdeveloper-m&functionId=sendDSR&loginType=2&_=1657256643322&g_login_type=0&callback=jsonpCBKD&g_tk=534892547&g_ty=ls&appCode=msd95910c4`, 116 | cookie, 117 | algo: { 118 | appId: 'c397b' 119 | } 120 | } 121 | ) 122 | if (this.haskey(wuliu, 'errMsg', 'success')) { 123 | this.print(`订单: ${i.orderId} 物流评价成功`, p.user) 124 | } 125 | else { 126 | console.log(`物流评价失败`) 127 | } 128 | } 129 | else { 130 | console.log(`评价失败`) 131 | } 132 | console.log("等待8秒,执行下一次评价...") 133 | await this.wait(8000) 134 | } 135 | } 136 | } 137 | } 138 | else { 139 | console.log(p.user, `没有待评价订单!`) 140 | } 141 | if (text.length) { 142 | this.notices(text.join("\n"), p.user) 143 | } 144 | } 145 | 146 | async body(params) { 147 | delete this.smashUtils 148 | let js = await this.modules.fs.readFileSync(this.dirname + '/static/vendors.683f5a61.js', 'utf-8') 149 | const fnMock = new Function; 150 | const ctx = { 151 | window: {addEventListener: fnMock}, 152 | document: { 153 | addEventListener: fnMock, 154 | removeEventListener: fnMock, 155 | }, 156 | navigator: {userAgent: `okhttp/3.12.1;jdmall;android;version/9.5.4;build/${this.rand(10000, 99999)};screen/1440x3007;os/11;network/wifi;`} 157 | }; 158 | this.modules.vm.createContext(ctx); 159 | this.modules.vm.runInContext(js, ctx); 160 | this.smashUtils = ctx.window.smashUtils; 161 | let random = this.smashUtils.getRandom(8) 162 | let log = this.smashUtils.get_risk_result({ 163 | id: random, 164 | data: { 165 | random 166 | } 167 | }).log; 168 | let b = { 169 | "random": random, 170 | log 171 | } 172 | return {...b, ...params} 173 | } 174 | } 175 | 176 | module.exports = Main; 177 | -------------------------------------------------------------------------------- /parse/jd/jd_task_deliverySign.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东天天领豆" 7 | this.cron = `${this.rand(0, 59)} ${this.rand(6, 22)} * * *` 8 | this.task = 'local' 9 | this.import = ['jdAlgo'] 10 | this.interval = 2000 11 | this.hint = { 12 | activityId: "活动id1|id2" 13 | } 14 | } 15 | 16 | async prepare() { 17 | this.algo = new this.modules.jdAlgo({ 18 | type: "main", 19 | version: "latest" 20 | }) 21 | let code = [2775, 2925] 22 | if (this.profile.custom) { 23 | code = [this.profile.custom] 24 | } 25 | else if (this.profile.activityId) { 26 | code = this.profile.activityId.split("|") 27 | } 28 | for (let activityId of code) { 29 | this.shareCode.push({ 30 | activityId 31 | }) 32 | } 33 | } 34 | 35 | async main(p) { 36 | let cookie = p.cookie; 37 | let home = await this.algo.curl({ 38 | 'url': `https://api.m.jd.com/`, 39 | 'form': `functionId=deliverySign_home&appid=signed_wh5_ihub&body={"activityId":"${p.inviter.activityId}"}&client=apple&clientVersion=13.2.8&d_model=&osVersion=15.1.1`, 40 | cookie, 41 | algo: { 42 | appId: 'e88fd' 43 | } 44 | } 45 | ) 46 | if (this.haskey(home, 'data.result.bubbleList')) { 47 | for (let i of home.data.result.bubbleList) { 48 | if (i.status == 1) { 49 | let sign = await this.algo.curl({ 50 | 'url': `https://api.m.jd.com/`, 51 | 'form': `functionId=deliverySign_sign&appid=signed_wh5_ihub&body={"activityId":"${p.inviter.activityId}"}&client=apple&clientVersion=13.2.8&d_model=&osVersion=15.1.1`, 52 | cookie, 53 | algo: { 54 | appId: 'e88fd' 55 | } 56 | } 57 | ) 58 | if (this.haskey(sign, 'data.result.value')) { 59 | this.print(`京豆: ${sign.data.result.value}`, p.user) 60 | } 61 | else { 62 | console.log(this.haskey(sign, 'data.bizMsg') || sign) 63 | } 64 | let reward = await this.algo.curl({ 65 | 'url': `https://api.m.jd.com/`, 66 | 'form': `functionId=deliverySign_continue_award&appid=signed_wh5_ihub&body={"activityId":"${p.inviter.activityId}"}&client=apple&uuid=674ce0d97511f5ed054c3dc0af093b3b245ab68d&clientVersion=13.2.8&d_model=&osVersion=15.1.1`, 67 | cookie, algo: { 68 | appId: 'e88fd' 69 | } 70 | } 71 | ) 72 | if (this.haskey(reward, 'data.result.value')) { 73 | this.print(`京豆: ${reward.data.result.value}`, p.user) 74 | } 75 | } 76 | else { 77 | console.log("暂不可做:", i.text) 78 | } 79 | } 80 | } 81 | else { 82 | console.log("没有获取到数据...") 83 | } 84 | } 85 | } 86 | 87 | module.exports = Main; 88 | -------------------------------------------------------------------------------- /parse/jd/jd_task_dwapp.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东充值金" 7 | this.cron = `${this.rand(0, 59)} ${this.rand(0, 22)} * * *` 8 | this.task = 'local' 9 | this.interval = 20000 10 | this.import = ['jdAlgo'] 11 | this.hint = { 12 | shell: '1 # 部分用户使用青龙环境无法签到,请在脚本节点添加shell=1' 13 | } 14 | } 15 | 16 | async prepare() { 17 | this.algo = new this.modules.jdAlgo({ 18 | version: 'latest' 19 | }) 20 | } 21 | 22 | async main(p) { 23 | let cookie = p.cookie; 24 | let list = await this.curl({ 25 | 'url': `https://api.m.jd.com/api?functionId=dwapp_task_dwList`, 26 | 'form': `appid=h5-sep&body=${this.dumps(await this.cmd5x())}&client=m&clientVersion=6.0.0`, 27 | cookie 28 | } 29 | ) 30 | let cash = 0 31 | for (let i of this.haskey(list, 'data') || []) { 32 | if (i.viewStatus == 3 || i.viewStatus == 1) { 33 | console.log("任务完成:", i.name) 34 | } 35 | else { 36 | console.log("正在运行:", i.name) 37 | let record = await this.curl({ 38 | 'url': `https://dwapp.jd.com/user/task/dwRecord`, 39 | 'json': await this.cmd5x({ 40 | "id": i.id, 41 | "taskType": i.taskType, 42 | "agentNum": "m", 43 | "followChannelStatus": "", 44 | taskFlowChannelId: i.taskFlowChannelId 45 | }), 46 | cookie 47 | } 48 | ) 49 | // console.log(record) 50 | await this.wait(2000) 51 | let receive = await this.curl({ 52 | 'url': `https://dwapp.jd.com/user/task/dwReceive`, 53 | 'json': await this.cmd5x({ 54 | "id": i.id, 55 | }), 56 | cookie 57 | } 58 | ) 59 | if (this.haskey(receive, 'data.giveScoreNum')) { 60 | console.log("获得充值金:", receive.data.giveScoreNum) 61 | cash += receive.data.giveScoreNum 62 | } 63 | else { 64 | console.log(receive) 65 | } 66 | await this.wait(1000) 67 | } 68 | } 69 | if (this.profile.shell) { 70 | let {execSync} = require('child_process'); 71 | let proxy = this.proxy || this.options.proxy 72 | let proxyText = proxy ? ` -x ${proxy} ` : '' 73 | let s2 = await this.algo.h5st({ 74 | 'url': `https://api.m.jd.com/api`, 75 | form: `appid=h5-sep&body=${this.dumps(await this.cmd5x())}&client=m&clientVersion=6.0.0&functionId=DATAWALLET_USER_SIGN`, 76 | cookie, 77 | algo: { 78 | appId: '60d0e' 79 | }, 80 | referer: 'https://prodev.m.jd.com/mall/active/eEcYM32eezJB7YX4SBihziJCiGV/index.html', 81 | } 82 | ) 83 | var exec = `curl -s ${proxyText}-H 'Accept: application/json, text/plain, */*' -H 'referer: ${s2.headers.referer}' -H 'user-agent: ${s2.headers['user-agent']}' -H 'cookie: ${cookie}' -H 'host: api.m.jd.com' --data "${s2.form}" --compressed 'https://api.m.jd.com/api'` 84 | let output = execSync(exec); 85 | var sign = this.jsonParse(output.toString()) 86 | } 87 | else { 88 | var sign = await this.algo.curl({ 89 | 'url': `https://api.m.jd.com/api`, 90 | form: `appid=h5-sep&body=${this.dumps(await this.cmd5x())}&client=m&clientVersion=6.0.0&functionId=DATAWALLET_USER_SIGN`, 91 | cookie, 92 | algo: { 93 | appId: '60d0e' 94 | }, 95 | referer: 'https://mypoint.jd.com/' 96 | } 97 | ) 98 | } 99 | console.log(sign) 100 | let totalNum = 0 101 | if (this.haskey(sign, 'data.signInfo.signNum')) { 102 | cash += sign.data.signInfo.signNum 103 | totalNum = sign.data.totalNum 104 | } 105 | else { 106 | if (sign) { 107 | if (sign.code == 302) { 108 | console.log('签到过了...') 109 | } 110 | else { 111 | console.log(sign) 112 | } 113 | } 114 | else { 115 | console.log("没有获取到数据...") 116 | } 117 | } 118 | if (cash>0) { 119 | if (totalNum) { 120 | this.print(`现有: ${totalNum} 获得: ${cash.toFixed(2)}`, p.user) 121 | } 122 | else { 123 | this.print(`获得充值金: ${cash.toFixed(2)}`, p.user) 124 | } 125 | } 126 | } 127 | 128 | async cmd5x(params = {}) { 129 | let p = Object.assign(params, { 130 | t: new Date().getTime() 131 | }) 132 | let str = p.id || '' 133 | if (p.taskType) { 134 | str = `${str}${p.taskType}` 135 | } 136 | p.encStr = this.md5(`${str}${p.t}e9c398ffcb2d4824b4d0a703e38yffdd`) 137 | return p 138 | } 139 | } 140 | 141 | module.exports = Main; 142 | -------------------------------------------------------------------------------- /parse/jd/jd_task_fission.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东互动助力活动" 7 | this.cron = "6 6 6 6 6" 8 | this.help = 'main' 9 | this.task = 'local' 10 | this.model = 'shuffle' 11 | this.verify = 1 12 | this.import = ['jdAlgo'] 13 | this.hint = { 14 | linkId: '活动id,非链接id' 15 | } 16 | } 17 | 18 | async prepare() { 19 | this.algo = new this.modules.jdAlgo({ 20 | version: 'latest' 21 | }) 22 | this.linkId = this.custom || this.profile.linkId || 'PtBSe7lNfzviUeBFFxVMaw' 23 | for (let cookie of this.cookies.help) { 24 | let s = await this.algo.curl({ 25 | 'url': `https://api.m.jd.com/api?functionId=fissionHome`, 26 | 'form': `functionId=fissionHome&body={"linkId":"${this.linkId}","isJDApp":true,"manual":true,"helpPin":""}&t=1725631688407&appid=activities_platform&client=ios&clientVersion=13.2.6&loginType=2&loginWQBiz=wegame`, 27 | cookie, 28 | algo: { 29 | appId: '973a9' 30 | } 31 | } 32 | ) 33 | if (this.haskey(s, 'code', 600001)) { 34 | s = await this.algo.curl({ 35 | 'url': `https://api.m.jd.com/api?functionId=fissionHome`, 36 | 'form': `functionId=fissionHome&body={"linkId":"${this.linkId}","isJDApp":true,"manual":false,"helpPin":""}&t=1725631688407&appid=activities_platform&client=ios&clientVersion=13.2.6&loginType=2&loginWQBiz=wegame`, 37 | cookie, 38 | algo: { 39 | appId: '973a9' 40 | } 41 | } 42 | ) 43 | } 44 | if (this.haskey(s, 'data.sharePin')) { 45 | if (s.data.status != 2) { 46 | this.shareCode.push({ 47 | sharePin: s.data.sharePin, 48 | user: this.userName(cookie) 49 | }) 50 | } 51 | } 52 | } 53 | } 54 | 55 | async main(p) { 56 | let cookie = p.cookie; 57 | console.log("正在助力:", p.inviter.user) 58 | let help = await this.algo.curl({ 59 | 'url': `https://api.m.jd.com/api?functionId=fissionHelp`, 60 | 'form': `functionId=fissionHelp&body={"linkId":"${this.linkId}","popType":1,"helpPin":"${p.inviter.sharePin}"}&t=1725631709673&appid=activities_platform&client=ios&clientVersion=13.2.6&loginType=2&loginWQBiz=wegame`, 61 | algo: {appId: '36d93'}, 62 | cookie 63 | } 64 | ) 65 | if (this.haskey(help, 'data.helpResult')) { 66 | console.log("助力成功...") 67 | this.complete.push(p.index) 68 | } 69 | else if (this.haskey(help, 'data.failMsg')) { 70 | console.log(help.data.failMsg) 71 | if (help.data.failMsg.includes("完成")) { 72 | this.finish.push(p.number) 73 | } 74 | if (help.data.failMsg.includes("上限")) { 75 | this.complete.push(p.index) 76 | } 77 | } 78 | } 79 | } 80 | 81 | module.exports = Main; 82 | -------------------------------------------------------------------------------- /parse/jd/jd_task_global.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东国际" 7 | this.cron = `${this.rand(0, 59)} ${this.rand(0, 22)} * * *` 8 | this.readme = `此活动需要验证sign,需要自己docker部署sign算法\n然后添加全局变量:QITOQITO_JDSIGN=sign路径` 9 | this.import = ['jdSign'] 10 | this.delay = 1000 11 | this.interval = 5000 12 | } 13 | 14 | async prepare() { 15 | this.sign = new this.modules.jdSign() 16 | if (!this.sign.access) { 17 | console.log(`此活动需要验证sign,需要自己docker部署sign算法\n然后添加全局变量:QITOQITO_JDSIGN=signUrl路径\n如果已经部署过 JD_SIGN_API, JD_SIGN_KRAPI 应该能正常使用`) 18 | this.jump = 1 19 | } 20 | let awardId = 83596858 21 | let taskId = null 22 | let signId = 83596856 23 | let layout = await this.sign.jdCurl({ 24 | 'url': `https://api.m.jd.com/client.action?functionId=queryLayout`, 25 | 'form': `avifSupport=1&body={"beginTime":"","applicationId":"11"}&build=169370&client=apple&clientVersion=13.1.0&d_brand=apple`, 26 | } 27 | ) 28 | for (let i of this.haskey(layout, 'result.navigationPage.tabPage.floors')) { 29 | if (i.floorType == "BROWSE_AWARDS_WIDGET") { 30 | awardId = i.floorId 31 | } 32 | if (i.floorType == "TASK_FLOAT") { 33 | taskId = i.floorId 34 | } 35 | if (i.floorType == "SIGN_IN_GAME_WIDGET") { 36 | signId = i.floorId 37 | } 38 | } 39 | this.dict = { 40 | awardId, 41 | taskId, 42 | signId 43 | } 44 | } 45 | 46 | async main(p) { 47 | let cookie = p.cookie; 48 | let salt = this.globalSalt 49 | let pin = this.userPin(p.cookie) 50 | let enc1 = this.md5("apple" + pin + "taskRun" + salt) 51 | let enc2 = this.md5("apple" + pin + "receiveReward" + salt) 52 | let enc3 = this.md5("apple" + pin + "signInWithPrize" + salt) 53 | let token = `${new Date().getTime()}1` 54 | let enc4 = this.md5("apple" + pin + "globalTask" + salt + token) 55 | let sign = await this.sign.jdCurl({ 56 | 'url': `https://api.m.jd.com/client.action?functionId=signInWithPrize`, 57 | 'form': `body={"floorId":"${this.dict.signId}","timestamp":"${enc3}"}&build=169063&client=apple&clientVersion=12.3.4&&functionId=signInWithPrize`, 58 | cookie 59 | } 60 | ) 61 | if ((this.haskey(sign, 'result.signInText') || '').includes('关注')) { 62 | let follow = await this.sign.jdCurl({ 63 | 'url': `https://api.m.jd.com/client.action?functionId=userFollow`, 64 | 'form': `body={"businessId":"1","type":"1","themeId":"331","uuid":""}&build=169076&client=apple&clientVersion=12.3.4&functionId=userFollow`, 65 | cookie 66 | } 67 | ) 68 | sign = await this.sign.jdCurl({ 69 | 'url': `https://api.m.jd.com/client.action?functionId=signInWithPrize`, 70 | 'form': `body={"floorId":"${this.dict.signId}","timestamp":"${enc3}"}&build=169063&client=apple&clientVersion=12.3.4&&functionId=signInWithPrize`, 71 | cookie 72 | } 73 | ) 74 | } 75 | if (this.haskey(sign, 'result.beanCount')) { 76 | this.print(`获得签到京豆${sign.result.beanCount}`, p.user) 77 | } 78 | else { 79 | console.log('签到:', this.haskey(sign, 'result.signInText') || sign) 80 | } 81 | // if (taskId) { 82 | let list = await this.sign.jdCurl({ 83 | 'url': `https://api.m.jd.com/client.action?functionId=globalMainList`, 84 | 'form': `avifSupport=0&body={"floorId":"83596864"}&build=169381&client=apple&clientVersion=13.1.1`, 85 | cookie 86 | } 87 | ) 88 | for (let i of this.haskey(list, 'result.datas')) { 89 | if (i.status == '1') { 90 | console.log("任务已完成:", i.name) 91 | } 92 | else { 93 | for (let j of this.haskey(i, 'items')) { 94 | if (j.status == '1') { 95 | console.log("任务已完成:", j.name) 96 | } 97 | else { 98 | console.log("正在浏览:", j.name) 99 | for (let _ of Array(j.totalTimes - j.currentTimes)) { 100 | if (j.name.includes("商品")) { 101 | var s = await this.sign.jdCurl({ 102 | 'url': `https://api.m.jd.com/client.action?functionId=globalTask`, 103 | 'form': `avifSupport=0&body={"timestamp":"${enc4}","taskId":"${j.taskId}","type":"${j.type}","token":"${token}","floorId":"83596864","skuId":"${this.rand(3333333, 3336666)}"}&build=169381&client=apple&clientVersion=13.1.1`, 104 | cookie 105 | } 106 | ) 107 | } 108 | else { 109 | var s = await this.sign.jdCurl({ 110 | 'url': `https://api.m.jd.com/client.action?functionId=globalTask`, 111 | 'form': `avifSupport=0&body={"timestamp":"${enc4}","taskId":"${j.taskId}","type":"${j.type}","token":"${token}","floorId":"83596864"}&build=169381&client=apple&clientVersion=13.1.1`, 112 | cookie 113 | } 114 | ) 115 | } 116 | console.log("正在完成:", this.haskey(s, 'result.currentTimes')) 117 | let msg = this.haskey(s, 'result.msg') || '' 118 | if (msg.includes('京豆')) { 119 | this.print(msg, p.user) 120 | } 121 | if (this.haskey(s, 'code', '-1')) { 122 | console.log(s.errorMsg) 123 | break 124 | } 125 | await this.wait(3000) 126 | } 127 | } 128 | } 129 | } 130 | } 131 | // } 132 | for (let i of Array(8)) { 133 | let t = await this.sign.jdCurl({ 134 | 'url': `https://api.m.jd.com/client.action?functionId=taskRun`, 135 | 'form': `body={"floatId":"${this.dict.awardId}","timestamp":"${enc1}"}&build=169063&client=apple&clientVersion=12.3.4&functionId=taskRun`, 136 | cookie 137 | } 138 | ) 139 | console.log(this.haskey(t, 'result.msg') || t) 140 | if (this.haskey(t, 'result.code') == '0') { 141 | await this.wait(2000) 142 | let r = await this.sign.jdCurl({ 143 | 'url': `https://api.m.jd.com/client.action?functionId=receiveReward`, 144 | 'form': `body={"floatId":"${this.dict.awardId}","timestamp":"${enc2}"}&build=169063&client=apple&clientVersion=12.3.4&functionId=receiveReward`, 145 | cookie 146 | } 147 | ) 148 | if (this.haskey(r, 'result.code') == '0' && r.result.msg.includes("获得")) { 149 | this.print(r.result.msg, p.user) 150 | } 151 | else { 152 | console.log(this.haskey(r, 'result.msg') || r) 153 | } 154 | await this.wait(15000) 155 | } 156 | else { 157 | console.log(this.haskey(t, 'result.msg') || t) 158 | break 159 | } 160 | } 161 | } 162 | } 163 | 164 | module.exports = Main; 165 | -------------------------------------------------------------------------------- /parse/jd/jd_task_hall.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东特物超级殿堂" 7 | this.cron = `${this.rand(0, 59)} ${this.rand(0, 22)} * * *` 8 | this.help = 'main' 9 | this.task = 'local' 10 | this.import = ['jdAlgo'] 11 | this.verify = 1 12 | } 13 | 14 | async prepare() { 15 | this.algo = new this.modules.jdAlgo({ 16 | appId: "8adfb", 17 | type: 'lite', 18 | }) 19 | let ee = await this.curl({ 20 | 'url': `https://api.m.jd.com/?client=wh5&appid=ProductZ4Brand&functionId=superBrandSecondFloorMainPage&t=${this.timestamp}&body={"source":"hall_1111"}`, 21 | }) 22 | let ide = this.haskey(ee, 'data.result.activityBaseInfo.activityId') 23 | if (ide) { 24 | this.shareCode.push({ 25 | activityId: ide, 26 | source: "hall_1111" 27 | }) 28 | } 29 | } 30 | 31 | async main(p) { 32 | let cookie = p.cookie; 33 | let source = p.inviter.source 34 | let activityId = p.inviter.activityId 35 | let tt = await this.curl({ 36 | 'url': `https://api.m.jd.com/?client=wh5&appid=ProductZ4Brand&functionId=superBrandSecondFloorMainPage&t=${this.timestamp}&body={"source":"${source}","activityId":${activityId}}`, 37 | cookie 38 | } 39 | ) 40 | if (tt.data.bizCode == '0') { 41 | let encryptProjectId = tt.data.result.activityBaseInfo.encryptProjectId 42 | let url = `https://api.m.jd.com/?client=wh5&appid=ProductZ4Brand&functionId=superBrandTaskList&t=${this.timestamp}&body={"source":"${source}","activityId":${activityId}}` 43 | let l = await this.curl({ 44 | 'url': url, 45 | cookie, 46 | } 47 | ) 48 | for (let i of this.haskey(l, 'data.result.taskList')) { 49 | try { 50 | if (i.assignmentName.includes('惊喜领豆')) { 51 | if (i.assignmentTimesLimit != i.completionCnt) { 52 | console.log("正在运行:", tt.data.result.activityBaseInfo.activityName) 53 | let ss = await this.curl({ 54 | 'url': `https://api.m.jd.com/api?client=wh5&appid=ProductZ4Brand&functionId=superBrandDoTask&t=${this.timestamp}&body={"source":"${source}","activityId":${activityId},"completionFlag":1,"encryptProjectId":"${encryptProjectId}","encryptAssignmentId":"${i.encryptAssignmentId}","assignmentType":${i.assignmentType},"actionType":0,"itemId":""}`, 55 | cookie 56 | } 57 | ) 58 | if (ss.data.result.rewards && ss.data.result.rewards != 'null') { 59 | for (let r of ss.data.result.rewards) { 60 | if (r.awardName.includes('京豆')) { 61 | this.print(`获得${r.beanNum}京豆`, p.user) 62 | } 63 | } 64 | } 65 | } 66 | else { 67 | console.log('已领取过任务', activityId) 68 | } 69 | } 70 | } catch (e) { 71 | console.log("err", e) 72 | } 73 | } 74 | } 75 | } 76 | } 77 | 78 | module.exports = Main; 79 | -------------------------------------------------------------------------------- /parse/jd/jd_task_hby.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东红包雨" 7 | this.cron = "6 6 6 6 6" 8 | this.task = 'local' 9 | this.verify = 1 10 | this.readme = "custom=红包雨url或body" 11 | this.import = ['jdUrl'] 12 | } 13 | 14 | async prepare() { 15 | if (isNaN(this.custom)) { 16 | try { 17 | this.shareCode = [this.loads(this.custom)] 18 | } catch { 19 | let url 20 | if (this.match(/^http/, this.custom)) { 21 | url = this.custom 22 | } 23 | else { 24 | url = `https://prodev.m.jd.com/mall/active/${this.custom}/index.html` 25 | } 26 | let s = await this.curl({ 27 | 'url': url, 28 | } 29 | ) 30 | let babelProjectId = this.match(/"activityId"\s*:\s*"(\d+)"/, s) 31 | let babelPageId = this.match(/"pageId"\s*:\s*"(\d+)"/, s) 32 | let activityNo = this.match(/"promoId"\s*:\s*"(\w+)"/, s) 33 | if (babelPageId && babelProjectId) { 34 | this.shareCode.push({babelProjectId, babelPageId, activityNo}) 35 | } 36 | } 37 | } 38 | } 39 | 40 | async main(p) { 41 | let cookie = p.cookie 42 | for (let i of Array(2)) { 43 | let s = await this.curl({ 44 | 'url': `https://api.m.jd.com/client.action`, 45 | 'form': `functionId=hby_lottery&appid=publicUseApi&body=${this.dumps(p.inviter)}&t=${this.timestamp}&client=wh5&clientVersion=1.0.0&networkType=&ext={"prstate":"0"}`, 46 | cookie 47 | } 48 | ) 49 | try { 50 | this.print(`获得红包: ${s.data.result.hbInfo.discount}元`, p.user) 51 | } catch (e) { 52 | console.log(this.haskey(s, 'data.bizMsg') || "没有获得红包") 53 | } 54 | if (this.haskey(s, 'data.result.sceneId') && this.haskey(s, 'data.result.share')) { 55 | let share = await this.curl({ 56 | 'url': `https://api.m.jd.com/client.action`, 57 | 'form': `functionId=hby_share&appid=publicUseApi&body={"sceneId":"${this.haskey(s, 'data.result.sceneId')}","activityNo":"${p.inviter.activityNo}"}&t=${this.timestamp}&client=wh5&clientVersion=1.0.0&&networkType=&ext={"prstate":"0"}`, 58 | cookie 59 | } 60 | ) 61 | } 62 | else { 63 | break 64 | } 65 | } 66 | } 67 | } 68 | 69 | module.exports = Main; 70 | -------------------------------------------------------------------------------- /parse/jd/jd_task_healthy.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东健康" 7 | this.cron = `${this.rand(0, 59)} ${this.rand(0, 22)} * * *` 8 | this.task = 'local' 9 | this.import = ['jdSign'] 10 | this.readme = `此活动需要验证sign,需要自己docker部署sign算法\n只做京豆任务` 11 | this.interval = 6000 12 | } 13 | 14 | async prepare() { 15 | this.sign = new this.modules.jdSign() 16 | } 17 | 18 | async main(p) { 19 | let cookie = p.cookie; 20 | var bean = 0 21 | let gift = function(a) { 22 | for (let i of this.haskey(a, 'result.result.prizeInfovos')) { 23 | if (i.prizeType == 2) { 24 | bean += parseInt(i.awardId) 25 | console.log(`获得京豆:`, i.awardId) 26 | } 27 | else if (i.prizeType == 14) { 28 | console.log("获得健康值:", i.awardId) 29 | } 30 | } 31 | } 32 | for (let i of Array(3)) { 33 | var headers = { 34 | referer: 'https://jd.com', 35 | 'j-e-c': `%7B%22ciphertype%22:5,%22cipher%22:%7B%22pin%22:%22awHpZXZ1JQrEHW9uHvvB%22%7D,%22ts%22:${parseInt(new Date().getTime() / 1000)},%22hdid%22:%22JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=%22,%22version%22:%221.0.3%22,%22appname%22:%22com.360buy.jdmobile%22,%22ridx%22:-1%7D`, 36 | jdgs: `{"b1":"${this.uuid(8)}-${this.uuid(4)}-${this.uuid(4)}-${this.uuid(4)}-${this.uuid(12)}","b2":"2.1.6_1","b3":"2.0","b4":"","b5":"${this.sha1(p.cookie)}","b7":"${new Date().getTime().toString()}","b6":"${this.sha1(p.user)}"}"}` 37 | } 38 | var h = await this.sign.jdCurl({ 39 | 'url': `https://api.m.jd.com/client.action`, 40 | 'form': `body={"osName":"buyMedicine","channel":"jdapp","methodName":"getKitTask2727","groupCode":"openkits","m_patch_appKey":"231282000001","imei":"OOLPCJFL","wrapResult":true,"appId":"2d0050d8877d4065b6227fb9fdcc01bb","version":12,"location":{"district":"1234","town":"56789","province":"16","city":"1234"}}&build=169227&client=apple&clientVersion=12.6.2&functionId=jdh_laputa_handleSoaRequest_reinforce`, 41 | cookie, 42 | headers 43 | } 44 | ) 45 | if (this.haskey(h, 'data.result.encodeId')) { 46 | break 47 | } 48 | await this.wait(1000) 49 | } 50 | let encodeId = this.haskey(h, 'data.result.encodeId') 51 | if (!encodeId) { 52 | console.log("没有获取到数据...") 53 | return 54 | } 55 | let res = h.data.result 56 | // console.log(res.status) 57 | if (res.status) { 58 | let sign = await this.sign.jdCurl({ 59 | 'url': `https://api.m.jd.com/client.action`, 60 | 'form': `body={"infoId":"jdhHome_task","appKey":"231282000001","channel":"jdapp","encodeId":"${encodeId}","imei":"OKFCDBBG","location":{"district":"55674","town":"","province":"1","city":"72"},"wrapResult":true}&build=169227&client=apple&clientVersion=12.6.2&functionId=jdh_msoa_doTaskGw`, 61 | cookie, headers 62 | } 63 | ) 64 | if (this.haskey(sign, 'result.result.signType')) { 65 | gift.call(this, sign) 66 | } 67 | else { 68 | console.log(sign) 69 | } 70 | } 71 | // console.log(encodeId) 72 | let list = await this.sign.jdCurl({ 73 | 'url': `https://api.m.jd.com/client.action?functionId=jdh_laputa_handleSoaRequest_reinforce`, 74 | 'form': `body={"osName":"buyMedicine","appKey":"231282000001","methodName":"queryTaskList2998","channel":"jdapp","imei":"OOLPCJFL","location":{"district":"1234","town":"45678","province":"16","city":"1234"},"wrapResult":true,"appId":"2d0050d8877d4065b6227fb9fdcc01bb","version":12}&build=169227&client=apple&clientVersion=12.6.2&functionId=jdh_laputa_handleSoaRequest_reinforce`, 75 | cookie, 76 | headers 77 | } 78 | ) 79 | for (let i of this.haskey(list, 'data.result')) { 80 | if (i.groupName == '每日任务') { 81 | for (let j of i.taskVoList) { 82 | if (j.status == 4) { 83 | console.log("任务完成:", j.mainTitle) 84 | } 85 | else { 86 | console.log("正在浏览:", j.mainTitle) 87 | // console.log(j) 88 | if (j.status == 1) { 89 | let d = await this.sign.jdCurl({ 90 | 'url': `https://api.m.jd.com/client.action`, 91 | 'form': `body={"osName":"buyMedicine","infoId":"jdhHome_task","methodName":"doTask2745","encodeId":"${j.encodeId}","appKey":"231282000001","channel":"jdapp","wrapResult":true,"appId":"2d0050d8877d4065b6227fb9fdcc01bb","version":12,"imei":"OOLPCJFL","location":{"district":"1234","town":"45678","province":"16","city":"1234"}}&build=169227&client=apple&clientVersion=12.6.2&functionId=jdh_msoa_doTaskGw`, 92 | cookie, 93 | headers 94 | } 95 | ) 96 | console.log(this.haskey(d, 'result.result') || d) 97 | await this.wait(5000) 98 | } 99 | let r = await this.sign.jdCurl({ 100 | 'url': `https://api.m.jd.com/client.action`, 101 | 'form': `body={"osName":"buyMedicine","version":12,"wrapResult":true,"methodName":"sendAward2999","queryToken":"${j.queryToken}","appId":"2d0050d8877d4065b6227fb9fdcc01bb","infoId":"jdhHome_task","activityId":8542,"channel":"jdapp","location":{"district":"1234","town":"45678","province":"16","city":"1234"},"imei":"OOLPCJFL","taskId":${j.id},"appKey":"231282000001"}&build=169227&client=apple&clientVersion=12.6.2&functionId=jdh_msoa_sendAwardGw`, 102 | cookie, 103 | headers 104 | } 105 | ) 106 | gift.call(this, r) 107 | await this.wait(1000) 108 | } 109 | } 110 | } 111 | } 112 | if (bean>0) { 113 | this.print(`京豆: ${bean}`, p.user) 114 | } 115 | } 116 | } 117 | 118 | module.exports = Main; 119 | -------------------------------------------------------------------------------- /parse/jd/jd_task_hongbaoyu.js: -------------------------------------------------------------------------------- 1 | const Template = require('../../template'); 2 | 3 | class Main extends Template { 4 | constructor() { 5 | super() 6 | this.title = "京东超市红包雨" 7 | this.cron = "6 6 6 6 6" 8 | this.help = 'main' 9 | this.task = 'local' 10 | this.verify = 1 11 | this.import = ['jdAlgo', 'jdUrl'] 12 | this.hint = {'projectId': '红包雨ID'} 13 | } 14 | 15 | async prepare() { 16 | this.algo = new this.modules.jdAlgo() 17 | this.algo.set({ 18 | 'appId': '16073', 19 | 'type': 'web', 20 | "version": "3.0", 21 | }) 22 | let projectId = this.profile.projectId || '119456175536671809' 23 | for (let cookie of this.cookies.help) { 24 | let s = await this.algo.curl({ 25 | 'url': `https://api.m.jd.com/api?appid=hongbaoyu&functionId=redRainInitProjectScene&body={"projectId":"${projectId}"}`, 26 | cookie, 27 | algo: { 28 | 'appId': 'c18e1', 29 | 'type': 'web', 30 | "version": "3.0", 31 | } 32 | } 33 | ) 34 | if (this.haskey(s, 'data.activityList.0.activityId')) { 35 | for (let i of s.data.activityList) { 36 | let time = this.timestamp / 1000 37 | if (i.startTime