【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

Keanu

文章最后更新时间:2023年09月19日已超过220天没有更新。

前言部分

在现代快节奏的生活中,我们需要充分利用各种工具来提高工作效率。对于阿里云盘的用户来说,写一个自动每日签到脚本可以帮助您节省时间,让您无需每天手动签到即可积累积分。在本文中,我们将引导您创建一个简单的阿里云盘自动每日签到脚本,帮助您轻松积累积分,让阿里云盘的使用变得更加便捷。

成果展示

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

教程部分

1、首先打开金山文档官网,点击"网页版"

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

2、随便新建一个空表格,先把阿里云签到模板复制一份,然后点击【效率】-【高级开发】-【AirScript脚本编辑器

阿里云盘签到模板:     点击查看   

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

3、点击【创建脚本】-【文档共享脚本

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

4、创建成功后随便命名,我这里命名为:阿里云盘自动签到

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

5、点击【服务】-【添加服务】,把三个服务全加上

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

6、将以下代码复制到编辑器中,切记先别保存!!!

var myDate = new Date(); // 创建一个表示当前时间的 Date 对象
var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示

function sleep(d) {
  for (var t = Date.now(); Date.now() - t <= d;); // 使程序暂停执行一段时间
}

function log(message) {
  console.log(message); // 打印消息到控制台
  // TODO: 将日志写入文件
}

var tokenColumn = "A"; // 设置列号变量为 "A"
var signInColumn = "B"; // 设置列号变量为 "B"
var rewardColumn = "C"; // 设置列号变量为 "C"
var emailColumn = "F"; // 设置列号变量为 "F"
var sendEmailColumn = "G"; // 设置列号变量为 "G"
var resultColumn = "J"; // 设置列号变量为 "J"

for (let row = 2; row <= 20; row++) { // 循环遍历从第 2 行到第 20 行的数据
  var refresh_token = Application.Range(tokenColumn + row).Text; // 获取指定单元格的值
  var sflq = Application.Range(signInColumn + row).Text; // 获取指定单元格的值
  var sflqReward = Application.Range(rewardColumn + row).Text; // 获取指定单元格的值
  var jsyx = Application.Range(emailColumn + row).Text; // 获取指定单元格的值
  var sendEmail = Application.Range(sendEmailColumn + row).Text; // 获取指定单元格的值
  var customEmailResult = Application.Range(resultColumn + row).Text; // 获取指定单元格的值

  var emailConfigured = Application.Range("J1").Text; // 获取指定单元格的值
  var zdy_host = Application.Range("J2").Text; // 获取指定单元格的值
  var zdy_post = parseInt(Application.Range("J3").Text); // 获取指定单元格的值并转换为整数
  var zdy_username = Application.Range("J4").Text; // 获取指定单元格的值
  var zdy_pasd = Application.Range("J5").Text; // 获取指定单元格的值

  if (sflq == "是") { // 如果“是否签到”为“是”
    if (refresh_token != "") { // 如果刷新令牌不为空
      // 发起网络请求-获取token
      let data = HTTP.post("https://auth.aliyundrive.com/v2/account/token",
        JSON.stringify({
          "grant_type": "refresh_token",
          "refresh_token": refresh_token
        })
      );
      data = data.json(); // 将响应数据解析为 JSON 格式
      var access_token = data['access_token']; // 获取访问令牌
      var phone = data["user_name"]; // 获取用户名

      if (access_token == undefined) { // 如果访问令牌未定义
        log("单元格【" + tokenColumn + row + "】内的token值错误,程序执行失败,请重新复制正确的token值");
        continue; // 跳过当前行的后续操作
      }

      try {
        var access_token2 = 'Bearer ' + access_token; // 构建包含访问令牌的请求头
        // 签到
        let data2 = HTTP.post("https://member.aliyundrive.com/v1/activity/sign_in_list",
          JSON.stringify({ "_rx-s": "mobile" }),
          { headers: { "Authorization": access_token2 } }
        );
        data2 = data2.json(); // 将响应数据解析为 JSON 格式
        var signin_count = data2['result']['signInCount']; // 获取签到次数

        var logMessage = "账号:" + phone + " - 签到成功,本月累计签到 " + signin_count + " 天";
        var rewardMessage = "";

        if (sflqReward == "是") { // 如果“是否领取奖励”为“是”
          if (sflq == "是") { // 如果“是否签到”为“是”
            try {
              // 领取奖励
              let data3 = HTTP.post(
                "https://member.aliyundrive.com/v1/activity/sign_in_reward?_rx-s=mobile",
                JSON.stringify({ "signInDay": signin_count }),
                { headers: { "Authorization": access_token2 } }
              );
              data3 = data3.json(); // 将响应数据解析为 JSON 格式
              var rewardName = data3["result"]["name"]; // 获取奖励名称
              var rewardDescription = data3["result"]["description"]; // 获取奖励描述
              rewardMessage = " " + rewardName + " - " + rewardDescription;
            } catch (error) {
              if (error.response && error.response.data && error.response.data.error) {
                var errorMessage = error.response.data.error; // 获取错误信息
                if (errorMessage.includes(" - 今天奖励已领取")) {
                  rewardMessage = " - 今天奖励已领取";
                  log("账号:" + phone + " - " + rewardMessage);
                } else {
                  log("账号:" + phone + " - 奖励领取失败:" + errorMessage);
                }
              } else {
                log("账号:" + phone + " - 奖励领取失败");
              }
            }
          } else {
            rewardMessage = " - 奖励待领取";
          }
        } else {
          rewardMessage = " - 奖励待领取";
        }

        log(logMessage + rewardMessage);

        if (sendEmail == "是") { // 如果“是否发送邮件”为“是”
          try {
            let mailer;
            if (customEmailResult == "是") { // 如果“是否自定义邮箱”为“是”
              var customEmail = Application.Range(resultColumn + row).Text; // 获取指定单元格的值
              if (emailConfigured === "是") { // 如果配置了自定义邮箱
                mailer = SMTP.login({
                  host: zdy_host,
                  port: zdy_post,
                  username: zdy_username,
                  password: zdy_pasd,
                  secure: true
                });
                mailer.send({
                  from: "阿里云盘签到<" + zdy_username + ">",
                  to: customEmail,
                  subject: "阿里云盘签到通知 - " + data_time,
                  text: logMessage + rewardMessage
                });
              } else { // 如果未配置自定义邮箱,默认使用示例邮箱
                mailer = SMTP.login({
                  host: "smtp.163.com",
                  port: 465,
                  username: "fs8484848@163.com",
                  password: "QADSEMPKDHDAVWVD",
                  secure: true
                });
                mailer.send({
                  from: "阿里云盘签到<fs8484848@163.com>",
                  to: customEmail,
                  subject: "阿里云盘签到通知 - " + data_time,
                  text: logMessage + rewardMessage
                });
              }
              log("账号:" + phone + " - 已发送邮件至:" + customEmail);
            } else { // 如果“是否自定义邮箱”为“否”
              if (emailConfigured === "是") { // 如果配置了自定义邮箱
                mailer = SMTP.login({
                  host: zdy_host,
                  port: zdy_post,
                  username: zdy_username,
                  password: zdy_pasd,
                  secure: true
                });
                mailer.send({
                  from: "阿里云盘签到<" + zdy_username + ">",
                  to: jsyx,
                  subject: "阿里云盘签到通知 - " + data_time,
                  text: logMessage + rewardMessage
                });
              } else { // 如果未配置自定义邮箱,默认使用示例邮箱
                mailer = SMTP.login({
                  host: "smtp.163.com",
                  port: 465,
                  username: "fs8484848@163.com",
                  password: "QADSEMPKDHDAVWVD",
                  secure: true
                });
                mailer.send({
                  from: "阿里云盘签到<fs8484848@163.com>",
                  to: jsyx,
                  subject: "阿里云盘签到通知 - " + data_time,
                  text: logMessage + rewardMessage
                });
              }
              log("账号:" + phone + " - 已发送邮件至:" + jsyx);
            }
          } catch (error) {
            log("账号:" + phone + " - 发送邮件失败:" + error);
          }
        }
      } catch {
        log("单元格【" + tokenColumn + row + "】内的token签到失败");
        continue; // 跳过当前行的后续操作
      }
    } else {
      log("账号:" + phone + " 不签到");
    }
  }
}

var currentDate = new Date(); // 创建一个表示当前时间的 Date 对象
var currentDay = currentDate.getDate(); // 获取当前日期的天数
var lastDayOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0).getDate(); // 获取当月的最后一天的日期

if (currentDay === lastDayOfMonth) { // 如果当前日期是当月的最后一天
  for (let row = 2; row <= 20; row++) { // 循环遍历从第 2 行到第 20 行的数据
    var sflq = Application.Range(signInColumn + row).Text; // 获取指定单元格的值
    var sflqReward = Application.Range(rewardColumn + row).Text; // 获取指定单元格的值

    if (sflq === "是" && sflqReward === "是") { // 如果“是否签到”和“是否领取奖励”均为“是”
      var refresh_token = Application.Range(tokenColumn + row).Text; // 获取指定单元格的值
      var jsyx = Application.Range(emailColumn + row).Text; // 获取指定单元格的值
      var phone = "账号:" + phone; // 构建账号信息字符串

      if (refresh_token !== "") { // 如果刷新令牌不为空
        // 发起网络请求-获取token
        let data = HTTP.post("https://auth.aliyundrive.com/v2/account/token",
          JSON.stringify({
            "grant_type": "refresh_token",
            "refresh_token": refresh_token
          })
        );
        data = data.json(); // 将响应数据解析为 JSON 格式
        var access_token = data['access_token']; // 获取访问令牌

        if (access_token === undefined) { // 如果访问令牌未定义
          log("单元格【" + tokenColumn + row + "】内的token值错误,程序执行失败,请重新复制正确的token值");
          continue; // 跳过当前行的后续操作
        }

        try {
          var access_token2 = 'Bearer ' + access_token; // 构建包含访问令牌的请求头
          // 领取奖励
          let data4 = HTTP.post(
            "https://member.aliyundrive.com/v1/activity/sign_in_reward?_rx-s=mobile",
            JSON.stringify({ "signInDay": lastDayOfMonth }),
            { headers: { "Authorization": access_token2 } }
          );
          data4 = data4.json(); // 将响应数据解析为 JSON 格式
          var claimStatus = data4["result"]["status"]; // 获取奖励状态
          var day = lastDayOfMonth; // 获取最后一天的日期

          if (claimStatus === "CLAIMED") {
            log("账号:" + phone + " - 第 " + day + " 天奖励领取成功");
          } else {
            log("账号:" + phone + " - 第 " + day + " 天奖励领取失败");
          }
        } catch {
          log("单元格【" + tokenColumn + row + "】内的token签到失败");
          continue; // 跳过当前行的后续操作
        }
      } else {
        log("账号:" + phone + " 不签到");
      }
    }
  }

  log("自动领取未领取奖励完成。");
}

7、从浏览器中获取refresh_token的值,登录阿里云盘网页版,按键盘的F12,选中在控制台粘贴以下代码后回车

var token = JSON.parse(localStorage.getItem('token'));
console.log('refresh_token:', token.refresh_token);

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

8、将refresh_token的值复制到表格中,(A2-A20)可以写入多个账号的refresh_token

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

9、填写表格内容

9.1:填写是否领取奖励(是的话会自动领取签到奖励,为否的话只签到,需要用的时候自己手动领取签到奖励

9.2:填写是否发送邮箱通知,发送邮箱通知的话,要写入接收邮箱的地址,不发送就不用写

9.3:填写是否自定义发送邮箱,这里推荐会弄SMTP的人自己填写自己的发送邮箱配置(发送和接收的邮箱可以相同),不会弄的人就写或者不写就好了。

9.4:SMTP邮箱服务器配置教程:点击查看

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

10、在脚本中,点击上方的【保存】按钮,再点击【运行】按钮

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

PS:到这里,脚本就设置好了,下面需要设置定时任务,让它自己每天自动执行.

11、关闭代码编辑框,点击【效率】-【高级开发】-【定时任务】,点击【创建任务

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

12、设置每天运行的时间,选择刚刚选择的脚本,保存,大功告成

【技术教程】阿里云盘每日自动签到教程分享!无需服务器!小白教程!

免责声明:本文来自King,不代表信明宇博客的观点和立场,如有侵权请联系本平台处理。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码