2021-04-27 14:10:00 +08:00
const smzdmCookieKey = "smzdm_cookie" ;
const scriptName = "什么值得买" ;
2021-04-09 19:34:05 +08:00
let clickGoBuyMaxTimes = 0 ; // 好价点击去购买的次数
let clickLikeProductMaxTimes = 0 ; // 好价点值次数
let clickLikeArticleMaxTimes = 0 ; // 好文点赞次数
let clickFavArticleMaxTimes = 7 ; // 好文收藏次数
let magicJS = MagicJS ( scriptName , "INFO" ) ;
2021-04-27 14:10:00 +08:00
magicJS . unifiedPushUrl = magicJS . read ( "smzdm_unified_push_url" ) || magicJS . read ( "magicjs_unified_push_url" ) ;
2021-04-09 19:34:05 +08:00
// 获取点击去购买和点值的链接
2021-04-27 14:10:00 +08:00
function GetProductList ( ) {
return new Promise ( ( resolve , reject ) => {
let getGoBuyOptions = {
url : "https://faxian.smzdm.com/" ,
headers : {
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ,
"Accept-Language" : "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ,
"Cache-Control" : "max-age=0" ,
"Connection" : "keep-alive" ,
"Host" : "www.smzdm.com" ,
"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.52" ,
2021-04-09 19:34:05 +08:00
} ,
2021-04-27 14:10:00 +08:00
body : "" ,
2021-04-09 19:34:05 +08:00
} ;
2021-04-27 14:10:00 +08:00
magicJS . get ( getGoBuyOptions , ( err , resp , data ) => {
if ( err ) {
2021-04-09 19:34:05 +08:00
reject ( err ) ;
2021-04-27 14:10:00 +08:00
} else {
2021-04-09 19:34:05 +08:00
// 获取每日去购买的链接
2021-04-27 14:10:00 +08:00
let goBuyList = data . match ( /https?:\/\/go\.smzdm\.com\/[0-9a-zA-Z]*\/[^"']*_0/gi ) ;
if ( ! ! goBuyList ) {
2021-04-09 19:34:05 +08:00
// 去除重复的商品链接
let goBuyDict = { } ;
2021-04-27 14:10:00 +08:00
goBuyList . forEach ( ( element ) => {
let productCode = element . match ( /https?:\/\/go\.smzdm\.com\/[0-9a-zA-Z]*\/([^"']*_0)/ ) [ 1 ] ;
2021-04-09 19:34:05 +08:00
goBuyDict [ productCode ] = element ;
} ) ;
goBuyList = Object . values ( goBuyDict ) ;
magicJS . logDebug ( ` 当前获取的每日去购买链接: ${ JSON . stringify ( goBuyList ) } ` ) ;
2021-04-27 14:10:00 +08:00
} else {
goBuyList = [ ] ;
2021-04-09 19:34:05 +08:00
}
// 获取每日点值的链接
2021-04-27 14:10:00 +08:00
let productUrlList = data . match ( /https?:\/\/www\.smzdm\.com\/p\/[0-9]*/gi ) ;
let likeProductList = [ ] ;
if ( ! ! productUrlList ) {
productUrlList . forEach ( ( element ) => {
2021-04-09 19:34:05 +08:00
likeProductList . push ( element . match ( /https?:\/\/www\.smzdm\.com\/p\/([0-9]*)/ ) [ 1 ] ) ;
} ) ;
}
resolve ( [ goBuyList , likeProductList ] ) ;
}
} ) ;
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
}
// 获取点赞和收藏的好文Id
2021-04-27 14:10:00 +08:00
function GetDataArticleIdList ( ) {
return new Promise ( ( resolve , reject ) => {
2021-04-09 19:34:05 +08:00
let getArticleOptions = {
2021-04-27 14:10:00 +08:00
url : "https://post.smzdm.com/" ,
2021-04-09 19:34:05 +08:00
headers : {
2021-04-27 14:10:00 +08:00
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ,
"Accept-Language" : "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ,
"Host" : "post.smzdm.com" ,
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.41" ,
2021-04-09 19:34:05 +08:00
} ,
2021-04-27 14:10:00 +08:00
body : "" ,
} ;
magicJS . get ( getArticleOptions , ( err , resp , data ) => {
if ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 获取好文列表失败,请求异常: ${ err } ` ) ;
2021-04-27 14:10:00 +08:00
reject ( "GetArticleListErr" ) ;
} else {
try {
let articleList = data . match ( /data-article=".*" data-type="zan"/gi ) ;
let result = [ ] ;
articleList . forEach ( ( element ) => {
2021-04-09 19:34:05 +08:00
result . push ( element . match ( /data-article="(.*)" data-type="zan"/ ) [ 1 ] ) ;
} ) ;
resolve ( result ) ;
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 获取好文列表失败,执行异常: ${ err } ` ) ;
2021-04-27 14:10:00 +08:00
reject ( "GetArticleListErr" ) ;
2021-04-09 19:34:05 +08:00
}
}
2021-04-27 14:10:00 +08:00
} ) ;
} ) ;
2021-04-09 19:34:05 +08:00
}
// 点击去购买
2021-04-27 14:10:00 +08:00
function ClickGoBuyButton ( cookie , url ) {
return new Promise ( ( resolve ) => {
2021-04-09 19:34:05 +08:00
let clickGoBuyOptions = {
url : url ,
headers : {
2021-04-27 14:10:00 +08:00
Cookie : cookie ,
} ,
} ;
magicJS . get ( clickGoBuyOptions , ( err , resp , data ) => {
2021-04-09 19:34:05 +08:00
resolve ( ) ;
} ) ;
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
}
// 好价点值
2021-04-27 14:10:00 +08:00
function ClickLikeProduct ( cookie , articleId ) {
return new Promise ( ( resolve ) => {
2021-04-09 19:34:05 +08:00
let ClickLikeProductOptions = {
2021-04-27 14:10:00 +08:00
url : "https://zhiyou.smzdm.com/user/rating/ajax_add" ,
2021-04-09 19:34:05 +08:00
headers : {
2021-04-27 14:10:00 +08:00
"Accept" : "application/json, text/javascript, */*; q=0.01" ,
"Accept-Language" : "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ,
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
"Host" : "zhiyou.smzdm.com" ,
"Origin" : "https://faxian.smzdm.com" ,
"Referer" : "https://faxian.smzdm.com/" ,
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.41" ,
"Cookie" : cookie ,
2021-04-09 19:34:05 +08:00
} ,
2021-04-27 14:10:00 +08:00
body : ` article_id= ${ articleId } &channel_id=3&rating=1&client_type=PC&event_key=%E7%82%B9%E5%80%BC&otype=%E5%80%BC&aid= ${ articleId } &p=16&cid=2&source=%E6%97%A0&atp=3&tagID=%E6%97%A0&sourcePage=https%3A%2F%2Ffaxian.smzdm.com%2F&sourceMode=%E6%97%A0 ` ,
} ;
magicJS . post ( ClickLikeProductOptions , ( err , resp , data ) => {
if ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好价 ${ articleId } 点值失败,请求异常: ${ articleId } ` ) ;
resolve ( false ) ;
2021-04-27 14:10:00 +08:00
} else {
try {
2021-04-09 19:34:05 +08:00
let obj = JSON . parse ( data ) ;
2021-04-27 14:10:00 +08:00
if ( obj . error _code == 0 ) {
2021-04-09 19:34:05 +08:00
magicJS . logDebug ( ` 好价 ${ articleId } 点值成功 ` ) ;
resolve ( true ) ;
2021-04-27 14:10:00 +08:00
} else if ( obj . error _code == 1 ) {
2021-04-09 19:34:05 +08:00
magicJS . logDebug ( ` 好价 ${ articleId } 点值重复点值 ` ) ;
resolve ( true ) ;
2021-04-27 14:10:00 +08:00
} else {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好价 ${ articleId } 点值失败,接口响应异常: ${ data } ` ) ;
resolve ( false ) ;
}
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好价 ${ articleId } 点值失败,执行异常: ${ articleId } ` ) ;
resolve ( false ) ;
}
}
} ) ;
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
}
// 好文点赞
2021-04-27 14:10:00 +08:00
function ClickLikeArticle ( cookie , articleId ) {
return new Promise ( ( resolve ) => {
2021-04-09 19:34:05 +08:00
let ClickLikeProductOptions = {
2021-04-27 14:10:00 +08:00
url : "https://zhiyou.smzdm.com/user/rating/ajax_add" ,
2021-04-09 19:34:05 +08:00
headers : {
2021-04-27 14:10:00 +08:00
"Accept" : "application/json, text/javascript, */*; q=0.01" ,
"Accept-Language" : "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ,
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
"Host" : "zhiyou.smzdm.com" ,
"Origin" : "https://post.smzdm.com" ,
"Referer" : "https://post.smzdm.com/" ,
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.41" ,
"Cookie" : cookie ,
2021-04-09 19:34:05 +08:00
} ,
2021-04-27 14:10:00 +08:00
body : ` article_id= ${ articleId } &channel_id=11&rating=1&client_type=PC&event_key=%E7%82%B9%E5%80%BC&otype=%E7%82%B9%E8%B5%9E&aid= ${ articleId } &p=2&cid=11&source=%E6%97%A0&atp=76&tagID=%E6%97%A0&sourcePage=https%3A%2F%2Fpost.smzdm.com%2F&sourceMode=%E6%97%A0 ` ,
} ;
magicJS . post ( ClickLikeProductOptions , ( err , resp , data ) => {
if ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好文 ${ articleId } 点赞失败,请求异常: ${ articleId } ` ) ;
resolve ( false ) ;
2021-04-27 14:10:00 +08:00
} else {
try {
2021-04-09 19:34:05 +08:00
let obj = JSON . parse ( data ) ;
2021-04-27 14:10:00 +08:00
if ( obj . error _code == 0 ) {
2021-04-09 19:34:05 +08:00
magicJS . logDebug ( ` 好文 ${ articleId } 点赞成功 ` ) ;
resolve ( true ) ;
2021-04-27 14:10:00 +08:00
} else if ( obj . error _code == 1 && obj . error _msg == "已喜欢" ) {
2021-04-09 19:34:05 +08:00
magicJS . logDebug ( ` 好文 ${ articleId } 点赞失败,重复点值。 ` ) ;
resolve ( false ) ;
2021-04-27 14:10:00 +08:00
} else {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好文 ${ articleId } 点赞失败,接口响应异常: ${ data } ` ) ;
resolve ( false ) ;
}
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好文 ${ articleId } 点赞失败,请求异常: ${ err } ` ) ;
resolve ( false ) ;
}
}
} ) ;
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
}
// 好文收藏/取消收藏
2021-04-27 14:10:00 +08:00
function ClickFavArticle ( cookie , articleId ) {
return new Promise ( ( resolve ) => {
2021-04-09 19:34:05 +08:00
let options = {
2021-04-27 14:10:00 +08:00
url : "https://zhiyou.smzdm.com/user/favorites/ajax_favorite" ,
2021-04-09 19:34:05 +08:00
headers : {
2021-04-27 14:10:00 +08:00
"Accept" : "application/json, text/javascript, */*; q=0.01" ,
"Accept-Language" : "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ,
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
"Host" : "zhiyou.smzdm.com" ,
"Origin" : "https://post.smzdm.com" ,
"Referer" : "https://post.smzdm.com/" ,
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.41" ,
"Cookie" : cookie ,
2021-04-09 19:34:05 +08:00
} ,
2021-04-27 14:10:00 +08:00
body : ` article_id= ${ articleId } &channel_id=11&client_type=PC&event_key=%E6%94%B6%E8%97%8F&otype=%E6%94%B6%E8%97%8F&aid= ${ articleId } &cid=11&p=2&source=%E6%97%A0&atp=76&tagID=%E6%97%A0&sourcePage=https%3A%2F%2Fpost.smzdm.com%2F&sourceMode=%E6%97%A0 ` ,
} ;
magicJS . post ( options , ( err , resp , data ) => {
if ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好文 ${ articleId } 收藏失败,请求异常: ${ articleId } ` ) ;
resolve ( false ) ;
2021-04-27 14:10:00 +08:00
} else {
try {
2021-04-09 19:34:05 +08:00
let obj = JSON . parse ( data ) ;
2021-04-27 14:10:00 +08:00
if ( obj . error _code == 0 ) {
2021-04-09 19:34:05 +08:00
magicJS . logDebug ( ` 好文 ${ articleId } 收藏成功 ` ) ;
resolve ( true ) ;
2021-04-27 14:10:00 +08:00
} else if ( obj . error _code == 2 ) {
2021-04-09 19:34:05 +08:00
magicJS . logDebug ( ` 好文 ${ articleId } 取消收藏成功 ` ) ;
resolve ( true ) ;
2021-04-27 14:10:00 +08:00
} else {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好文 ${ articleId } 收藏失败,接口响应异常: ${ data } ` ) ;
resolve ( false ) ;
}
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 好文 ${ articleId } 收藏失败,请求异常: ${ err } ` ) ;
resolve ( false ) ;
}
}
} ) ;
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
}
2021-04-27 14:10:00 +08:00
// 获取每日抽奖active_id
function GetLotteryActiveId ( cookie ) {
return new Promise ( ( resolve ) => {
let options = {
url : "https://m.smzdm.com/zhuanti/life/choujiang/" ,
headers : {
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" ,
"Accept-Encoding" : "gzip, deflate, br" ,
"Accept-Language" : "zh-cn" ,
"Connection" : "keep-alive" ,
"Cookie" : cookie ,
"Host" : "m.smzdm.com" ,
"User-Agent" :
"Mozilla/5.0 (iPhone; CPU iPhone OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/smzdm 9.9.6 rv:93.4 (iPhone13,4; iOS 14.5; zh_CN)/iphone_smzdmapp/9.9.6/wkwebview/jsbv_1.0.0" ,
} ,
2021-04-09 19:34:05 +08:00
} ;
2021-04-27 14:10:00 +08:00
magicJS . get ( options , ( err , resp , data ) => {
if ( err ) {
magicJS . logWarning ( ` 获取每日抽奖Id失败, 请求异常: ${ err } ` ) ;
resolve ( "获取每日抽奖Id失败, 请求异常" ) ;
} else {
try {
let activeId = /name\s?=\s?\"lottery_activity_id\"\s+value\s?=\s?\"([a-zA-Z0-9]*)\"/ . exec ( data ) ;
if ( activeId ) {
resolve ( activeId [ 1 ] ) ;
} else {
magicJS . logWarning ( ` 获取每日抽奖activeId失败 ` ) ;
resolve ( "" ) ;
}
} catch ( err ) {
magicJS . logWarning ( ` 获取每日抽奖activeId失败, 请求异常: ${ err } ` ) ;
resolve ( "" ) ;
}
2021-04-09 19:34:05 +08:00
}
2021-04-27 14:10:00 +08:00
} ) ;
} ) ;
}
// 每日抽奖
function LotteryDraw ( cookie , activeId ) {
return new Promise ( ( resolve ) => {
let options = {
url : ` https://zhiyou.smzdm.com/user/lottery/jsonp_draw?callback=jQuery34109305207178886287_ ${ new Date ( ) . getTime ( ) } &active_id= ${ activeId } &_= ${ new Date ( ) . getTime ( ) } ` ,
headers : {
"Accept" : "*/*" ,
"Accept-Encoding" : "gzip, deflate, br" ,
"Accept-Language" : "zh-cn" ,
"Connection" : "keep-alive" ,
"Cookie" : cookie ,
"Host" : "zhiyou.smzdm.com" ,
"Referer" : "https://m.smzdm.com/zhuanti/life/choujiang/" ,
"User-Agent" :
"Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/smzdm 9.9.0 rv:91 (iPhone 11 Pro Max; iOS 14.2; zh_CN)/iphone_smzdmapp/9.9.0/wkwebview/jsbv_1.0.0" ,
} ,
} ;
magicJS . get ( options , ( err , resp , data ) => {
if ( err ) {
magicJS . logWarning ( ` 每日抽奖失败,请求异常: ${ err } ` ) ;
resolve ( "每日抽奖失败,请求异常" ) ;
} else {
try {
2021-04-09 19:34:05 +08:00
let newData = /\((.*)\)/ . exec ( data ) ;
let obj = JSON . parse ( newData [ 1 ] ) ;
2021-04-27 14:10:00 +08:00
if ( obj . error _code === 0 || obj . error _code === 1 || obj . error _code === 4 ) {
magicJS . logInfo ( ` 每日抽奖结果: ${ obj . error _msg } ` ) ;
2021-04-09 19:34:05 +08:00
resolve ( obj . error _msg ) ;
2021-04-27 14:10:00 +08:00
} else {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 每日抽奖失败,接口响应异常: ${ data } ` ) ;
2021-04-27 14:10:00 +08:00
resolve ( "每日抽奖失败,接口响应异常" ) ;
2021-04-09 19:34:05 +08:00
}
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 每日抽奖失败,请求异常: ${ err } ` ) ;
2021-04-27 14:10:00 +08:00
resolve ( "每日抽奖失败,请求异常" ) ;
2021-04-09 19:34:05 +08:00
}
}
} ) ;
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
}
// 获取用户信息,新版
2021-04-27 14:10:00 +08:00
function WebGetCurrentInfoNewVersion ( smzdmCookie ) {
return new Promise ( ( resolve ) => {
let options = {
url : "https://zhiyou.smzdm.com/user/exp/" ,
headers : {
Cookie : smzdmCookie ,
2021-04-09 19:34:05 +08:00
} ,
2021-04-27 14:10:00 +08:00
body : "" ,
2021-04-09 19:34:05 +08:00
} ;
2021-04-27 14:10:00 +08:00
magicJS . get ( options , ( err , resp , data ) => {
if ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logError ( ` 获取用户信息失败,异常信息: ${ err } ` ) ;
2021-04-27 14:10:00 +08:00
resolve ( [ null , null , null , null , null , null , null ] ) ;
} else {
try {
2021-04-09 19:34:05 +08:00
// 获取用户名
2021-04-27 14:10:00 +08:00
let userName = data . match ( /info-stuff-nickname.*zhiyou\.smzdm\.com\/user[^<]*>([^<]*)</ ) [ 1 ] . trim ( ) ;
2021-04-09 19:34:05 +08:00
// 获取近期经验值变动情况
2021-04-27 14:10:00 +08:00
let pointTimeList = data . match ( /<div class="scoreLeft">(.*)<\/div>/gi ) ;
let pointDetailList = data . match ( /<div class=['"]scoreRight ellipsis['"]>(.*)<\/div>/gi ) ;
2021-04-09 19:34:05 +08:00
let minLength = pointTimeList . length > pointDetailList . length ? pointDetailList . length : pointTimeList . length ;
let userPointList = [ ] ;
2021-04-27 14:10:00 +08:00
for ( let i = 0 ; i < minLength ; i ++ ) {
2021-04-09 19:34:05 +08:00
userPointList . push ( {
2021-04-27 14:10:00 +08:00
time : pointTimeList [ i ] . match ( /\<div class=['"]scoreLeft['"]\>(.*)\<\/div\>/ ) [ 1 ] ,
detail : pointDetailList [ i ] . match ( /\<div class=['"]scoreRight ellipsis['"]\>(.*)\<\/div\>/ ) [ 1 ] ,
2021-04-09 19:34:05 +08:00
} ) ;
}
// 获取用户资源
2021-04-27 14:10:00 +08:00
let assetsNumList = data . match ( /assets-part[^<]*>(.*)</gi ) ;
2021-04-09 19:34:05 +08:00
let points = assetsNumList [ 0 ] . match ( /assets-num[^<]*>(.*)</ ) [ 1 ] ; // 积分
let experience = assetsNumList [ 2 ] . match ( /assets-num[^<]*>(.*)</ ) [ 1 ] ; // 经验
let gold = assetsNumList [ 4 ] . match ( /assets-num[^<]*>(.*)</ ) [ 1 ] ; // 金币
// let prestige = assetsNumList[6].match(/assets-num[^<]*>(.*)</)[1]; // 威望
let prestige = 0 ;
let silver = assetsNumList [ 6 ] . match ( /assets-num[^<]*>(.*)</ ) [ 1 ] ; // 碎银子
resolve ( [ userName , userPointList , Number ( points ) , Number ( experience ) , Number ( gold ) , Number ( prestige ) , Number ( silver ) ] ) ;
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logError ( ` 获取用户信息失败,异常信息: ${ err } ` ) ;
2021-04-27 14:10:00 +08:00
resolve ( [ null , null , null , null , null , null , null ] ) ;
2021-04-09 19:34:05 +08:00
}
}
2021-04-27 14:10:00 +08:00
} ) ;
} ) ;
2021-04-09 19:34:05 +08:00
}
// 获取用户信息
2021-04-27 14:10:00 +08:00
function WebGetCurrentInfo ( smzdmCookie ) {
2021-04-09 19:34:05 +08:00
return new Promise ( ( resolve ) => {
let webGetCurrentInfo = {
2021-04-27 14:10:00 +08:00
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" ,
"DNT" : "1" ,
"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" ,
"Cookie" : smzdmCookie ,
} ,
2021-04-09 19:34:05 +08:00
} ;
2021-04-27 14:10:00 +08:00
magicJS . get ( webGetCurrentInfo , ( err , resp , data ) => {
try {
2021-04-09 19:34:05 +08:00
let obj = JSON . parse ( /\((.*)\)/ . exec ( data ) [ 1 ] ) ;
2021-04-27 14:10:00 +08:00
if ( obj [ "smzdm_id" ] !== 0 ) {
2021-04-09 19:34:05 +08:00
resolve ( [
2021-04-27 14:10:00 +08:00
obj [ "nickname" ] , // 昵称
` https: ${ obj [ "avatar" ] } ` , // 头像
obj [ "vip_level" ] , // 新版VIP等级
obj [ "checkin" ] [ "has_checkin" ] , //是否签到
Number ( obj [ "checkin" ] [ "daily_checkin_num" ] ) , //连续签到天数
Number ( obj [ "unread" ] [ "notice" ] [ "num" ] ) , // 未读消息
Number ( obj [ "level" ] ) , // 旧版等级
Number ( obj [ "exp" ] ) , // 旧版经验
Number ( obj [ "point" ] ) , // 积分
Number ( obj [ "gold" ] ) , // 金币
Number ( obj [ "silver" ] ) , // 碎银子
2021-04-09 19:34:05 +08:00
] ) ;
2021-04-27 14:10:00 +08:00
} else {
2021-04-09 19:34:05 +08:00
magicJS . logWarning ( ` 获取用户信息异常, Cookie过期或接口变化: ${ data } ` ) ;
resolve ( [ null , null , null , null , null , false , null , null ] ) ;
}
2021-04-27 14:10:00 +08:00
} catch ( err ) {
2021-04-09 19:34:05 +08:00
magicJS . logError ( ` 获取用户信息异常,代码执行异常: ${ err } ,接口返回数据: ${ data } ` ) ;
resolve ( [ null , null , null , null , null , false , null , null ] ) ;
}
2021-04-27 14:10:00 +08:00
} ) ;
2021-04-09 19:34:05 +08:00
} ) ;
}
2021-04-27 14:10:00 +08:00
( async ( ) => {
2021-04-09 19:34:05 +08:00
// 通知信息
2021-04-27 14:10:00 +08:00
let title = "" ;
let subTitle = "" ;
let content = "" ;
2021-04-09 19:34:05 +08:00
// 获取Cookie
let smzdmCookie = magicJS . read ( smzdmCookieKey ) ;
2021-04-27 14:10:00 +08:00
if ( ! ! smzdmCookie === false ) {
magicJS . logWarning ( "没有读取到什么值得买有效cookie, 请访问zhiyou.smzdm.com进行登录" ) ;
magicJS . notify ( scriptName , "" , "❓没有获取到Web端Cookie, 请先进行登录。" ) ;
} else {
try {
2021-04-09 19:34:05 +08:00
// 任务完成情况
let clickGoBuyTimes = 0 ;
let clickLikePrductTimes = 0 ;
let clickLikeArticleTimes = 0 ;
let clickFavArticleTimes = 0 ;
// 查询签到前用户数据
2021-04-27 14:10:00 +08:00
let [ nickName , avatar , beforeVIPLevel , beforeHasCheckin , , beforeNotice , , , beforePoint , beforeGold , beforeSilver ] = await WebGetCurrentInfo ( smzdmCookie ) ;
if ( ! nickName ) {
magicJS . notify ( scriptName , "" , "❌Cookie过期或接口变化, 请尝试重新登录" ) ;
2021-04-09 19:34:05 +08:00
magicJS . done ( ) ;
2021-04-27 14:10:00 +08:00
} else {
let [ , , , beforeExp , , beforePrestige ] = await WebGetCurrentInfoNewVersion ( smzdmCookie ) ;
magicJS . logInfo (
` 昵称: ${ nickName } \n Web端签到状态: ${ beforeHasCheckin } \n 签到前等级 ${ beforeVIPLevel } ,积分 ${ beforePoint } ,经验 ${ beforeExp } ,金币 ${ beforeGold } ,碎银子 ${ beforeSilver } , 未读消息${ beforeNotice } `
) ;
2021-04-09 19:34:05 +08:00
// 每日抽奖
2021-04-27 14:10:00 +08:00
let activeId = await GetLotteryActiveId ( smzdmCookie ) ;
if ( activeId ) {
content = await LotteryDraw ( smzdmCookie , activeId ) ;
}
2021-04-09 19:34:05 +08:00
// 获取去购买和好价Id列表
2021-04-27 14:10:00 +08:00
let [ , [ goBuyList = [ ] , likProductList = [ ] ] ] = await magicJS . attempt ( magicJS . retry ( GetProductList , 5 , 1000 ) ( ) , [ [ ] , [ ] ] ) ;
2021-04-09 19:34:05 +08:00
// 获取好文列表
2021-04-27 14:10:00 +08:00
let [ , articleList = [ ] ] = await magicJS . attempt ( magicJS . retry ( GetDataArticleIdList , 5 , 1000 ) ( ) , [ ] ) ;
2021-04-09 19:34:05 +08:00
// 好价点击去购买, Web端点击已无奖励, 放弃
2021-04-27 14:10:00 +08:00
const clickGoBuyAsync = async ( ) => {
2021-04-09 19:34:05 +08:00
let clickGoBuyList = goBuyList . splice ( 0 , clickGoBuyMaxTimes ) ;
2021-04-27 14:10:00 +08:00
if ( clickGoBuyList . length > 0 ) {
for ( let i = 0 ; i < clickGoBuyList . length ; i ++ ) {
2021-04-09 19:34:05 +08:00
await ClickGoBuyButton ( smzdmCookie , clickGoBuyList [ i ] ) ;
2021-04-27 14:10:00 +08:00
magicJS . logInfo ( ` 完成第 ${ i + 1 } 次“每日去购买”任务,点击链接: \n ${ clickGoBuyList [ i ] } ` ) ;
2021-04-09 19:34:05 +08:00
clickGoBuyTimes += 1 ;
await magicJS . sleep ( 3100 ) ;
}
}
2021-04-27 14:10:00 +08:00
} ;
2021-04-09 19:34:05 +08:00
// 好价点值
2021-04-27 14:10:00 +08:00
const clickLikeProductAsync = async ( ) => {
2021-04-09 19:34:05 +08:00
let clickLikeProductList = likProductList . splice ( 0 , clickLikeProductMaxTimes ) ;
2021-04-27 14:10:00 +08:00
if ( clickLikeProductList . length > 0 ) {
for ( let i = 0 ; i < clickLikeProductList . length ; i ++ ) {
2021-04-09 19:34:05 +08:00
await ClickLikeProduct ( smzdmCookie , clickLikeProductList [ i ] ) ;
2021-04-27 14:10:00 +08:00
magicJS . logInfo ( ` 完成第 ${ i + 1 } 次“好价点值”任务, 好价Id: ${ clickLikeProductList [ i ] } ` ) ;
2021-04-09 19:34:05 +08:00
clickLikePrductTimes += 1 ;
await magicJS . sleep ( 3100 ) ;
}
2021-04-27 14:10:00 +08:00
}
} ;
2021-04-09 19:34:05 +08:00
// 好文点赞
2021-04-27 14:10:00 +08:00
const clickLikeArticleAsync = async ( ) => {
2021-04-09 19:34:05 +08:00
let likeArticleList = articleList . splice ( 0 , clickLikeArticleMaxTimes ) ;
2021-04-27 14:10:00 +08:00
if ( likeArticleList . length > 0 ) {
for ( let i = 0 ; i < likeArticleList . length ; i ++ ) {
2021-04-09 19:34:05 +08:00
await ClickLikeArticle ( smzdmCookie , likeArticleList [ i ] ) ;
2021-04-27 14:10:00 +08:00
magicJS . logInfo ( ` 完成第 ${ i + 1 } 次“好文点赞”任务, 好文Id: ${ likeArticleList [ i ] } ` ) ;
2021-04-09 19:34:05 +08:00
clickLikeArticleTimes += 1 ;
await magicJS . sleep ( 3100 ) ;
}
}
2021-04-27 14:10:00 +08:00
} ;
2021-04-09 19:34:05 +08:00
// 好文收藏
2021-04-27 14:10:00 +08:00
const clickFavArticleAsync = async ( ) => {
2021-04-09 19:34:05 +08:00
let favArticleList = articleList . splice ( 0 , clickFavArticleMaxTimes ) ;
2021-04-27 14:10:00 +08:00
if ( favArticleList . length > 0 ) {
2021-04-09 19:34:05 +08:00
// 好文收藏
2021-04-27 14:10:00 +08:00
for ( let i = 0 ; i < favArticleList . length ; i ++ ) {
2021-04-09 19:34:05 +08:00
await ClickFavArticle ( smzdmCookie , articleList [ i ] ) ;
2021-04-27 14:10:00 +08:00
magicJS . logInfo ( ` 完成第 ${ i + 1 } 次“好文收藏”任务, 好文Id: ${ articleList [ i ] } ` ) ;
2021-04-09 19:34:05 +08:00
clickFavArticleTimes += 1 ;
await magicJS . sleep ( 3100 ) ;
}
// 取消收藏
2021-04-27 14:10:00 +08:00
for ( let i = 0 ; i < favArticleList . length ; i ++ ) {
2021-04-09 19:34:05 +08:00
await ClickFavArticle ( smzdmCookie , articleList [ i ] ) ;
2021-04-27 14:10:00 +08:00
magicJS . logInfo ( ` 取消第 ${ i + 1 } 次“好文收藏”任务的好文, 好文Id: ${ articleList [ i ] } ` ) ;
2021-04-09 19:34:05 +08:00
await magicJS . sleep ( 3100 ) ;
}
}
2021-04-27 14:10:00 +08:00
} ;
2021-04-09 19:34:05 +08:00
await Promise . all ( [ clickGoBuyAsync ( ) , clickLikeProductAsync ( ) ] ) ;
await Promise . all ( [ clickLikeArticleAsync ( ) , clickFavArticleAsync ( ) ] ) ;
// 查询签到后用户数据
2021-04-27 14:10:00 +08:00
await magicJS . sleep ( 3000 ) ;
2021-04-09 19:34:05 +08:00
let [ , , afterVIPLevel , afterHasCheckin , afterCheckinNum , afterNotice , , , afterPoint , afterGold , afterSilver ] = await WebGetCurrentInfo ( smzdmCookie ) ;
2021-04-27 14:10:00 +08:00
let [ , afteruserPointList , , afterExp , , afterPrestige ] = await WebGetCurrentInfoNewVersion ( smzdmCookie ) ;
magicJS . logInfo (
` 昵称: ${ nickName } \n Web端签到状态: ${ afterHasCheckin } \n 签到后等级 ${ afterVIPLevel } ,积分 ${ afterPoint } ,经验 ${ afterExp } ,金币 ${ afterGold } ,碎银子 ${ afterSilver } ,未读消息 ${ afterNotice } `
) ;
2021-04-09 19:34:05 +08:00
// 通知内容
2021-04-27 14:10:00 +08:00
if ( afterExp && beforeExp ) {
2021-04-09 19:34:05 +08:00
let addPoint = afterPoint - beforePoint ;
let addExp = afterExp - beforeExp ;
let addGold = afterGold - beforeGold ;
// let addPrestige = afterPrestige - beforePrestige;
let addSilver = afterSilver - beforeSilver ;
2021-04-27 14:10:00 +08:00
content += ! ! content ? "\n" : "" ;
content +=
"积分" +
afterPoint +
( addPoint > 0 ? "(+" + addPoint + ")" : "" ) +
" 经验" +
afterExp +
( addExp > 0 ? "(+" + addExp + ")" : "" ) +
" 金币" +
afterGold +
( addGold > 0 ? "(+" + addGold + ")" : "" ) +
"\n" +
"碎银子" +
afterSilver +
( addSilver > 0 ? "(+" + addSilver + ")" : "" ) +
// ' 威望' + afterPrestige + (addPrestige > 0 ? '(+' + addPrestige + ')' : '') +
" 未读消息" +
afterNotice ;
2021-04-09 19:34:05 +08:00
}
2021-04-27 14:10:00 +08:00
content += ` \n 点值 ${ clickLikePrductTimes } / ${ clickLikeProductMaxTimes } 去购买 ${ clickGoBuyTimes } / ${ clickGoBuyMaxTimes } \n 点赞 ${ clickLikeArticleTimes } / ${ clickLikeArticleMaxTimes } 收藏 ${ clickLikeArticleTimes } / ${ clickFavArticleTimes } ` ;
2021-04-09 19:34:05 +08:00
2021-04-27 14:10:00 +08:00
content += ! ! content ? "\n" : "" ;
if ( afteruserPointList . length > 0 ) {
content += "用户近期经验变动情况(有延迟): " ;
afteruserPointList . forEach ( ( element ) => {
content += ` \n ${ element [ "time" ] } ${ element [ "detail" ] } ` ;
2021-04-09 19:34:05 +08:00
} ) ;
2021-04-27 14:10:00 +08:00
content += "\n如经验值无变动, 请更新Cookie。" ;
} else {
content += "没有获取到用户近期的经验变动情况" ;
2021-04-09 19:34:05 +08:00
}
2021-04-27 14:10:00 +08:00
2021-04-09 19:34:05 +08:00
title = ` ${ scriptName } - ${ nickName } V ${ afterVIPLevel } ` ;
2021-04-27 14:10:00 +08:00
magicJS . notify ( title , subTitle , content , { "media-url" : avatar } ) ;
2021-04-09 19:34:05 +08:00
}
2021-04-27 14:10:00 +08:00
} catch ( err ) {
magicJS . logError ( ` 执行任务出现异常: ${ err } ` ) ;
magicJS . notify ( scriptName , "" , "❌执行任务出现,请查阅日志" ) ;
2021-04-09 19:34:05 +08:00
}
}
magicJS . done ( ) ;
} ) ( ) ;
2021-04-27 14:10:00 +08:00
// prettier-ignore
function MagicJS ( scriptName = "MagicJS" , logLevel = "INFO" ) { return new class { constructor ( ) { if ( this . version = "2.2.3.3" , this . scriptName = scriptName , this . logLevels = { DEBUG : 5 , INFO : 4 , NOTIFY : 3 , WARNING : 2 , ERROR : 1 , CRITICAL : 0 , NONE : - 1 } , this . isLoon = "undefined" != typeof $loon , this . isQuanX = "undefined" != typeof $task , this . isJSBox = "undefined" != typeof $drive , this . isNode = "undefined" != typeof module && ! this . isJSBox , this . isSurge = "undefined" != typeof $httpClient && ! this . isLoon , this . node = { request : void 0 , fs : void 0 , data : { } } , this . iOSUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1" , this . pcUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36 Edg/84.0.522.59" , this . logLevel = logLevel , this . _barkUrl = "" , this . isNode ) { this . node . fs = require ( "fs" ) , this . node . request = require ( "request" ) ; try { this . node . fs . accessSync ( "./magic.json" , this . node . fs . constants . R _OK | this . node . fs . constants . W _OK ) } catch ( err ) { this . node . fs . writeFileSync ( "./magic.json" , "{}" , { encoding : "utf8" } ) } this . node . data = require ( "./magic.json" ) } else this . isJSBox && ( $file . exists ( "drive://MagicJS" ) || $file . mkdir ( "drive://MagicJS" ) , $file . exists ( "drive://MagicJS/magic.json" ) || $file . write ( { data : $data ( { string : "{}" } ) , path : "drive://MagicJS/magic.json" } ) ) } set barkUrl ( url ) { this . _barkUrl = url . replace ( /\/+$/g , "" ) } set logLevel ( level ) { this . _logLevel = "string" == typeof level ? level . toUpperCase ( ) : "DEBUG" } get logLevel ( ) { return this . _logLevel } get isRequest ( ) { return "undefined" != typeof $request && "undefined" == typeof $response } get isResponse ( ) { return "undefined" != typeof $response } get request ( ) { return "undefined" != typeof $request ? $request : void 0 } get response ( ) { return "undefined" != typeof $response ? ( $response . hasOwnProperty ( "status" ) && ( $response . statusCode = $response . status ) , $response . hasOwnProperty ( "statusCode" ) && ( $response . status = $response . statusCode ) , $response ) : void 0 } get platform ( ) { return this . isSurge ? "Surge" : this . isQuanX ? "Quantumult X" : this . isLoon ? "Loon" : this . isJSBox ? "JSBox" : this . isNode ? "Node.js" : "Unknown" } read ( key , session = "" ) { let val = "" ; this . isSurge || this . isLoon ? val = $persistentStore . read ( key ) : this . isQuanX ? val = $prefs . valueForKey ( key ) : this . isNode ? val = this . node . data : this . isJSBox && ( val = $file . read ( "drive://MagicJS/magic.json" ) . string ) ; try { this . isNode && ( val = val [ key ] ) , this . isJSBox && ( val = JSON . parse ( val ) [ key ] ) , session && ( "string" == typeof val && ( val = JSON . parse ( val ) ) , val = val && "object" == typeof val ? val [ session ] : null ) } catch ( err ) { this . logError ( err ) , val = session ? { } : null , this . del ( key ) } void 0 === val && ( val = null ) ; try { val && "string" == typeof val && ( val = JSON . parse ( val ) ) } catch ( err ) { } return this . logDebug ( ` READ DATA [ ${ key } ] ${ session ? ` [ ${ session } ] ` : "" } ( ${ typeof val } ) \n ${ JSON . stringify ( val ) } ` ) , val } write ( key , val , session = "" ) { let data = session ? { } : "" ; if ( session && ( this . isSurge || this . isLoon ) ? data = $persistentStore . read ( key ) : session && this . isQuanX ? data = $prefs . valueForKey ( key ) : this . isNode ? data = this . node . data : this . isJSBox && ( data = JSON . parse ( $file . read ( "drive://MagicJS/magic.json" ) . string ) ) , session ) { try { "string" == typeof data && ( data = JSON . parse ( data ) ) , data = "object" == typeof data && data ? data : { } } catch ( err ) { this . logError ( err ) , this . del ( key ) , data = { } } this . isJSBox || this . isNode ? ( data [ key ] && "object" == typeof data [ key ] || ( data [ key ] = { } ) , data [ key ] . hasOwnProperty ( session ) || ( data [ key ] [ session ] = null ) , void 0 === val ? delete data [ key ] [ session ] : data [ key ] [ session ] = val ) : void 0 === val ? delete data [ session ] : data [ session ] = val } else this . isNode || this . isJSBox ? void 0 === val ? delete data [ key ] : data [ key ] = val : data = void 0 === val ? null : val ; "object" == typeof data && ( data = JSON . stringify ( data ) ) , this . isSurge || this . isLoon ? $persistentStore . write ( data , key ) : this . isQuanX ? $prefs . setValueForKey ( data , key ) : this . isNode ? this . node . fs . writeFileSync ( "./magic.json" , data ) : this . isJSBox && $file . write ( { data : $data ( { string : data } ) , path : "drive://MagicJS/magic.json" } ) , this . logDebug ( ` WRITE DATA [ ${ key } ] ${ session ? ` [ ${ session } ] ` : "" } ( ${ typeof val } ) \n ${ JSON . stringify ( val ) } ` ) } del ( key , session = "" ) { this . logDebug ( ` DELETE KEY [ ${ key } ] ${ session ? ` [ ${ session } ] ` : "" } ` ) , this . write ( key , null , session ) } notify ( title = thi