2025年3月10日星期一

魅族任务脚本

1.购买服务器

阿里云:

服务器购买地址

https://t.aliyun.com/U/C6sVsb

若失效,可用地址

https://www.aliyun.com/activity/wuying/dj?source=5176.29345612&userCode=49hts92d

腾讯云:

https://curl.qcloud.com/wJpWmSfU

若失效,可用地址

https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console

华为云

https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905

2.部署教程

2024年最新青龙面板跑脚本教程(一)持续更新中

3.代码如下

const axios = require("axios");var sid = ""var uid = ""var cookie = `MEIZUSTORESESSIONID=`const MeiZu = config.meizuvar nickname = "未命名"var Mcoin = 0;let sleep = ms => new Promise(resolve => setTimeout(resolve, ms));// 封装meizuGet方法async function meizuGet(url, data=null, method="get") {	const config = {		method: method,		url: url,		headers: {			Referer"https://www.meizu.cn",			"local-time"Date.now(),			"android-app-channel""meizu",			"app-mode":1,			"user-agent""android_app_myplus",			"android-app-version_name""6.5.9",			"android-app-version-code"50000061,			cookie		},		...(method === 'post' && {			data		}),	};	try {	//console.log(config)		const response = await axios(config);		return response;catch (error) {		console.error('请求错误', error.response.data.error);		return {error:error.response.data.error,code:400};	}}
// 获取cookie/*async function getCookie() { const tokenUrl = `https://myplus-api.meizu.cn/myplus-qing/ug/app/start`; const response = await meizuGet(tokenUrl, "", 'get'); if (response && response.data && response.data.code === 200) { nickname = response.data.data.member.nickname     let rcookie = response.headers["set-cookie"][0] scookie = rcookie.split(";")[0] cookie += scookie } return cookie;}
*/


// 获取access_tokenasync function getAccessToken() {  const url = 'https://api.meizu.com/oauth/token';  const data = new URLSearchParams({    grant_type'remember_me',    scope'trust',    remember_meMeiZu.remember,    client_secretMeiZu.secret,    client_idMeiZu.clientid,    account_belong'MEIZU'  });
  try {    const response = await meizuGet(url, data,"post");    if (response.data && response.data.access_token) {      console.log('获取access_token成功');      uid = response.data.user_id      nickname = response.data.nickname      return response.data.access_token;    } else {      console.error('获取access_token失败', response);      return null;    }  } catch (error) { //   console.error('获取access_token时发生错误', error.response.data);    return null;  }}
// 使用access_token获取sidasync function getSid(accessToken) {  const url = `https://myplus-api.meizu.cn/myplus-login/g/app/login?token=${accessToken}`;  try {    const response = await meizuGet(url);    if (response.data && response.data.code==200) {      sid = response.data.data[0].value      console.log('获取sid成功');      cookie += sid+";"      return cookie    } else {      console.error('获取sid失败', response.data.msg);      return null;    }  } catch (error) {    console.error('获取sid时发生错误', error);    return null;  }}

async function getCookie() {  const accessToken = await getAccessToken();  if (!accessToken) {    console.error('无法获取access_token');    return null;  }  cookie = await getSid(accessToken);  if (!cookie) {    console.error('无法获取sid');    return null;  }console.log("获取sid成功: "+sid)  return `MEIZUSTORESESSIONID=${sid};` ;}

// 查询任务列表函数async function queryTasks() { const url = `https://myplus-api.meizu.cn/myplus-muc/u/user/point/task/M_COIN`; try { const response = await meizuGet(url, {}, 'post'); if (response && response.data && response.data.code === 200) { console.log('任务列表查询成功'); Mcoin = response.data.data.mcoin return response.data.data.list// 返回任务列表else { console.log('任务列表查询失败', response.data.msg); return []; }catch (error) { console.error('查询任务列表时发生错误', error); return []; }}async function getreply(){let res = await meizuGet("https://myplus-api.meizu.cn/myplus-qing/ug/comment/rapid/list")if(res.data.code==200return res.data.data.list[0]else return "共赴山海,热爱无界"}async function signInMzStore(uid, sid) { const url = `https://app.store.res.meizu.com/mzstore/sign/add`; const postData = `uid=${uid}&sid=${sid}`; const response = await meizuGet(url, postData, "post");}
// 发表主题函数async function createTopic(title, content, forumId, topicIds) { const url = `https://myplus-api.meizu.cn/myplus-qing/u/content/auth/create/v4`; const data = { ats: [], content`[{\"c\":[{\"id\":\"${topicIds}\",\"n\":\"${title}\",\"c\":[{\"x\":\"\"}],\"t\":\"tc\"}],\"t\":\"p\"}]`, deviceName"meizu18pro"// 这里可以根据实际情况修改设备名称 enterId0, format1, forumId: forumId, forumTagId0, locationId0, pollId0, title: title, topicIds: topicIds }; try { const response = await meizuGet(url, data, 'post'); if (response && response.data && response.data.code === 200) { console.log(`主题 "${title}" 发表成功,主题ID:${response.data.data.id}`);else { console.log(`主题 "${title}" 发表失败`, response.data.msg); }catch (error) { console.error(`发表主题 "${title}" 时发生错误`, error); }}
// 收藏主题函数async function addFavorite(contentId) { const url = `https://myplus-api.meizu.cn/myplus-qing/u/content/auth/fav/${contentId}?id=${contentId}`; try { const response = await meizuGet(url, ""'post'); if (response && response.data && response.data.code === 200) { console.log(`主题ID ${contentId} 收藏成功`);else { console.log(`主题ID ${contentId} 收藏失败`, response.data.msg); }catch (error) { console.error(`收藏主题ID ${contentId} 时发生错误`, error); }}
// 评论主题函数async function addComment(contentId, comment) { const url = `https://myplus-api.meizu.cn/myplus-qing/u/comment/add/v2`; const data = { ats: [], contentawait getreply(), contentId: contentId, createTimeMath.floor(Date.now() / 1000), // 当前时间的Unix时间戳 deviceName"meizu18pro"// 这里可以根据实际情况修改设备名称 isChp0, parentId0, replyId0, replyUid0 }; try { const response = await meizuGet(url, data, 'post', data); if (response && response.data && response.data.code === 200) { console.log(`主题ID ${contentId} 评论成功`);else { console.log(`主题ID ${contentId} 评论失败`, response.data.msg); }catch (error) { console.error(`评论主题ID ${contentId} 时发生错误`, error); }}
// 关注用户函数async function followUser(uid) { const url = `https://myplus-api.meizu.cn/myplus-qing/u/member/follow?uid=${uid}`; try { const response = await meizuGet(url, ""'post'); if (response && response.data && response.data.code === 200) { console.log(`用户ID ${uid} 关注成功`);else { console.log(`用户ID ${uid} 关注失败`, response.data.msg); }catch (error) { console.error(`关注用户ID ${uid} 时发生错误`, error); }}


async function addLike(id) { const url = `https://myplus-api.meizu.cn/myplus-qing/u/like/content/add?id=${id}`; try { const response = await meizuGet(url,""'get'); if (response && response.data && response.data.code === 200) { console.log(`帖子ID ${id} 点赞成功`);else { console.log(`帖子ID ${id} 点赞失败`, response.data.msg); }catch (error) { console.error(`点赞帖子ID ${id} 时发生错误`, error); }}


// 获取论坛文章的函数async function getForumArticles() { const url = "https://myplus-api.meizu.cn/myplus-qing/ug/topic/content?currentPage=0&topicId=534&sortType=2"; try { const response = await meizuGet(url, ""'get'); if (response && response.data && response.data.data && response.data.data.rows) { const articles = response.data.data.rows.slice(111) .map(article => { return { id: article.id, title: article.title, uid: article.uid }; }); return articles;else { console.log('没有获取到文章列表'); return []; }catch (error) { console.error('获取文章列表失败', error); return []; }}
async function signIn() { const url = `https://myplus-api.meizu.cn/myplus-muc/u/user/signin`; let res = await meizuGet(url, """post"); if (res && res.data.code == 200) { msg = `煤球奖励+${res.data.data.mcoin},已连续签到${res.data.data.continuous}天`;else { msg = res.data.msg + "[可能已签到]"; } console.log(msg) return msg}
// 关注用户函数
async function followUsers(userList) { for (let i = 0; i < Math.min(3, userList.length); i++) { await followUser(userList[i].uid);  await sleep(5000); }}
// 点赞函数async function likePosts(postList) { for (let i = 0; i < Math.min(10, postList.length); i++) { await addLike(postList[i].id); //  await sleep(5000); }}
// 收藏主题函数async function favoriteTopics(topicList) { for (let i = 0; i < Math.min(3, topicList.length); i++) { await addFavorite(topicList[i].id);  await sleep(5000); }}
async function addComments(topicList) { for (let i = 0; i < Math.min(3, topicList.length); i++) { await addComment(topicList[i].id);  await sleep(5000); }}
// 任务async function meizu() { let signMsg = "" try { const cookie = await getCookie(); if (!cookie) { msg = '获取cookie失败'; return "【魅族社区】:" + msg; } signMsg = await signIn(); const arList = await getForumArticles() const tasks = await queryTasks(); for (const task of tasks) { if (!task.complete) { // 如果任务未完成 console.log("去执行任务:" + task.taskName) switch (task.taskName) { case '每日签到': await signIn(); break; case '点赞': await likePosts(arList) break; case '关注用户':    await followUser(129768998); await followUsers(arList); break; case '发表评论': await addComments(arList) break; case '收藏主题': await favoriteTopics(arList) break; case '发布主题': //await createTopic("小鸟说早早早", "你为什么背上炸药包", 22, 534) break; default: console.log(`没有定义任务 "${task.taskName}" 的执行操作,跳过`); break; }else console.log("已完成") } await signInMzStore(uid, sid) await queryTasks()catch (err) { msg = `签到接口请求错误`; console.log(err); } return `【魅族社区(${nickname})】:\n    签到: ${signMsg}\n    煤球:${Mcoin}`;}//meizu()module.exports = meizu;

解析

这脚本是一个为魅族社区用户设计的自动化任务程序,旨在通过各种社区活动(如签到、点赞、关注用户、评论、收藏主题等)来积累社区货币(煤球)和增强用户参与度。脚本使用axios来发送HTTP请求,并通过异步函数处理各种社区活动。

  1. meizuGet:

    • 封装了axios请求的函数,可以进行GET或POST请求。通过动态配置如headers和data来适配不同的API需求。
  2. getAccessToken 和 getSid:

    • 用于获取用户的access_tokensid。这些凭证对于后续的所有API请求都是必需的,因为它们用于验证用户身份。
  3. getCookie:

    • 首先获取access_token,然后使用它来获取sid。这个过程中会更新全局的cookie变量,以确保之后的请求都能通过身份验证。
  4. signIn:

    • 签到函数,用户每日签到,增加煤球并记录连续签到天数。
  5. queryTasks:

    • 查询当前可用的任务列表,并返回这些任务的详细信息。
  6. createTopicaddFavoriteaddCommentfollowUser 和 addLike:

    • 分别用于发表主题、收藏主题、评论主题、关注用户和点赞帖子。这些都是社区内的互动功能,有助于提升用户的活跃度和社区货币。
  7. getForumArticles:

    • 获取论坛文章列表,这些文章将用于执行点赞、评论和收藏操作。
  8. likePostsfavoriteTopicsaddComments 和 followUsers:

    • 执行具体的社区任务,如点赞、收藏、评论和关注。这些函数通常会处理多个条目,并在每个操作之间暂停一定时间(例如5000毫秒)以模仿人类用户的行为并避免触发反爬虫机制。
  9. meizu:

    • 主函数,协调上述所有操作。它首先确保可以获取到必需的cookie,然后依次执行签到、获取文章列表、查询任务、执行各类任务,并处理任务的完成情况。



注意

本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。


没有评论:

发表评论

来了!保诚集团公布了2024年年报,快来看看~

3月20日,作为伦敦、纽约、新加坡和香港四地上市的保诚集团公布了2024年财务报告。 整个财报内容很多,我们今天只看作为港险投资者最关注的三个方面,安全性、经营能力、投资能力。 考察下我们的财富管家过去一年干得怎么样? 大家好,我是Steven川哥,CFA持证人、12年投行经...