Files
smzdm_script/smzdm_task.js
2023-08-08 23:07:50 +08:00

1593 lines
38 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
smzdm 任务脚本
项目地址: https://github.com/hex-ci/smzdm_script
cron: 20 14 * * *
*/
const Env = require('./env');
const { SmzdmBot, requestApi, removeTags, getEnvCookies, wait } = require('./bot');
const notify = require('./sendNotify');
// ------------------------------------
const $ = new Env('smzdm 任务');
class SmzdmTaskBot extends SmzdmBot {
constructor(cookie) {
super(cookie);
}
// 主函数
async run() {
$.log('获取任务列表');
const { tasks } = await this.getTaskList();
await wait(5, 10);
let notifyMsg = '';
for (let i = 0; i < tasks.length; i++) {
const task = tasks[i];
// 待领取任务
if (task.task_status == '3') {
$.log(`领取[${task.task_name}]奖励:`);
const { isSuccess } = await this.receiveReward(task.task_id);
notifyMsg += `${isSuccess ? '🟢' : '❌'}领取[${task.task_name}]奖励${isSuccess ? '成功' : '失败!请查看日志'}\n`;
await wait(5, 15);
}
// 未完成任务
else if (task.task_status == '2') {
// 浏览文章任务
if (task.task_event_type == 'interactive.view.article') {
const { isSuccess } = await this.doViewTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 分享任务
else if (task.task_event_type == 'interactive.share') {
const { isSuccess } = await this.doShareTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 抽奖任务
else if (task.task_event_type == 'guide.crowd') {
const { isSuccess, code } = await this.doCrowdTask(task);
if (code !== 99) {
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
}
await wait(5, 15);
}
// 关注用户任务
else if (task.task_event_type == 'interactive.follow.user') {
const { isSuccess } = await this.doFollowUserTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 关注栏目任务
else if (task.task_event_type == 'interactive.follow.tag') {
const { isSuccess } = await this.doFollowTagTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 关注品牌
else if (task.task_event_type == 'interactive.follow.brand') {
const { isSuccess } = await this.doFollowBrandTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 收藏任务
else if (task.task_event_type == 'interactive.favorite') {
const { isSuccess } = await this.doFavoriteTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 点赞任务
else if (task.task_event_type == 'interactive.rating') {
const { isSuccess } = await this.doRatingTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
// 评论任务
else if (task.task_event_type == 'interactive.comment') {
if (process.env.SMZDM_COMMENT && String(process.env.SMZDM_COMMENT).length > 10) {
const { isSuccess } = await this.doCommentTask(task);
notifyMsg += this.getTaskNotifyMessage(isSuccess, task);
await wait(5, 15);
}
else {
$.log('🟡请设置 SMZDM_COMMENT 环境变量后才能做评论任务!');
}
}
}
}
$.log('查询是否有限时累计活动阶段奖励');
await wait(5, 15);
// 领取活动奖励
const { detail } = await this.getTaskList();
if (detail.cell_data && detail.cell_data.activity_reward_status == '1') {
$.log('有奖励,领取奖励');
await wait(5, 15);
const { isSuccess } = await this.receiveActivity(detail.cell_data);
notifyMsg += `${isSuccess ? '🟢' : '❌'}限时累计活动阶段奖励领取${isSuccess ? '成功' : '失败!请查看日志'}\n`;
}
else {
$.log('无奖励');
}
return notifyMsg || '无可执行任务';
}
getTaskNotifyMessage(isSuccess, task) {
return `${isSuccess ? '🟢' : '❌'}完成[${task.task_name}]任务${isSuccess ? '成功' : '失败!请查看日志'}\n`;
}
// 执行评论任务
async doCommentTask(task) {
$.log(`开始任务: ${task.task_name}`);
const articles = await this.getArticleList(20);
if (articles.length < 1) {
return {
isSuccess: false
};
}
// 随机选一篇文章来评论
const article = articles[Math.floor(Math.random() * articles.length)];
await wait(3, 10);
const {isSuccess, data } = await this.submitComment({
articleId: article.article_id,
channelId: article.article_channel_id,
content: process.env.SMZDM_COMMENT
});
if (!isSuccess) {
return {
isSuccess
};
}
$.log('删除评论');
await wait(20, 30);
const {isSuccess: result } = await this.removeComment(data.data.comment_ID);
if (!result) {
$.log('再试一次');
await wait(10, 20);
// 不成功再执行一次删除
await this.removeComment(data.data.comment_ID);
}
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行点赞任务
async doRatingTask(task) {
$.log(`开始任务: ${task.task_name}`);
let article;
if (task.task_description.indexOf('任意') >= 0 || task.task_redirect_url.link_val == '0' || !task.task_redirect_url.link_val) {
// 随机选一篇文章
const articles = await this.getArticleList(20);
if (articles.length < 1) {
return {
isSuccess: false
};
}
article = this.getOneByRandom(articles);
}
else if (task.task_redirect_url.link_type === 'lanmu') {
// 从栏目获取文章
const articles = await this.getArticleListFromLanmu(task.task_redirect_url.link_val, 20);
if (articles.length < 1) {
return {
isSuccess: false
};
}
article = this.getOneByRandom(articles);
}
else {
$.log('尚未支持');
return {
isSuccess: false
};
}
await wait(3, 10);
if (article.article_price) {
// 点值
await this.rating({
method: 'worth_cancel',
type: 3,
id: article.article_id,
channelId: article.article_channel_id
});
await wait(3, 10);
await this.rating({
method: 'worth_create',
type: 1,
id: article.article_id,
channelId: article.article_channel_id
});
await wait(3, 10);
await this.rating({
method: 'worth_cancel',
type: 3,
id: article.article_id,
channelId: article.article_channel_id
});
}
else {
// 点赞
await this.rating({
method: 'like_cancel',
id: article.article_id,
channelId: article.article_channel_id
});
await wait(3, 10);
await this.rating({
method: 'like_create',
id: article.article_id,
channelId: article.article_channel_id
});
await wait(3, 10);
await this.rating({
method: 'like_cancel',
id: article.article_id,
channelId: article.article_channel_id
});
}
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行收藏任务
async doFavoriteTask(task) {
$.log(`开始任务: ${task.task_name}`);
let articleId = '';
let channelId = '';
if (task.task_redirect_url.link_type === 'lanmu') {
// 从栏目获取文章
const articles = await this.getArticleListFromLanmu(task.task_redirect_url.link_val, 20);
if (articles.length < 1) {
return {
isSuccess: false
};
}
const article = this.getOneByRandom(articles);
articleId = article.article_id;
channelId = article.article_channel_id;
}
else if (task.task_redirect_url.link_type === 'tag') {
// 从 Tag 获取文章
const articles = await this.getArticleListFromTag(task.task_redirect_url.link_val, task.task_redirect_url.link_title, 20);
if (articles.length < 1) {
return {
isSuccess: false
};
}
const article = this.getOneByRandom(articles);
articleId = article.article_id;
channelId = article.article_channel_id;
}
else if (task.task_redirect_url.link_val == '0' || !task.task_redirect_url.link_val) {
// 随机选一篇文章
const articles = await this.getArticleList(20);
if (articles.length < 1) {
return {
isSuccess: false
};
}
const article = this.getOneByRandom(articles);
articleId = article.article_id;
channelId = article.article_channel_id;
}
else {
articleId = task.task_redirect_url.link_val;
// 获取文章信息
const articleDetail = await this.getArticleDetail(articleId);
if (articleDetail === false) {
return {
isSuccess: false
};
}
channelId = articleDetail.channel_id;
}
await wait(3, 10);
await this.favorite({
method: 'destroy',
id: articleId,
channelId
});
await wait(3, 10);
await this.favorite({
method: 'create',
id: articleId,
channelId
});
await wait(3, 10);
await this.favorite({
method: 'destroy',
id: articleId,
channelId
});
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行关注用户任务
async doFollowUserTask(task) {
$.log(`开始任务: ${task.task_name}`);
// 随机选一个用户
const user = await this.getUserByRandom();
if (!user) {
return {
isSuccess: false
};
}
await wait(3, 10);
for (let i = 0; i < Number(task.task_even_num - task.task_finished_num); i++) {
if (user.is_follow == '1') {
await this.follow({
method: 'destroy',
type: 'user',
keyword: user.keyword
});
await wait(3, 10);
}
await this.follow({
method: 'create',
type: 'user',
keyword: user.keyword
});
await wait(3, 10);
if (user.is_follow == '0') {
await this.follow({
method: 'destroy',
type: 'user',
keyword: user.keyword
});
}
await wait(3, 10);
}
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行关注栏目任务(先取关,再关注,最后取关)
async doFollowTagTask(task) {
$.log(`开始任务: ${task.task_name}`);
let lanmuId = '';
if (task.task_redirect_url.link_val == '0') {
const tag = await this.getTagByRandom();
if (tag === false) {
return {
isSuccess: false
};
}
lanmuId = tag.lanmu_id;
await wait(3, 10);
}
else {
lanmuId = task.task_redirect_url.link_val;
}
// 获取栏目信息
const tagDetail = await this.getTagDetail(lanmuId);
if (!tagDetail.lanmu_id) {
$.log('获取栏目信息失败!');
return {
isSuccess: false
};
}
await wait(3, 10);
await this.follow({
method: 'destroy',
type: 'tag',
keywordId: tagDetail.lanmu_id,
keyword: tagDetail.lanmu_info.lanmu_name
});
await wait(3, 10);
await this.follow({
method: 'create',
type: 'tag',
keywordId: tagDetail.lanmu_id,
keyword: tagDetail.lanmu_info.lanmu_name
});
await wait(3, 10);
await this.follow({
method: 'destroy',
type: 'tag',
keywordId: tagDetail.lanmu_id,
keyword: tagDetail.lanmu_info.lanmu_name
});
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行关注品牌任务(先取关,再关注,最后取关)
async doFollowBrandTask(task) {
$.log(`开始任务: ${task.task_name}`);
// 获取品牌信息
const brandDetail = await this.getBrandDetail(task.task_redirect_url.link_val);
if (!brandDetail.id) {
return {
isSuccess: false
};
}
await wait(3, 10);
await this.followBrand({
method: 'dingyue_lanmu_del',
keywordId: brandDetail.id,
keyword: brandDetail.title
});
await wait(3, 10);
await this.followBrand({
method: 'dingyue_lanmu_add',
keywordId: brandDetail.id,
keyword: brandDetail.title
});
await wait(3, 10);
await this.followBrand({
method: 'dingyue_lanmu_del',
keywordId: brandDetail.id,
keyword: brandDetail.title
});
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行抽奖任务
async doCrowdTask(task) {
$.log(`开始任务: ${task.task_name}`);
let { isSuccess, data } = await this.getCrowd('免费', 0);
if (!isSuccess) {
if (process.env.SMZDM_CROWD_SILVER_5 == 'yes') {
({ isSuccess, data } = await this.getCrowd('5碎银子', 5));
if (!isSuccess) {
return {
isSuccess,
code: 99
};
}
}
else {
$.log('🟡请设置 SMZDM_CROWD_SILVER_5 环境变量值为 yes 后才能进行5碎银子抽奖');
return {
isSuccess,
code: 99
};
}
}
await wait(5, 15);
const result = await this.joinCrowd(data);
if (!result.isSuccess) {
return {
isSuccess: result.isSuccess
};
}
$.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行文章分享任务
async doShareTask(task) {
$.log(`开始任务: ${task.task_name}`);
let articles = [];
if (task.article_id == '0') {
articles = await this.getArticleList(task.task_even_num - task.task_finished_num);
await wait(3, 10);
}
else {
articles = [{
article_id: task.article_id,
article_channel_id: task.channel_id
}];
}
for (let i = 0; i < articles.length; i++) {
$.log(`开始分享第 ${i + 1} 篇文章...`);
const article = articles[i];
if (task.task_redirect_url.link_type != 'other') {
// 模拟打开文章
if (/detail_haojia/i.test(task.task_redirect_url.scheme_url)) {
await this.getHaojiaDetail(article.article_id);
}
else {
await this.getArticleDetail(article.article_id);
}
await wait(8, 20);
}
await this.shareArticleDone(article.article_id, article.article_channel_id);
await this.shareDailyReward(article.article_channel_id);
await this.shareCallback(article.article_id, article.article_channel_id);
await wait(5, 15);
}
$.log('领取奖励');
await wait(3, 10);
return await this.receiveReward(task.task_id);
}
// 执行浏览任务
async doViewTask(task) {
$.log(`开始任务: ${task.task_name}`);
let articles = [];
let isRead = true;
if (task.article_id == '0') {
isRead = true;
articles = await this.getArticleList(task.task_even_num - task.task_finished_num);
await wait(3, 10);
}
else {
for (let i = 0; i < task.task_even_num - task.task_finished_num; i++) {
articles.push({
article_id: task.article_id,
article_channel_id: task.channel_id
});
}
isRead = task.task_redirect_url.link_val != '';
}
for (let i = 0; i < articles.length; i++) {
$.log(`开始阅读第 ${i + 1} 篇文章...`);
const article = articles[i];
if (isRead) {
// 模拟打开文章
if (/detail_haojia/i.test(task.task_redirect_url.scheme_url)) {
await this.getHaojiaDetail(article.article_id);
}
else {
await this.getArticleDetail(article.article_id);
}
}
$.log('模拟阅读文章');
await wait(20, 50);
const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/task/event_view_article_sync', {
method: 'post',
headers: this.getHeaders(),
data: {
article_id: article.article_id,
channel_id: article.article_channel_id,
task_id: task.task_id
}
});
if (isSuccess) {
$.log('完成阅读成功。');
}
else {
$.log(`完成阅读失败!${response}`);
}
await wait(5, 15);
}
$.log('领取奖励');
await wait(3, 10);
return await this.receiveReward(task.task_id);
}
// 领取活动奖励
async receiveActivity(activity) {
$.log(`领取奖励: ${activity.activity_name}`);
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_receive', {
method: 'post',
headers: this.getHeaders(),
data: {
activity_id: activity.activity_id
}
});
if (isSuccess) {
$.log(removeTags(data.data.reward_msg));
return {
isSuccess
};
}
else {
$.log(`领取奖励失败!${response}`);
return {
isSuccess
};
}
}
// 关注/取关
async follow({keywordId, keyword, type, method}) {
let touchstone = '';
if (type === 'user') {
touchstone = this.getTouchstoneEvent({
event_value: {
cid: 'null',
is_detail: false,
p: '1'
},
sourceMode: '我的_我的任务页',
sourcePage: 'Android/关注/达人/爆料榜',
upperLevel_url: '关注/达人/推荐/'
});
}
else if (type === 'tag') {
touchstone = this.getTouchstoneEvent({
event_value: {
cid: 'null',
is_detail: false
},
sourceMode: '栏目页',
sourcePage: `Android/栏目页/${keyword}/${keywordId}/`,
source_page_type_id: String(keywordId),
upperLevel_url: '个人中心/赚奖励/',
source_area: {
lanmu_id: String(keywordId),
prev_source_scence: '我的_我的任务页'
}
});
}
const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dingyue/${method}`, {
method: 'post',
headers: this.getHeaders(),
data: {
touchstone_event: touchstone,
refer: '',
keyword_id: keywordId,
keyword,
type
}
});
if (isSuccess) {
$.log(`${method} 关注成功: ${keyword}`);
}
else {
$.log(`${method} 关注失败!${response}`);
}
return {
isSuccess,
response
};
}
// 随机获取用户
async getUserByRandom() {
const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/tuijian/search_result', {
method: 'post',
headers: this.getHeaders(),
data: {
nav_id: 0,
page: 1,
type: 'user',
time_code: ''
}
});
if (isSuccess) {
return data.data.rows[Math.floor(Math.random() * data.data.rows.length)];
}
else {
$.log(`获取用户列表失败!${response}`);
return false;
}
}
// 参加抽奖
async joinCrowd(id) {
const { isSuccess, data, response } = await requestApi('https://zhiyou.m.smzdm.com/user/crowd/ajax_participate', {
method: 'post',
sign: false,
headers: {
...this.getHeadersForWeb(),
Origin: 'https://zhiyou.m.smzdm.com',
Referer: `https://zhiyou.m.smzdm.com/user/crowd/p/${id}/`
},
data: {
crowd_id: id,
sourcePage: `https://zhiyou.m.smzdm.com/user/crowd/p/${id}/`,
client_type: 'android',
sourceRoot: '个人中心',
sourceMode: '幸运屋抽奖',
price_id: 1
}
});
if (isSuccess) {
$.log(removeTags(data.data.msg));
}
else {
$.log(`参加免费抽奖失败: ${response}`);
}
return {
isSuccess,
response
};
}
// 获取抽奖信息
async getCrowd(name, price) {
const { isSuccess, data, response } = await requestApi('https://zhiyou.smzdm.com/user/crowd/', {
sign: false,
parseJSON: false,
headers: this.getHeadersForWeb()
});
const re = new RegExp(`<button\\s+([^>]+?)>\\s+?<div\\s+[^>]+?>\\s*${name}(?:抽奖)?\\s*<\\/div>\\s+<span\\s+class="reduceNumber">-${price}<\\/span>[\\s\\S]+?<\\/button>`, 'ig');
if (isSuccess) {
const crowds = [];
let match;
while ((match = re.exec(data)) !== null) {
crowds.push(match[1]);
}
if (crowds.length < 1) {
$.log(`未找到${name}抽奖`);
return {
isSuccess: false
};
}
let crowd;
if (price > 0 && process.env.SMZDM_CROWD_KEYWORD) {
crowd = crowds.find((item) => {
const match = item.match(/data-title="([^"]+)"/i);
return (match && match[1].indexOf(process.env.SMZDM_CROWD_KEYWORD) >= 0);
});
if (!crowd) {
$.log('未找到符合关键词的抽奖,执行随机选取');
crowd = this.getOneByRandom(crowds);
}
}
else {
crowd = this.getOneByRandom(crowds);
}
const matchCrowd = crowd.match(/data-crowd_id="(\d+)"/i);
if (matchCrowd) {
$.log(`${name}抽奖ID: ${matchCrowd[1]}`);
return {
isSuccess: true,
data: matchCrowd[1]
};
}
else {
$.log(`未找到${name}抽奖ID`);
return {
isSuccess: false
};
}
}
else {
$.log(`获取${name}抽奖失败: ${response}`);
return {
isSuccess: false
};
}
}
// 分享完成
async shareArticleDone(articleId, channelId) {
const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/share/complete_share_rule', {
method: 'post',
headers: this.getHeaders(),
data: {
token: this.token,
article_id: articleId,
channel_id: channelId,
tag_name: 'gerenzhongxin'
}
});
if (isSuccess) {
$.log('完成分享成功。');
return {
isSuccess,
msg: '完成分享成功。'
};
}
else {
$.log(`完成分享失败!${response}`);
return {
isSuccess: false,
msg: '完成分享失败!'
};
}
}
// 分享完成后回调接口
async shareCallback(articleId, channelId) {
const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/share/callback', {
method: 'post',
headers: this.getHeaders(),
data: {
token: this.token,
article_id: articleId,
channel_id: channelId,
touchstone_event: this.getTouchstoneEvent({
event_value: {
aid: articleId,
cid: channelId,
is_detail: true,
pid: '无'
},
sourceMode: '排行榜_社区_好文精选',
sourcePage: `Android/长图文/P/${articleId}/`,
upperLevel_url: '排行榜/社区/好文精选/文章_24H/'
})
}
});
if (isSuccess) {
$.log('分享回调完成。');
return {
isSuccess,
msg: ''
};
}
else {
$.log(`分享回调失败!${response}`);
return {
isSuccess,
msg: '分享回调失败!'
};
}
}
// 分享的每日奖励(貌似没啥用)
async shareDailyReward(channelId) {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/share/daily_reward', {
method: 'post',
headers: this.getHeaders(),
data: {
token: this.token,
channel_id: channelId
}
});
if (isSuccess) {
$.log(data.data.reward_desc);
return {
isSuccess,
msg: data.data.reward_desc
};
}
else {
if (data) {
$.log(data.error_msg);
return {
isSuccess,
msg: data.error_msg
};
}
else {
$.log(`分享每日奖励请求失败!${response}`);
return {
isSuccess,
msg: '分享每日奖励请求失败!'
};
}
}
}
// 获取文章列表
async getArticleList(num = 1) {
const { isSuccess, data, response } = await requestApi('https://article-api.smzdm.com/ranking_list/articles', {
headers: this.getHeaders(),
data: {
offset: 0,
channel_id: 76,
tab: 2,
order: 0,
limit: 20,
exclude_article_ids: '',
stream: 'a',
ab_code: 'b'
}
});
if (isSuccess) {
// 取前 num 个做任务
return data.data.rows.slice(0, num);
}
else {
$.log(`获取文章列表失败: ${response}`);
return [];
}
}
async getRobotToken() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/robot/token', {
method: 'post',
headers: this.getHeaders()
});
if (isSuccess) {
return data.data.token;
}
else {
$.log(`Robot Token 获取失败!${response}`);
return false;
}
}
// 领取任务奖励
async receiveReward(taskId) {
const robotToken = await this.getRobotToken();
if (robotToken === false) {
return {
isSuccess,
msg: '领取任务奖励失败!'
};
}
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_task_receive', {
method: 'post',
headers: this.getHeaders(),
data: {
robot_token: robotToken,
geetest_seccode: '',
geetest_validate: '',
geetest_challenge: '',
captcha: '',
task_id: taskId
}
});
if (isSuccess) {
const msg = removeTags(data.data.reward_msg);
$.log(msg);
return {
isSuccess,
msg
};
}
else {
$.log(`领取任务奖励失败!${response}`);
return {
isSuccess,
msg: '领取任务奖励失败!'
};
}
}
// 获取任务列表
async getTaskList() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/list_v2', {
method: 'post',
headers: this.getHeaders()
});
if (isSuccess) {
let tasks = [];
if (data.data.rows[0]) {
data.data.rows[0].cell_data.activity_task.accumulate_list.task_list_v2.forEach(item => {
tasks = tasks.concat(item.task_list);
});
return {
tasks: tasks,
detail: data.data.rows[0]
};
}
else {
$.log(`任务列表获取失败!${response}`);
return {
tasks: [],
detail: {}
};
}
}
else {
$.log(`任务列表获取失败!${response}`);
return {
tasks: [],
detail: {}
};
}
}
// 获取栏目信息
async getTagDetail(id) {
const { isSuccess, data, response } = await requestApi('https://common-api.smzdm.com/lanmu/config_data', {
headers: this.getHeaders(),
data: {
middle_page: '',
tab_selects: '',
redirect_params: id
}
});
if (isSuccess) {
return data.data;
}
else {
$.log(`获取栏目信息失败!${response}`);
return {};
}
}
// 获取栏目列表
async getTagByRandom() {
const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/tuijian/search_result', {
headers: this.getHeaders(),
data: {
time_code: '',
nav_id: '',
type: 'tag',
limit: 20
}
});
if (isSuccess) {
return data.data.rows[Math.floor(Math.random() * data.data.rows.length)];
}
else {
$.log(`获取栏目列表失败!${response}`);
return false;
}
}
// 获取文章详情
async getArticleDetail(id) {
const { isSuccess, data, response } = await requestApi(`https://article-api.smzdm.com/article_detail/${id}`, {
headers: this.getHeaders(),
data: {
comment_flow: '',
hashcode: '',
lastest_update_time: '',
uhome: 0,
imgmode: 0,
article_channel_id: 0,
h5hash: ''
}
});
if (isSuccess) {
return data.data;
}
else {
$.log(`获取文章详情失败!${response}`);
return false;
}
}
// 获取好价详情
async getHaojiaDetail(id) {
const { isSuccess, data, response } = await requestApi(`https://haojia-api.smzdm.com/detail/${id}`, {
headers: this.getHeaders(),
data: {
imgmode: 0,
hashcode: '',
h5hash: ''
}
});
if (isSuccess) {
return data.data;
}
else {
$.log(`获取好价详情失败!${response}`);
return false;
}
}
// 收藏
async favorite({id, channelId, method}) {
const { isSuccess, response } = await requestApi(`https://user-api.smzdm.com/favorites/${method}`, {
method: 'post',
headers: this.getHeaders(),
data: {
touchstone_event: this.getTouchstoneEvent({
event_value: {
aid: id,
cid: channelId,
is_detail: true
},
sourceMode: '我的_我的任务页',
sourcePage: `Android/长图文/P/${id}/`,
upperLevel_url: '个人中心/赚奖励/'
}),
token: this.token,
id,
channel_id: channelId
}
});
if (isSuccess) {
$.log(`${method} 收藏成功: ${id}`);
}
else {
$.log(`${method} 收藏失败!${response}`);
}
return {
isSuccess,
response
};
}
getTouchstoneEvent(obj) {
const defaultObj = {
search_tv: 'f',
sourceRoot: '个人中心',
trafic_version: '113_a,115_b,116_e,118_b,131_b,132_b,134_b,136_b,139_a,144_a,150_b,153_a,179_a,183_b,185_b,188_b,189_b,193_a,196_b,201_a,204_a,205_a,208_b,222_b,226_a,228_a,22_b,230_b,232_b,239_b,254_a,255_b,256_b,258_b,260_b,265_a,267_a,269_a,270_c,273_b,276_a,278_a,27_a,280_a,281_a,283_b,286_a,287_a,290_a,291_b,295_a,302_a,306_b,308_b,312_b,314_a,317_a,318_a,322_b,325_a,326_a,329_b,32_c,332_b,337_c,341_a,347_a,349_b,34_a,351_a,353_b,355_a,357_b,366_b,373_B,376_b,378_b,380_b,388_b,391_b,401_d,403_b,405_b,407_b,416_a,421_a,424_b,425_b,427_a,436_b,43_j,440_a,442_a,444_b,448_a,450_b,451_b,454_b,455_a,458_c,460_a,463_c,464_b,466_b,467_b,46_a,470_b,471_b,474_b,475_a,484_b,489_a,494_b,496_b,498_a,500_a,503_b,507_b,510_bb,512_b,515_a,520_a,522_b,525_c,527_b,528_a,59_a,65_b,85_b,102_b,103_a,106_b,107_b,10_f,11_b,120_a,143_b,157_g,158_c,159_c,160_f,161_d,162_e,163_a,164_a,165_a,166_f,171_a,174_a,175_e,176_d,209_b,225_a,235_a,236_b,237_c,272_b,296_c,2_f,309_a,315_b,334_a,335_d,339_b,346_b,361_b,362_d,367_b,368_a,369_e,374_b,381_c,382_b,383_d,385_b,386_c,389_i,38_b,390_d,396_a,398_b,3_a,413_a,417_a,418_c,419_b,420_b,422_e,428_a,430_a,431_d,432_e,433_a,437_b,438_c,478_b,479_b,47_a,480_a,481_b,482_a,483_a,488_b,491_j,492_j,504_b,505_a,514_a,518_b,52_d,53_d,54_v,55_z1,56_z3,66_a,67_i,68_a1,69_i,74_i,77_d,93_a',
tv: 'z1'
};
return JSON.stringify({...defaultObj, ...obj});
}
// 关注品牌
async followBrand({keywordId, keyword, method}) {
const touchstone = this.getTouchstoneEvent({
event_value: {
cid: '44',
is_detail: true,
aid: String(keywordId)
},
sourceMode: '百科_品牌详情页',
sourcePage: `Android/其他/品牌详情页/${keyword}/${keywordId}/`,
upperLevel_url: '个人中心/赚奖励/'
});
const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dy/util/api/user_action`, {
method: 'post',
headers: this.getHeaders(),
data: {
action: method,
params: JSON.stringify({
keyword: keywordId,
keyword_id: keywordId,
type: 'brand'
}),
refer: `Android/其他/品牌详情页/${keyword}/${keywordId}/`,
touchstone_event: touchstone
}
});
if (isSuccess) {
$.log(`${method} 关注成功: ${keyword}`);
}
else {
$.log(`${method} 关注失败!${response}`);
}
return {
isSuccess,
response
};
}
// 获取品牌信息
async getBrandDetail(id) {
const { isSuccess, data, response } = await requestApi('https://brand-api.smzdm.com/brand/brand_basic', {
headers: this.getHeaders(),
data: {
brand_id: id
}
});
if (isSuccess) {
return data.data;
}
else {
$.log(`获取品牌信息失败!${response}`);
return {};
}
}
// 根据栏目信息获取文章列表
async getArticleListFromLanmu(id, num = 1) {
const lanmuDetail = await this.getTagDetail(id);
if (!lanmuDetail.lanmu_id) {
return [];
}
const { isSuccess, data, response } = await requestApi('https://common-api.smzdm.com/lanmu/list_data', {
headers: this.getHeaders(),
data: {
price_lt: '',
order: '',
category_ids: '',
price_gt: '',
referer_article: '',
tag_params: '',
mall_ids: '',
time_sort: '',
page: 1,
params: id,
limit: 20,
tab_params: lanmuDetail.tab[0].params
}
});
if (isSuccess) {
// 取前 num 个做任务
return data.data.rows.slice(0, num);
}
else {
$.log(`获取文章列表失败: ${response}`);
return [];
}
}
// 点赞
async rating({id, channelId, method, type}) {
const { isSuccess, response } = await requestApi(`https://user-api.smzdm.com/rating/${method}`, {
method: 'post',
headers: this.getHeaders(),
data: {
touchstone_event: this.getTouchstoneEvent({
event_value: {
aid: id,
cid: channelId,
is_detail: true
},
sourceMode: '栏目页',
sourcePage: `Android//P/${id}/`,
upperLevel_url: '栏目页///'
}),
token: this.token,
id,
channel_id: channelId,
wtype: type
}
});
if (isSuccess) {
$.log(`${method} 点赞成功: ${id}`);
}
else {
$.log(`${method} 点赞失败!${response}`);
}
return {
isSuccess,
response
};
}
// 发表评论
async submitComment({ articleId, channelId, content }) {
const { isSuccess, data, response } = await requestApi('https://comment-api.smzdm.com/comments/submit', {
method: 'post',
headers: this.getHeaders(),
data: {
touchstone_event: this.getTouchstoneEvent({
event_value: {
aid: articleId,
cid: channelId,
is_detail: true
},
sourceMode: '好物社区_全部',
sourcePage: `Android/长图文/${articleId}/评论页/`,
upperLevel_url: '好物社区/首页/全部/',
sourceRoot: '社区'
}),
is_like: 3,
reply_from: 3,
smiles: 0,
atta: 0,
parentid: 0,
token: this.token,
article_id: articleId,
channel_id: channelId,
content
}
});
if (isSuccess) {
$.log(`评论发表成功: ${data.data.comment_ID}`);
}
else {
$.log(`评论发表失败!${response}`);
}
return {
isSuccess,
data,
response
};
}
// 删除评论
async removeComment(id) {
const { isSuccess, response } = await requestApi('https://comment-api.smzdm.com/comments/delete_comment', {
method: 'post',
headers: this.getHeaders(),
data: {
comment_id: id
}
});
if (isSuccess) {
$.log(`评论删除成功: ${id}`);
}
else {
$.log(`评论删除失败!${response}`);
}
return {
isSuccess,
response
};
}
// 获取 Dingyue 状态
async getDingyueStatus(name) {
const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/dingyue/follow_status', {
method: 'post',
headers: this.getHeaders(),
data: {
rules: JSON.stringify([{
type: 'tag',
keyword: name
}])
}
});
if (isSuccess) {
return data;
}
else {
$.log(`获取订阅状态失败: ${response}`);
return {};
}
}
// 根据 Tag ID 获取文章列表
async getArticleListFromTag(id, name, num = 1) {
const status = this.getDingyueStatus(name);
const { isSuccess, data, response } = await requestApi('https://tag-api.smzdm.com/theme/detail_feed', {
headers: this.getHeaders(),
data: {
article_source: 1,
past_num: 0,
feed_sort: 2,
smzdm_id: status.smzdm_id,
tag_id: id,
name,
time_sort: 0,
page: 1,
article_tab: 0,
limit: 20
}
});
if (isSuccess) {
// 取前 num 个做任务
return data.data.rows.slice(0, num);
}
else {
$.log(`获取文章列表失败: ${response}`);
return [];
}
}
}
!(async () => {
const cookies = getEnvCookies();
if (cookies === false) {
$.log('\n请先设置 SMZDM_COOKIE 环境变量');
return;
}
let notifyContent = '';
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i];
if (!cookie) {
continue;
}
if (i > 0) {
$.log();
await wait(10, 30);
$.log();
}
const sep = `\n****** 账号${i + 1} ******\n`;
$.log(sep);
const bot = new SmzdmTaskBot(cookie);
const msg = await bot.run();
notifyContent += `${sep}${msg}\n`;
}
$.log();
await notify.sendNotify($.name, notifyContent);
})().catch((e) => {
$.log('', `${$.name}, 失败! 原因: ${e}!`, '')
}).finally(() => {
$.done();
});