当前位置: 首页 > news >正文

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

一、前言

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

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

二、效果展示:

 

三、步骤:

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、设置每天运行的时间,选择刚刚选择的脚本,保存

 

相关文章:

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

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

Blazor前后端框架Known-V1.2.7

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

工业边缘计算为什么?

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

Training-Time-Friendly Network for Real-Time Object Detection 论文学习

1. 解决了什么问题&#xff1f; 目前的目标检测器很少能做到快速训练、快速推理&#xff0c;并同时保持准确率。直觉上&#xff0c;推理越快的检测器应该训练也很快&#xff0c;但大多数的实时检测器反而需要更长的训练时间。准确率高的检测器大致可分为两类&#xff1a;推理时…...

HTTP改HTTPS

tomcat中http协议改https 第一步&#xff0c;配置server.xml <?xml version"1.0" encoding"UTF-8"?> <Server port"8005" shutdown"SHUTDOWN"><Listener className"org.apache.catalina.startup.VersionLogger…...

网络层中一些零碎且易忘的知识点

异构网络&#xff1a;指传输介质、数据编码方式、链路控制协议以及数据单元格式和转发机制不同&#xff0c;异构即物理层和数据链路层均不同RIP、OSPF、BGP分别是哪一层的协议&#xff1a; -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() 向指定的文件中写入内容 案例&#xff1a;整理txt 需求&#xff1a; 代码&#xff1a; 一、fs.readFile() 读取文件内容 代码&#xff1a; //导入fs模块&#xff0c;从来操作文件 const fs require(fs)// 2.调…...

GitHub仓库如何使用

核心&#xff1a;GitHub仓库如何使用 目录 1.创建仓库&#xff1a; 2.克隆仓库到本地&#xff1a; 3.添加、提交和推送更改&#xff1a; 4.分支管理&#xff1a; 5.拉取请求&#xff08;Pull Requests&#xff09;&#xff1a; 6.合并代码&#xff1a; 7.其他功能&…...

雪花算法,在分布式环境下实现高效的ID生成

其实雪花算法比较简单&#xff0c;可能称不上什么算法就是一种构造UID的方法。 点1&#xff1a;UID是一个long类型的41位时间戳&#xff0c;10位存储机器码&#xff0c;12位存储序列号。 点2&#xff1a;时间戳的单位是毫秒&#xff0c;可以同时链接1024台机器&#xff0c;每台…...

使用css 动画实现,水波纹的效果

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你向自己求救 需求&#xff0c;实现水波纹动画效果&#xff0c;要求中心一个圆点&#xff0c;然后有3个圈&#xff0c;一圈一圈的向里面缩小。 说实话我第一个想到了给3个圈设置不同的宽高&#xff0c;然后设置动画0-100%&a…...

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

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

【设计模式——学习笔记】23种设计模式——适配器模式Adapter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 介绍生活中的案例基础介绍工作原理分类应用场景 案例类适配器模式例1介绍类图代码实现优缺点分析 例2类图代码实现 对象适配器模式&#xff08;常用方式&#xff09;例1介绍类图代码实现优缺点分析 例2代码实现 接口适配器模式介绍类图代码实现 登场角色类图类适配器模…...

Android Unit Test

一、测试基础知识 1.1 测试级别 测试金字塔&#xff08;如图 2 所示&#xff09;说明了应用应如何包含三类测试&#xff08;即小型、中型和大型测试&#xff09;&#xff1a; 小型测试是指单元测试&#xff0c;用于验证应用的行为&#xff0c;一次验证一个类。 中型测试是指…...

docker更新jenkins

下载文件 1、jenkins提示下载 2、官网下载jenkins官网 文件放服务器内 通过工具把jenkins.war放进服务器例如tmp 文件复制到docker的jenkins容器 docker cp 路径文件 容器id:/{后面不接内容为根路径} docker cp /tmp/jenkins.war 53dc1c71058a:/进入容器内 docker exec …...

一种新的基于区域的在线活动轮廓模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&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

目前&#xff08;2023-03-22 16:41:35&#xff09;Centos7自带的firefox已经很新了是2020年的。主要原因是有个web项目&#xff0c;用2020年的firefox打不开。 发到互联网上是2023-07-24。 报错是js有问题&#xff0c;估计是搞前端的只做了chrome适应&#xff0c;没做firefox…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

vue3+vite项目中使用.env文件环境变量方法

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

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-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技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

leetcode73-矩阵置零

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

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析&#xff08;98/126&#xff09;&#xff1a;电商转化率优化与网站性能的底层逻辑 在电子商务领域&#xff0c;转化率与网站性能是决定商业成败的核心指标。今天&#xff0c;我们将深入解析不同类型电商平台的转化率基准&#xff0c;探讨页面加载速度对用户行为的…...