diff --git a/script/magicjs/images/qinglong.png b/script/magicjs/images/qinglong.png index e064a89ec..20c1443e1 100644 Binary files a/script/magicjs/images/qinglong.png and b/script/magicjs/images/qinglong.png differ diff --git a/script/magicjs/images/qinglong_dark.png b/script/magicjs/images/qinglong_dark.png index 05fddfe7a..10411217a 100644 Binary files a/script/magicjs/images/qinglong_dark.png and b/script/magicjs/images/qinglong_dark.png differ diff --git a/script/smzdm/README.md b/script/smzdm/README.md index d9ff862cc..f0209e641 100644 --- a/script/smzdm/README.md +++ b/script/smzdm/README.md @@ -1,30 +1,25 @@ -# 什么值得买 - -## 特别说明 - -什么值得买执行任务时,对每次任务的时间间隔有一定的要求,过短的时间间隔可能会没有任何奖励。如果在短时间内并行发起大量请求的话,严重的情况会导致账号异常,需要修改密码。所以在每次执行任务时,都加入了3秒的休眠时间,这会导致脚本的执行时间需要非常长,差不多1分钟左右。请把脚本超时时间设置到最长,建议2分钟以上,以免因为超时被强制中断。 - -2021年1月18日 - -实测会引起账号异常,无法参与幸运屋抽奖,其他功能暂未发现异常,不在意抽奖的可以继续使用,在意抽奖的请谨慎考虑。**目前将签到和任务拆分为两个脚本,仅需要签到使用signin脚本即可。** - -## 最近更新 - -2020年12月22日: - -适配最新的个人中心返回Html格式。 - -去除威望显示,现在获取不到威望这个属性了。 - -去除完成点击“去购买”的任务的功能,现在只能在APP端操作才有经验。现在每日经验约有40左右。什么值得买官方完全有办法封禁所有的Web端完成任务功能,现在还能执行部分任务纯属官方放水,且用且珍惜吧,不保证哪一天就没办法通过脚本完成任务了。 +# 🧸什么值得买 ## 签到与每日任务 -什么值得买Web端和App端每日自动签到脚本,并且完成每日点击去购买10次、点值5次、点赞5次、收藏5次的任务。 +什么值得买签到和任务脚本,每日完成Web端签到、抽奖一次,收藏文章7次。 -执行效果如下,会显示昵称、级别、经验值变动总数、经验值变动明细、任务完成情况。 +## 特别说明 -![](https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/images/01.png) +### 脚本执行时间 + +什么值得买执行任务时,对每次任务的时间间隔有一定的要求,过短的时间间隔可能会没有任何奖励。如果在短时间内并行发起大量请求的话,严重的情况会导致账号异常,需要修改密码。所以在每次执行任务时,都加入休眠时间,这会导致脚本的执行时间需要非常长。请把脚本超时时间设置到最长,建议2分钟以上,以免因为超时被强制中断。 + +### 账号异常 + +可能会引起账号异常,无法参与幸运屋抽奖,其他功能暂未发现异常,不在意抽奖的可以继续使用,在意抽奖的请谨慎考虑。 + +## 最近更新 + +2022年9月8日 + +1. 合并签到和任务脚本,可以在BoxJS中关闭 +2. 增加多账号签到和任务功能 ### 配置说明 @@ -32,43 +27,55 @@ ##### **安装模块** -Surge推荐使用模块进行部署,模块地址:https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_signin.sgmodule +```ini +https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_daily.sgmodule +``` ### Loon -**远程脚本** - -直接在配置里修改 +安装插件 ```ini -[Remote Script] -https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_signin.lnscript, tag=什么值得买_每日签到, enabled=true +https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_daily.lnplugin ``` ### Quantumult X -远程复写配置 +配置重写 ```ini [rewrite_remote] -https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_signin.qxrewrite, tag=什么值得买_获取Cookie, update-interval=86400, opt-parser=false, enabled=true +https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_daily.qxrewrite, tag=什么值得买_获取Cookie, update-interval=86400, opt-parser=false, enabled=true [task_local] -5 0 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_signin.js, tag=什么值得买每日签到 +5 0 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_daily.js, tag=什么值得买每日签到 ``` -### 使用说明 +## 获取Cookies -#### **Web端获取Cookie:** +**使用Safari,不要使用第三方浏览器!** -使用Safari,不要使用第三方浏览器! - -使用手机浏览器访问 https://zhiyou.smzdm.com/ 进行一次登录,通常会显示获取cookie成功。 +使用Safari访问 https://zhiyou.smzdm.com/ 进行一次登录,通常会显示获取Cookie成功。 可能因为重定向的问题,登录成功后访问的不是https://zhiyou.smzdm.com/user/ ,则重新在浏览器中访问一次https://zhiyou.smzdm.com/user/ 即可。 如果还是没有获取到Cookie,请查阅Surge等第三方App的执行日志。 +### 多账号获取Cookies + +使用浏览器的无痕模式、隐身模式等功能实现不同账号的登录和切换。 + +## 脚本变量 + +| 名称 | 类型 | 说明 | +| ------------------- | ---- | --------------------------------- | +| smzdm_cookie | Json | 存储什么值得买Cookies | +| smzdm_cookie_id | Json | 辅助判断什么值得买Cookies是否变化 | +| smzdm_signin | Bool | 是否打开什么值得买签到 | +| smzdm_mission | Bool | 是否打开什么值得买每日任务 | +| smzdm_lottery | Bool | 是否打开什么值得买每日抽奖 | +| smzdm_sync_qinglong | Bool | 是否同步Cookies至青龙面板 | + ## 去广告 去除什么值得买首页、好价、好文内的广告 @@ -77,95 +84,26 @@ https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smz #### Surge -##### 配置文件 - -在配置文件中修改。 +使用模块 ```ini -[MITM] -hostname = homepage-api.smzdm.com, haojia-api.smzdm.com, article-api.smzdm.com - -[Script] -什么值得买_首页去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https:\/\/homepage-api.smzdm.com\/home,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.js -什么值得买_好价去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https:\/\/haojia-api.smzdm.com\/home\/list,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.js -什么值得买_好文去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https:\/\/article-api.smzdm.com\/article\/index_home_page,script-path=https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.js + https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.sgmodule ``` -##### 模块安装 - -模块地址: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.sgmodule - ### Loon -**远程脚本** +使用插件 ```ini -[Remote Script] -https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.lnscript, tag=什么值得买_去广告, enabled=true +https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.lnplugin ``` ### Quantumult X -**远程复写脚本** +配置重写 ```ini [rewrite_remote] https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_remove_ads.qxrewrite, tag=什么值得买_去广告, update-interval=86400, opt-parser=false, enabled=true ``` -## 统一推送 - -MagicJS利用Bark,实现了跨设备的统一推送能力,将多个iOS设备的脚本执行结果,统一推送到一个设备上。 - -执行效果图,以饿了么为例: - -![](https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/eleme/images/bark.jpg) - -### 开启统一推送 - -你需要安装Bark这个APP,打开后可以得到类似这样的链接: - -```http -https://api.day.app/VXTWvaQ18N29bsQAg7DgkT -``` - -在Surge、Loon、QuantumultX中执行以下代码,将链接写入(如何执行代码请自己动手解决)。 - -**Surge、Loon** - -```javascript -# 开启所有脚本统一推送 -$persistentStore.write("https://api.day.app/VXTWvaQ18N29bsQAg7DgkT", "magicjs_unified_push_url"); -``` - -**Quantumult X** - -```javascript -# 开启所有脚本统一推送 -$prefs.setValueForKey("https://api.day.app/VXTWvaQ18N29bsQAg7DgkT", "magicjs_unified_push_url"); -``` - -### 关闭统一推送 - -**Surge、Loon** - -```javascript -# 关闭所有脚本统一推送 -$persistentStore.write("", "magicjs_unified_push_url"); -``` - -**Quantumult X** - -```javascript -# 关闭所有脚本统一推送 -$prefs.setValueForKey("", "magicjs_unified_push_url"); -``` - -### 其他 - -1. 统一推送能力仅对支持的脚本有效。 -2. 开启统一推送后,所有支持统一推送的脚本,都会把通知推送到目标设备上。 -3. 限于Bark的功能,统一推送中的多媒体和链接不可用。 -4. 统一推送需要使用Bark的服务器,推送成功与否,与Bark服务器的可用性有关。 -5. 统一推送不会关闭APP的本地推送,即两个iOS设备都会有推送。 -6. 如有隐私考虑,可以参考Bark的服务端文档,自建服务端。 \ No newline at end of file diff --git a/script/smzdm/images/checkin.jpg b/script/smzdm/images/checkin.jpg deleted file mode 100644 index c2b848145..000000000 Binary files a/script/smzdm/images/checkin.jpg and /dev/null differ diff --git a/script/smzdm/smzdm_daily.js b/script/smzdm/smzdm_daily.js new file mode 100644 index 000000000..c9452f769 --- /dev/null +++ b/script/smzdm/smzdm_daily.js @@ -0,0 +1,471 @@ +const zhiyouRegex = /^https?:\/\/zhiyou\.smzdm\.com\/user$/; +const smzdmCookieKey = "smzdm_cookie"; +const smzdmCookieIdKey = "smzdm_cookie_id"; +const smzdmSigninKey = "smzdm_signin"; +const smzdmMissionKey = "smzdm_mission"; +const smzdmLotteryKey = "smzdm_lottery"; +const smzdmSyncQinglongKey = "smzdm_sync_qinglong"; +const scriptName = '什么值得买'; +const clickFavArticleMaxTimes = 7; // 好文收藏次数 + +const $ = MagicJS(scriptName, "INFO"); +let currentCookie = ""; + +function randomStr() { + let len = 17; + let char = '0123456789'; + let str = '' + for (i = 0; i < len; i++) { + str += char.charAt(Math.floor(Math.random() * char.length)); + } + return str; +} + +$.http.interceptors.request.use((config) => { + if (!!currentCookie) { + config.headers.Cookie = currentCookie; + } + return config; +}); + +// Web端登录获取Cookie +async function getWebCookie() { + try { + currentCookie = $.request.headers.cookie || $.request.headers.Cookie; + if (currentCookie.length >= 200) { + + $.logger.info(`当前页面获取的Cookie: ${currentCookie}`); + const matchStr = currentCookie.match(/__ckguid=[^\s]*;/); + const cookieId = matchStr !== null ? matchStr[0] : null; + $.logger.info(`当前页面获取的CookieId\n${cookieId}`); + // 获取新的session_id + if (cookieId) { + const userInfo = await getWebUserInfo(); + // 获取持久化的session_id + let oldCookieId = $.data.read(smzdmCookieIdKey, "", userInfo.smzdm_id); + $.logger.info(`从客户端存储池中读取的CookieId\n${oldCookieId}`); + // 获取新的session_id + $.logger.info(`旧的CookieId:\n${oldCookieId}\n新的CookieId:\n${cookieId}`); + // 比较差异 + if (oldCookieId == cookieId) { + $.logger.info('当前页面获取的Cookie与客户端存储的Cookie相同,无需更新。'); + } + else { + if (userInfo.blackroom_desc && userInfo.blackroom_level) { + $.notification.post(`⚠️您的账户已在小黑屋中,请谨慎使用自动签到和任务!\n小黑屋类型:${userInfo.blackroom_desc}\小黑屋等级:${userInfo.blackroom_level}`); + } + $.data.write(smzdmCookieIdKey, cookieId, userInfo.smzdm_id); + $.data.write(smzdmCookieKey, currentCookie, userInfo.smzdm_id); + $.logger.info(`写入cookie\n${currentCookie}`); + $.notification.post(scriptName, '', '🎈获取Cookie成功!!'); + } + + // 同步到青龙面板 + if ($.data.read(smzdmSyncQinglongKey, false) === true) { + oldCookieId = await $.qinglong.read(smzdmCookieIdKey, "", userInfo.smzdm_id); + $.logger.info(`从青龙面板读取的CookieId\n${oldCookieId}`); + if (oldCookieId !== cookieId) { + await $.qinglong.write(smzdmCookieIdKey, cookieId, userInfo.smzdm_id); + await $.qinglong.write(smzdmCookieKey, currentCookie, userInfo.smzdm_id); + $.logger.info(`同步cookie\n${currentCookie}`); + $.notification.post(scriptName, '', '🎈同步Cookie至青龙面板成功!!'); + } + else { + $.logger.info(`当前页面获取的Cookie与青龙面板存储的Cookie相同,无需更新。`) + } + } + } + } + else { + $.logger.warning('没有读取到有效的Cookie信息。'); + } + } + catch (err) { + $.logger.error(`获取什么值得买Cookies出现异常,${err}`); + } +} + +// Web端签到 +function webSignin() { + return new Promise((resolve, reject) => { + let ts = Date.parse(new Date()); + $.http.get({ + url: `https://zhiyou.smzdm.com/user/checkin/jsonp_checkin?callback=jQuery11240${randomStr()}_${ts}&_=${ts + 3}`, + headers: { + 'Accept': '*/*', + 'Accept-Language': 'zh-cn', + 'Connection': 'keep-alive', + 'Host': 'zhiyou.smzdm.com', + 'Referer': 'https://www.smzdm.com/', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15' + } + }).then(resp => { + let data = /\((.*)\)/.exec(resp.body); + if (data) { + let obj = JSON.parse(data[1]); + if (!!obj && obj.hasOwnProperty('error_code')) { + if (obj.error_code == -1) { + $.logger.warning(`Web端签到出现异常,网络繁忙,接口返回:${data}`); + reject('Web:网络繁忙'); + } + else if (obj['error_code'] == 99) { + $.logger.warning('Web端Cookie已过期'); + resolve([false, 'Web:Cookie过期']); + } + else if (obj['error_code'] == 0) { + $.logger.info('Web:签到成功'); + resolve([true, 'Web:签到成功']); + } + else { + $.logger.warning(`Web端签到出现异常,接口返回数据不合法:${data}`); + reject('Web:返回错误'); + } + } + } + else { + $.logger.warning(`Web端签到出现异常,接口返回数据不存在:${data}`); + reject('Web:签到异常'); + } + }).catch(err => { + $.logger.error(`Web端签到出现异常,${err}`); + reject('Web:签到异常'); + }) + }) +} + +// 获取用户信息 +function getWebUserInfo() { + let userInfo = { + "smzdm_id": null, // 什么值得买Id + "nick_name": null, // 昵称 + "avatar": null, // 头像链接 + "has_checkin": null, // 是否签到 + "daily_checkin_num": null, // 连续签到天数 + "unread_msg": null, // 未读消息 + "level": null, // 旧版等级 + "vip": null, // 新版VIP等级 + "exp": null, // 旧版经验 + "point": null, // 积分 + "gold": null, // 金币 + "silver": null, // 碎银子 + "prestige": null, // 威望 + "user_point_list": [], // 近期经验变动情况 + "blackroom_desc": "", + "blackroom_level": "" + } + return new Promise(async resolve => { + // 获取旧版用户信息 + await $.http.get({ + url: `https://zhiyou.smzdm.com/user/info/jsonp_get_current?with_avatar_ornament=1&callback=jQuery112403507528653716241_${new Date().getTime()}&_=${new Date().getTime()}`, + headers: { + 'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01', + 'Accept-Language': 'zh-CN,zh;q=0.9', + 'Connection': 'keep-alive', + 'Host': 'zhiyou.smzdm.com', + 'Referer': 'https://zhiyou.smzdm.com/user/', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' + } + }).then(resp => { + let obj = JSON.parse(/\((.*)\)/.exec(resp.body)[1]); + if (obj['smzdm_id'] !== 0) { + userInfo.smzdm_id = obj['smzdm_id']; + userInfo.nick_name = obj['nickname'] // 昵称 + userInfo.avatar = `https:${obj['avatar']}` // 头像链接 + userInfo.has_checkin = obj['checkin']['has_checkin'] // 是否签到 + userInfo.daily_checkin_num = obj['checkin']['daily_checkin_num'] // 连续签到天数 + userInfo.unread_msg = obj['unread']['notice']['num'] // 未读消息数 + userInfo.level = obj['level'] // 旧版等级 + userInfo.vip = obj['vip_level'] // 新版VIP等级 + userInfo.blackroom_desc = obj['blackroom_desc'] // 小黑屋描述 + userInfo.blackroom_desc = obj['blackroom_level'] // 小黑屋等级 + // userInfo.exp = obj['exp'] // 旧版经验 + // userInfo.point = obj['point'] // 积分 + // userInfo.gold = obj['gold'] // 金币 + // userInfo.silver = obj['silver'] // 碎银子 + } + else { + $.logger.warning(`获取用户信息异常,Cookie过期或接口变化:${JSON.stringify(obj)}`); + } + }).catch(err => { + $.logger.error(`获取用户信息异常,${err}`); + }) + // 获取新版用户信息 + await $.http.get({ + url: "https://zhiyou.smzdm.com/user/exp/", + body: '' + }).then(resp => { + const data = resp.body; + // 获取用户名 + userInfo.nick_name = data.match(/info-stuff-nickname.*zhiyou\.smzdm\.com\/user[^<]*>([^<]*))[1].trim(); + // 获取近期经验变动情况 + const pointTimeList = data.match(/