阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

一、前言

阿里云盘自动每日签到,无需部署,无需服务器

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

二、效果展示:

 

三、步骤:

1、进入金山文档网页版

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

2、新建一个空表格

点击【效率】-【高级开发】-【AirScript脚本编辑器】

 

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

4、创建成功后随便命名

 

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

6、将三项服务全部添加

 

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

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 != "") { // 如果刷新令牌不为空// 发起网络请求-获取tokenlet 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 !== "") { // 如果刷新令牌不为空// 发起网络请求-获取tokenlet 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("自动领取未领取奖励完成。");
}

 

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

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

9、从浏览器中获取 refresh_token 的值:

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

 

 或使用快捷指令获取token

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

 10、将refresh_token 的值复制到表格中

可以写入多个账号的refresh_token

11、填写表格内容

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

 

12、获取自己的SMTP这里我以网易邮箱为例:

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

 

 

13.QQ邮箱获取自己的SMTP

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

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

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

确保下方日志是成功的后进行下一步 

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

 16、点击【创建任务】

 

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Verilog语法学习——LV7_求两个数的差值

LV7_求两个数的差值 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 根据输入信号a,b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a,b…

【飞书】飞书导出md文档 | 飞书markdown文档导出 | 解决飞书只能导出pdf word

一、飞书导出markdown github地址&#xff1a;https://github.com/Wsine/feishu2md 这是一个下载飞书文档为 Markdown 文件的工具&#xff0c;使用 Go 语言实现。 请看这里&#xff1a;招募有需求和有兴趣的开发者&#xff0c;共同探讨开发维护&#xff0c;有兴趣请联系。 二、…

MySQL数据库分库分表备份(shell脚本)

创建目录 mkdir /server/scripts 一、使用脚本实现分库备份 1、创建脚本并编写 [rootlocalhost scripts]# vim bak_db_v1.sh #!/bin/bash ######################################### # File Name:bak_db_v1.sh # Version: V1.0 # Author:Shen QL # Email:17702390000163.co…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…

短视频矩阵系统源码开发流程​

一、视频矩阵系统源码开发流程分为以下几个步骤&#xff1a; 四、技术开发说明&#xff1a; 产品原型PRD需求文档产品交互流程图部署方式说明完整源代码源码编译方式说明三方框架和SDK使用情况说明和代码位置平台操作文档程序架构文档 一、抖音SEO矩阵系统源码开发流程分为以…

【Linux】进程通信 — 共享内存

文章目录 &#x1f4d6; 前言1. 共享内存2. 创建共享内存2.1 ftok()创建key值&#xff1a;2.2 shmget()创建共享内存&#xff1a;2.3 ipcs指令&#xff1a;2.4 shmctl()接口&#xff1a;2.5 shmat()/shmdt()接口:2.6 共享内存没有访问控制&#xff1a;2.7 通过管道对共享内存进…

Python进行数据分析(详细教程)

1.为什么选择Python进行数据分析&#xff1f; Python是一门动态的、面向对象的脚本语言&#xff0c;同时也是一门简约&#xff0c;通俗易懂的编程语言。Python入门简单&#xff0c;代码可读性强&#xff0c;一段好的Python代码&#xff0c;阅读起来像是在读一篇外语文章。Pyth…

Jenkins搭建最简教程

纠结了一小会儿&#xff0c;到底要不要写这个&#xff0c;最终还是决定简单记录一下&#xff0c;因为Jenkins搭建实在是太简单了&#xff0c;虽然也有坑&#xff0c;但是坑主要在找稳定的版本上。 先学一个简称&#xff0c;LTS (Long Term Support) 属实是长见识了&#xff0c…

docker 搭建jenkins

1、拉取镜像 docker pull jenkins/jenkins:2.4162、创建文件夹 mkdir -p /home/jenkins_mount chmod 777 /home/jenkins_mount3、运行并构建容器 docker run --restartalways -d -p 10240:8080 -p 10241:50000 -v /home/jenkins_mount:/var/jenkins_home -v /etc/localtime:…

如何选择台式还是便携式多参数水质检测仪呢

选择台式还是便携式多参数水质检测仪主要取决于具体的使用需求和场景。 1.便携式多参数水质检测仪适用于需要在不同地点进行水质检测的情况&#xff0c;例如户外采样、实地调查等。它具有小巧轻便的特点&#xff0c;方便携带和操作&#xff0c;适合需要频繁移动或需要灵活使用的…

如何维护你的电脑:提升性能和延长使用寿命

如何维护你的电脑&#xff1a;提升性能和延长使用寿命 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&…

AWVS 15.6 使用教程

目录 介绍 版本 AWVS具有以下特点和功能&#xff1a; 功能介绍&#xff1a; Dashboard功能&#xff1a; Targets功能&#xff1a; Scans功能&#xff1a; Vulnerabilities功能&#xff1a; Reports功能&#xff1a; Users功能&#xff1a; Scan Profiles功能&#x…

2023 年牛客多校第四场题解

A Bobo String Construction 题意&#xff1a;给定一个 01 01 01 字符串 t t t&#xff0c;构造一个长度为 n n n 的 01 01 01 串 s s s&#xff0c;使得 t t t 在 c o n c a t ( t , s , t ) {\rm concat}(t, s, t) concat(t,s,t) 中仅出现两次。多测&#xff0c; 1 ≤…

【数据结构】实验十二:图 查找

实验十二 图查找 一、实验目的与要求 1&#xff09;掌握拓扑排序的应用&#xff1b; 2&#xff09;掌握查找的概念和算法&#xff1b; 3&#xff09;掌握查找的基本原理以及各种算法的实现&#xff1b; 4&#xff09;掌握查找的应用。 二、实验内容 1. 用邻接表建立一…

WIZnet W51000S-EVB-PICO 入门教程(一)

概述 W5100S-EVB-Pico是基于树莓派RP2040和全硬件TCP/IP协议栈控制器W5100S的微控制器开发板-基本上与树莓派Pico板相同&#xff0c;但通过W5100S芯片增加了以太网功能。 W5100S-EVB-Pico特点 RP2040规格参数 双核Arm Cortex-M0 133MHz264KB 高速SRAM和2MB板载内存通过…

JAVA基础-多线程入门(详解)

目录 引言 一&#xff0c;线程概念 二&#xff0c;创建线程 2.1&#xff0c;继承Thread类&#xff0c;重写run方法 2.2&#xff0c;实现Runnable接口&#xff0c;重写run方法&#xff0c;实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3&#xff0c;通…

RCU 使用及机制源码的一些分析

》内核新视界文章汇总《 文章目录 1 介绍2 使用方法2.1 经典 RCU2.2 不可抢占RCU2.3 加速版不可抢占RCU2.4 链表操作的RCU版本2.5 slab 缓存支持RCU 3 源码与实现机制的简单分析3.1 数据结构3.2 不可抢占RCU3.3 加速版不可抢占RCU3.4 可抢占RCU3.5 报告禁止状态3.6 宽限期的开…

教雅川学缠论03-分型

原著作者将K线走势分成四中类型&#xff0c;这四中类型&#xff0c;就叫做分型&#xff0c;注意&#xff0c;分型是K线的组合&#xff08;至少3个K线&#xff09;&#xff0c;如下 下面我们以2023年7月武汉控股日K示例 四个分型用图来表示的话&#xff0c;还是很简单的&…

spring5源码篇(13)——spring mvc无xml整合tomcat与父子容器的启动

spring-framework 版本&#xff1a;v5.3.19 文章目录 整合步骤实现原理ServletContainerInitializer与WebApplicationInitializer父容器的启动子容器的启动 相关面试题 整合步骤 试想这么一个场景。只用 spring mvc&#xff08;确切来说是spring-framework&#xff09;&#x…

Flink集群运行模式--Standalone运行模式

Flink集群运行模式--Standalone运行模式 一、实验目的二、实验内容三、实验原理四、实验环境五、实验步骤5.1 部署模式5.1.1 会话模式&#xff08;Session Mode&#xff09;5.1.2 单作业模式&#xff08;Per-Job Mode&#xff09;5.1.3 应用模式&#xff08;Application Mode&a…