加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
library_task.js 35.42 KB
一键复制 编辑 原始数据 按行查看 历史
Hex 提交于 2023-11-21 16:13 . Update library_task.js
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451
const { SmzdmBot, requestApi, removeTags, wait } = require('./bot');
// ------------------------------------
class SmzdmTaskBot extends SmzdmBot {
constructor(cookie, env) {
super(cookie);
this.$env = env;
}
// 执行任务列表中的任务
async doTasks(tasks) {
let notifyMsg = '';
for (let i = 0; i < tasks.length; i++) {
const task = tasks[i];
// 待领取任务
if (task.task_status == '3') {
this.$env.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 {
this.$env.log('🟡请设置 SMZDM_COMMENT 环境变量后才能做评论任务!');
}
}
}
}
return notifyMsg;
}
getTaskNotifyMessage(isSuccess, task) {
return `${isSuccess ? '🟢' : ''}完成[${task.task_name}]任务${isSuccess ? '成功' : '失败!请查看日志'}\n`;
}
// 执行评论任务
async doCommentTask(task) {
this.$env.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
};
}
this.$env.log('删除评论');
await wait(20, 30);
const {isSuccess: result } = await this.removeComment(data.data.comment_ID);
if (!result) {
this.$env.log('再试一次');
await wait(10, 20);
// 不成功再执行一次删除
await this.removeComment(data.data.comment_ID);
}
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行点赞任务
async doRatingTask(task) {
this.$env.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 if (task.task_redirect_url.link != '' && task.task_redirect_url.link_val != '') {
const channelId = await this.getArticleChannelIdForTesting(task.task_redirect_url.link);
if (!channelId) {
return {
isSuccess: false
};
}
article = {
'article_id': task.task_redirect_url.link_val,
'article_channel_id': channelId
};
}
else {
this.$env.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
});
}
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行收藏任务
async doFavoriteTask(task) {
this.$env.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
});
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行关注用户任务
async doFollowUserTask(task) {
this.$env.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);
}
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行关注栏目任务(先取关,再关注,最后取关)
async doFollowTagTask(task) {
this.$env.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) {
this.$env.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
});
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行关注品牌任务(先取关,再关注,最后取关)
async doFollowBrandTask(task) {
this.$env.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
});
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行抽奖任务
async doCrowdTask(task) {
this.$env.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 {
this.$env.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
};
}
this.$env.log('领取奖励');
await wait(5, 15);
return await this.receiveReward(task.task_id);
}
// 执行文章分享任务
async doShareTask(task) {
this.$env.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++) {
this.$env.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);
}
this.$env.log('领取奖励');
await wait(3, 10);
return await this.receiveReward(task.task_id);
}
// 执行浏览任务
async doViewTask(task) {
this.$env.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++) {
this.$env.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);
}
}
this.$env.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) {
this.$env.log('完成阅读成功。');
}
else {
this.$env.log(`完成阅读失败!${response}`);
}
await wait(5, 15);
}
this.$env.log('领取奖励');
await wait(3, 10);
return await this.receiveReward(task.task_id);
}
// 关注/取关
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) {
this.$env.log(`${method} 关注成功: ${keyword}`);
}
else {
this.$env.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 {
this.$env.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) {
this.$env.log(removeTags(data.data.msg));
}
else {
this.$env.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) {
this.$env.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) {
this.$env.log('未找到符合关键词的抽奖,执行随机选取');
crowd = this.getOneByRandom(crowds);
}
}
else {
crowd = this.getOneByRandom(crowds);
}
const matchCrowd = crowd.match(/data-crowd_id="(\d+)"/i);
if (matchCrowd) {
this.$env.log(`${name}抽奖ID: ${matchCrowd[1]}`);
return {
isSuccess: true,
data: matchCrowd[1]
};
}
else {
this.$env.log(`未找到${name}抽奖ID`);
return {
isSuccess: false
};
}
}
else {
this.$env.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) {
this.$env.log('完成分享成功。');
return {
isSuccess,
msg: '完成分享成功。'
};
}
else {
this.$env.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) {
this.$env.log('分享回调完成。');
return {
isSuccess,
msg: ''
};
}
else {
this.$env.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) {
this.$env.log(data.data.reward_desc);
return {
isSuccess,
msg: data.data.reward_desc
};
}
else {
if (data) {
this.$env.log(data.error_msg);
return {
isSuccess,
msg: data.error_msg
};
}
else {
this.$env.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 {
this.$env.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 {
this.$env.log(`Robot Token 获取失败!${response}`);
return false;
}
}
// 获取栏目信息
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 {
this.$env.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 {
this.$env.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 {
this.$env.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 {
this.$env.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) {
this.$env.log(`${method} 收藏成功: ${id}`);
}
else {
this.$env.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) {
this.$env.log(`${method} 关注成功: ${keyword}`);
}
else {
this.$env.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 {
this.$env.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 {
this.$env.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) {
this.$env.log(`${method} 点赞成功: ${id}`);
}
else {
this.$env.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) {
this.$env.log(`评论发表成功: ${data.data.comment_ID}`);
}
else {
this.$env.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) {
this.$env.log(`评论删除成功: ${id}`);
}
else {
this.$env.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 {
this.$env.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 {
this.$env.log(`获取文章列表失败: ${response}`);
return [];
}
}
// 通过 url 获取文章 channel_id
async getArticleChannelIdForTesting(url) {
const { isSuccess, response } = await requestApi(url, {
method: 'get',
headers: this.getHeaders(),
parseJSON: false,
sign: false
});
if (!isSuccess) {
this.$env.log(`获取文章信息失败!${response}`);
return false;
}
// 通过正则提取页面中的 channel_id
const re = /'channel_id'\s*:\s*'(\d+)'/;
const matchRet = response.match(re);
if (!matchRet) {
this.$env.log(`获取文章信息失败!${response}`);
return false;
}
return matchRet[1];
}
}
module.exports = {
SmzdmTaskBot
};
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化