阿里云盘自动每日签到,无需部署,无需服务器(二次创作)

声明:本文内容基于原始内容进行了二次修改传播。原始内容来源为[知乎],作者为[小小猪],原始链接为[小小猪:阿里云盘自动每日签到,无需部署,无需服务器]。传播此内容是基于学术研究和学习目的,遵循了适用的版权规定和学术研究的合理使用原则。

执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。

无需部署,无需服务器,每个月更新一次token。

自动签到效果展示:

Snipaste_2023-07-12_23-31-29.png

1、进入金山文档网页版

金山文档官网:https://www.kdocs.cn/

Snipaste_2023-07-17_21-53-02.png

2、新建一个空表格,点击【效率】-【高级开发】-【AirScript脚本编辑器】

Snipaste_2023-07-17_21-56-24.png

Snipaste_2023-07-17_21-58-22.png

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

Snipaste_2023-07-17_22-00-04.png

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

image.png

5、点击【服务】-【添加服务】

image.png

6、将三项服务全部添加

image.png

7、将以下代码复制到编辑器中

var myDate = new 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";
var signInColumn = "B";
var rewardColumn = "C";
var emailColumn = "F";
var sendEmailColumn = "G";
var customEmailColumn = "I";
var resultColumn = "J";

for (let row = 2; row <= 20; row++) {
  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(customEmailColumn + 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();
      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();
        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();
              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();
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++) {
    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();
        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();
          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("自动领取未领取奖励完成。");
}

8、将模版复制到自己创建的表格中

签到模版:https://kdocs.cn/l/ceQR4HpZ6op1

image.png

9、从浏览器中获取 refresh_token 的值:浏览器登录阿里云盘

阿里云盘登录地址:https://www.aliyundrive.com/

Snipaste_2023-07-17_22-29-04.png
或使用快捷指令获取token

//在控制台输入
var token = JSON.parse(localStorage.getItem('token'));
console.log('refresh_token:', token.refresh_token);

image.png

10、将refresh_token 的值复制到表格中,可以写入多个账号的refresh_token

image.png

11、填写表格内容

  1. 填写是否签到
  2. 填写是否领取奖励(是的话会自动领取签到奖励,为否的话只签到,当当前时间为每月最后一天,自动领取未领取的奖励)
  3. 填写是否发送邮箱通知,发送邮箱通知的话,写入接收邮箱的地址,不发送就填否(单/多账号下只发送与同行对应账号相关内容)
  4. 填写是否自定义发送邮箱,这里推荐会弄SMTP的人自己填写自己的发送邮箱配置(发送和接收的邮箱可以相同),不会弄的人就写否或者不写就好了,我在代码里写了一个发送邮箱,但是邮箱有每日限制发送数量,可能会有接收不到邮件的情况。
    由于用户大量增加导致默认配置邮箱发送邮件已达到上线,当日志中显示一下内容大概率为邮箱发送已达到上限,所以强烈介意使用自己的邮箱配置,教程已写在下方

Snipaste_2023-07-12_20-51-08.png
下面表格中,代码只读取框住的部分,位置写对就行,其他地方无所谓

Snipaste_2023-07-17_23-01-07.png

12、获取自己的SMTP

这里我以网易邮箱为例:

打开网易官网:https://mail.163.com

Snipaste_2023-07-12_23-44-26.png

Snipaste_2023-07-12_23-50-26.png

13.QQ邮箱获取自己的SMTP

请查看这篇内容:使用QQ邮箱发送邮件,QQ邮箱的smtp设置

  • SMTP服务器:smtp.qq.com
  • SMTP端口号:465。必须填这个端口号,否则会报错

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

确保下方日志是成功的后进行下一步
Snipaste_2023-07-12_23-31-29.png

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

image.png

16、点击【创建任务】

image.png

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

image.png

成品展示:

Snipaste_2023-07-12_23-33-20.png

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值