阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)
一、前言
阿里云盘自动每日签到,无需部署,无需服务器
执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。
二、效果展示:
三、步骤:
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、设置每天运行的时间,选择刚刚选择的脚本,保存
相关文章:

阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)
一、前言 阿里云盘自动每日签到,无需部署,无需服务器 执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。 二、效果展示: 三、步骤: 1、进入金山文档网页版 金山文档官网:https:…...

Blazor前后端框架Known-V1.2.7
V1.2.7 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazor…...

工业边缘计算为什么?
在工厂环境中使用边缘计算并不新鲜。可编程逻辑控制器(PLC)、微控制器、服务器和PC进行本地数据处理,甚至是微型数据中心都是边缘技术,已经在工厂系统中存在了几十年。在车间里看到的看板系统,打卡系统,历史…...

Training-Time-Friendly Network for Real-Time Object Detection 论文学习
1. 解决了什么问题? 目前的目标检测器很少能做到快速训练、快速推理,并同时保持准确率。直觉上,推理越快的检测器应该训练也很快,但大多数的实时检测器反而需要更长的训练时间。准确率高的检测器大致可分为两类:推理时…...
HTTP改HTTPS
tomcat中http协议改https 第一步,配置server.xml <?xml version"1.0" encoding"UTF-8"?> <Server port"8005" shutdown"SHUTDOWN"><Listener className"org.apache.catalina.startup.VersionLogger…...

网络层中一些零碎且易忘的知识点
异构网络:指传输介质、数据编码方式、链路控制协议以及数据单元格式和转发机制不同,异构即物理层和数据链路层均不同RIP、OSPF、BGP分别是哪一层的协议: -RIPOSPFBGP所属层次应用层网络层应用层封装在什么协议中UDPIPTCP 一个主机可以有多个I…...

【RabbitMQ】之高可用集群搭建
目录 一、RabbitMQ 集群原理 1、默认集群原理2、镜像集群原理3、负载均衡方案 二、RabbitMQ 高可用集群搭建 1、RabbitMQ 集群搭建2、配置镜像队列3、HAProxy 环境搭建4、Keepalived 环境搭建 一、RabbitMQ 集群简介 1、默认集群原理 3-1、RabbitMQ 集群简介 单台 RabbitM…...

【node.js】01-fs读写文件内容
目录 一、fs.readFile() 读取文件内容 二、fs.writeFile() 向指定的文件中写入内容 案例:整理txt 需求: 代码: 一、fs.readFile() 读取文件内容 代码: //导入fs模块,从来操作文件 const fs require(fs)// 2.调…...

GitHub仓库如何使用
核心:GitHub仓库如何使用 目录 1.创建仓库: 2.克隆仓库到本地: 3.添加、提交和推送更改: 4.分支管理: 5.拉取请求(Pull Requests): 6.合并代码: 7.其他功能&…...
雪花算法,在分布式环境下实现高效的ID生成
其实雪花算法比较简单,可能称不上什么算法就是一种构造UID的方法。 点1:UID是一个long类型的41位时间戳,10位存储机器码,12位存储序列号。 点2:时间戳的单位是毫秒,可以同时链接1024台机器,每台…...
使用css 动画实现,水波纹的效果
每日鸡汤:每个你想要学习的瞬间都是未来的你向自己求救 需求,实现水波纹动画效果,要求中心一个圆点,然后有3个圈,一圈一圈的向里面缩小。 说实话我第一个想到了给3个圈设置不同的宽高,然后设置动画0-100%&a…...

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)
简介 本文将会通过一个简单的场景搭建,介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照(GI)的知识和GI实际在游戏内的表现效果。 Unity关于光照相关的参考文档地址:https://docs.unity.cn/cn/current/Man…...

【设计模式——学习笔记】23种设计模式——适配器模式Adapter(原理讲解+应用场景介绍+案例介绍+Java代码实现)
文章目录 介绍生活中的案例基础介绍工作原理分类应用场景 案例类适配器模式例1介绍类图代码实现优缺点分析 例2类图代码实现 对象适配器模式(常用方式)例1介绍类图代码实现优缺点分析 例2代码实现 接口适配器模式介绍类图代码实现 登场角色类图类适配器模…...
Android Unit Test
一、测试基础知识 1.1 测试级别 测试金字塔(如图 2 所示)说明了应用应如何包含三类测试(即小型、中型和大型测试): 小型测试是指单元测试,用于验证应用的行为,一次验证一个类。 中型测试是指…...
docker更新jenkins
下载文件 1、jenkins提示下载 2、官网下载jenkins官网 文件放服务器内 通过工具把jenkins.war放进服务器例如tmp 文件复制到docker的jenkins容器 docker cp 路径文件 容器id:/{后面不接内容为根路径} docker cp /tmp/jenkins.war 53dc1c71058a:/进入容器内 docker exec …...

一种新的基于区域的在线活动轮廓模型研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【Docker】基于Dockerfile搭建LNMP架构
一、项目环境 公司在实际的生产环境中,需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。然后对此服务进行相关的性能调优和管理工作。 1. 环境配置 主机操作系统IP地址主要软件DockerCentOS 7.3 x86_64192.168.145.15Docker 19.03容器ip地址规划 ngin…...

爬虫003_pycharm的安装以及使用_以及python脚本模版设置---python工作笔记021
这里我们用ide,pycharm来编码,看一看如何下载 这里我们下载这个社区办,这个是免费的,个人版是收费的 然后勾选以后 安装以后我们来创建一个项目 这里可以选择python的解释器,选择右边的... 这里我们找到我们自己安装的python解释器...
远程xml读取解析,将image url下载到本地,延时队列定时删除文件,图片访问路径保存在数据库中
远程xml部分内容 <imagelist name"FY4A AGRI IMG REGI MTCC GLL" tag"FY4A AGRI IMG REGI MTCC GLL"><image time"2023-07-25 22:30 (UTC)" desc"FY4A AGRI IMG REGI MTCC GLL" url"http://img.nsmc.org.cn/PORTAL/FY4…...

firefox笔记-Centos7离线安装firefox
目前(2023-03-22 16:41:35)Centos7自带的firefox已经很新了是2020年的。主要原因是有个web项目,用2020年的firefox打不开。 发到互联网上是2023-07-24。 报错是js有问题,估计是搞前端的只做了chrome适应,没做firefox…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...

leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...