// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/meizu.js // # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/meizu.js // # Repo: Wenmoux/checkbox // # Path: scripts/meizu.js // # UploadedAt: 2024-01-25T23:07:01Z // # SHA256: 7a9c608e16e257ce572f771572bf1ea8b595e4d7194617aacaad24e3124bff1b // # Category: web版/账密 // # Evidence: web/H5关键词 + username/password/login // const axios = require("axios"); var sid = "" var uid = "" var cookie = `MEIZUSTORESESSIONID=` const MeiZu = config.meizu var 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_token async function getAccessToken() { const url = 'https://api.meizu.com/oauth/token'; const data = new URLSearchParams({ grant_type: 'remember_me', scope: 'trust', remember_me: MeiZu.remember, client_secret: MeiZu.secret, client_id: MeiZu.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获取sid async 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==200) return 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", // 这里可以根据实际情况修改设备名称 enterId: 0, format: 1, forumId: forumId, forumTagId: 0, locationId: 0, pollId: 0, 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: [], content: await getreply(), contentId: contentId, createTime: Math.floor(Date.now() / 1000), // 当前时间的Unix时间戳 deviceName: "meizu18pro", // 这里可以根据实际情况修改设备名称 isChp: 0, parentId: 0, replyId: 0, replyUid: 0 }; 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(1, 11) .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;