1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/Bg6shY若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/Bg6shY若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?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=2019052.部署教程
3.代码如下
return new Promise(async (resolve, reject) => {try {// 封装电脑签到请求函数 (模仿正常脚本的写法)const sign = () => {return new Promise((resolve, reject) => {const url = `https://music.163.com/api/point/dailyTask?type=1` ;GM_xmlhttpRequest({method: "GET",url: url,withCredentials: true, // 关键:携带 Cookieheaders: {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36","Referer": "https://music.163.com/"},onload: function (response) {if (response.status >= 200 && response.status < 300) {try {const data = JSON.parse(response.responseText);resolve(data);} catch (e) {reject(new Error(`解析响应失败: ${e.message}`));}} else {reject(new Error(`HTTP请求失败: ${response.status}${response.statusText}`));}},onerror: function (error) {reject(new Error(`网络请求失败: ${error}`));},ontimeout: function () {reject(new Error('请求超时'));},timeout: 10000 // 10秒超时});});};// 执行电脑签到const pc = await sign();// 构造通知信息// 网易云API返回的 code: 200 表示成功, -2 表示已签到const msg = (pc.code === 200 || pc.code === -2)? `网易云电脑签到成功!(${pc.msg || pc.code})`: `网易云电脑签到失败:${pc.msg || pc.code}`;// 打印日志console.log(msg);// 弹出通知GM_notification({title: "网易云电脑签到",text: msg,timeout: 5000});resolve(msg);} catch (err) {const errorMsg = `网易云电脑签到出错: ${err.toString()}`;GM_notification({title: "签到失败",text: errorMsg,timeout: 5000});console.error(errorMsg);reject(err);}});
这是网易云签到脚本,主要作用如下:
通过
GM_xmlhttpRequest携带浏览器 Cookie 调用网易云的签到接口;根据接口返回结果判断:
code === 200:签到成功;code === -2:今天已经签过了;最后用
GM_notification弹出一个桌面提示,顺便console.log一条日志。
主要作用
1. 最外层 return new Promise(async (resolve, reject) => { ... })
作用:
整个油猴脚本本身就是一个 Promise:
成功时
resolve(消息文本);出错时
reject(err)。方便在 定时任务中统一拿到执行结果。
2. 内部函数 const sign = () => { ... }
作用:
封装"电脑端签到请求"这一动作,返回一个 Promise,resolve 为接口返回的 JSON。
逻辑上做的事情:
向
https://music.163.com/api/point/dailyTask?type=1发送 GET 请求;设置
withCredentials: true,确保携带当前域下的 Cookie(也就是你登录网易云的身份凭证);收到响应后:
状态码 2xx:尝试
JSON.parse解析结果,并 resolve;其他状态码 / 解析错误 / 网络错误 / 超时:reject 对应的错误。
可以理解为:"包了一层网易云 PC 签到接口调用"。
3. const pc = await sign(); + 消息拼装
作用:
真正执行一次 电脑端签到;
根据
pc.code生成一条人类可读的描述信息:200或-2⇒ 认为是「成功/已签过」,提示文案走"成功"分支;其他 code ⇒ 走"失败"分支。
4. GM_notification({...})
作用:
把签到结果以桌面通知的形式弹出来,方便你不打开控制台也能知道签到情况。
参数包含:
title:固定写「网易云电脑签到」或者「签到失败」;text:上一段构造好的msg或错误信息;timeout:通知显示时长。
5. try / catch 整体错误处理
作用:
try里是正常流程:调用sign()→ 解析结果 → 打日志 → 发通知 →resolve;catch捕获任何异常:打印错误日志;
用
GM_notification提示「签到出错」;调用
reject(err)结束 Promise。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论