本帖最后由 kaion 于 2024-1-22 12:54 编辑
写在最前
去年底整过一个 知乎https://zhuanlan.zhihu.com/p/665002908传送门(fork小小猪),就是每二十几天要手动更新下阿里token,偶然逛论坛发现有 @侃遍天下无二人大佬整出来了自动刷新的
遂随手抄过来 改了下脚本,pushplus的推送似乎有每日上限,后来我弃用plusplus使用了 serverchan,推送挺稳定
具体用法可以参考 https://www.52pojie.cn/thread-1869673-1-1.html 模板都是一样的,因为他用的是copy我的模板,另有别的版本我都放 https://www.kdocs.cn/l/cj8tjHptRYdY 了,
最后推送部分根据自己实际情况填写
闲话少叙 直接开搞
[JavaScript] 纯文本查看 复制代码
var tokenColumn = "A"; // 设置列号变量为 "A"
var qiandaoColumn = "B"; // 设置列号变量为 "B"
var serverchanColumn = "C"; // 设置列号变量为 "C"
var pushplusColumn = "D"; // 设置列号变量为 "D"
var pushColumn = "E"; // 设置列号变量为 "E"
var refreshdateColumn = "G"; // 设置列号变量为 "G"
var userIDColumn = "F"; // 设置列号变量为 "F"
var phoneColumn = "I"; // 设置列号变量为 "I"
var pushtotal = [];
for (let row = 1; row <= 10; row++) { // 循环遍历从第 1 行到第 10 行的数据
var refresh_token = Application.Range(tokenColumn + row).Text; // 获取指定单元格的值
var qiandao = Application.Range(qiandaoColumn + row).Text; // 获取指定单元格的值
var servertoken = Application.Range(serverchanColumn + row).Text; // 获取指定单元格的值
var pushtoken = Application.Range(pushplusColumn + row).Text; // 获取指定单元格的值
var push = Application.Range(pushColumn + row).Text; // 获取指定单元格的值
var rfdate = Application.Range(refreshdateColumn + row).Text; // 获取指定单元格的值
var userID = Application.Range(userIDColumn + row).Text; // 获取指定单元格的值
var userIDn = Application.Range(userIDColumn + (row +1)).Text; // 获取指定单元格的值
var phoneinfo = Application.Range(phoneColumn + row).Text; // 获取指定单元格的值
var errorinfo = ""
if (row ==1){
pushtotal.push("【"+userID+"|用户】"); //首行写入第一个用户栏
}
else { //第二行开始执行检查是否同一user
var userIDp = Application.Range(userIDColumn + (row -1)).Text; // 获取指定单元格的值
if (userID !== userIDp&qiandao == "是"){ //新user才加入新一行用户栏
pushtotal.push("\n\n");
pushtotal.push("【"+userID+"】");
}
}
if (refresh_token != "") { // 如果刷新令牌不为空
if (qiandao == "是") {//签到&领奖开关
//获取Bearer-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) {
var phonef = phone.substring(0, 3)+"···"+phone.substring(6, 10);
Application.Range(phoneColumn+row).Value = phonef //成功会写入账号到I列
}
else { // 如果报错
var errorinfo = phoneinfo + "|token执行出错"
console.log("单元格【" + tokenColumn + row + "】"+phoneinfo+"|token执行出错");
pushtotal.push(errorinfo);
continue; // 跳过当前行的后续操作()
}
Time.sleep(1000)
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 result1 = phonef + " 🆗,本月 "+ signin_count + "天" ;
console.log(result1)
}catch (error) {
console.log("单元格【" + tokenColumn + row + "】签到出错,请检查API接口");
var errorinfo = phoneinfo + "|签到出错,检查API接口"
pushtotal.push(errorinfo);
continue; // 跳过当前行的后续操作()
}
Time.sleep(1000)
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 result2 = data3["result"]["notice"]; // 获取奖励描述
}catch (error) {
console.log("单元格【" + tokenColumn + row + "】领奖出错,请手动确认");
var errorinfo = phoneinfo + "|领奖出错,请手动确认"
pushtotal.push(errorinfo);
continue; // 跳过当前行的后续操作()
}
var loginnotice ="" //25天自动刷新token
var rfdate = Application.Range(refreshdateColumn + row).Text; // 获取指定单元格的值
if (rfdate !== '') {
Application.Range(refreshdateColumn + row).NumberFormat = 'yyyy-mm-dd;@'
var formatlogindate = Application.Range(refreshdateColumn + row).Text
function formatDateTime(date) {
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${pad(month)}-${pad(day)} `;
}
function pad(num) {
return num.toString().padStart(2, '0');
}
const currentDate = new Date();
var formacurrentdate=formatDateTime(currentDate);
function getDate(strDate){
if(strDate==null||strDate===undefined) return null;
var date = new Date();
try{
if(strDate == undefined){
date= null;
}else if(typeof strDate == 'string'){
strDate = strDate.replace(/:/g,'-');
strDate = strDate.replace(/ /g,'-');
var dtArr = strDate.split("-");
if(dtArr.length>=3&&dtArr.length<6){
date=new Date(dtArr[0], dtArr[1], dtArr[2]);
}else if(date.length>8){
date=new Date(Date.UTC(dtArr[0],dtArr[1]-1,dtArr[2],dtArr[3]-8,dtArr[4],dtArr[5]));
}
}else{
date = null;
}
return date;
}catch(e){
alert('格式化日期出现异常:' + e.message);
}
}
var timeslong = getDate(formacurrentdate).getTime()-getDate(formatlogindate).getTime();
if (timeslong >2160000000){//时间差单位毫秒(如果25天执行)
let new_token = HTTP.post("https://auth.aliyundrive.com/v2/account/token", //刷新token
JSON.stringify({
"grant_type": "refresh_token",
"refresh_token": refresh_token
}));
new_token = new_token.json()["refresh_token"]
if (new_token) {
Application.Range(tokenColumn + row).Value = new_token //重写新token
Application.Range(refreshdateColumn + row).Value = formacurrentdate //刷新token后 更新当日时间
console.log(new_token)
console.log("token刷新成功");
}
var loginnotice = "♻️阿里token成功刷新♻️";
pushtotal.push(result1,result2,loginnotice);
}
else{
pushtotal.push(result1,result2);
}
}
}
}
}
//以上遍历得到所有反馈到数组 pushtotal
var totalresult = String(pushtotal.join("\n"))
console.log(totalresult) //准备推送的内容,如果看到这个输出说明上面没问题
const date = new Date();
const formattedDate = `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`;
//push post 推送部分
var totalpushtoken = Application.Range("C15").Text
const urls = "https://sctapi.ftqq.com/"+totalpushtoken+".send"
let response = HTTP.post(
urls,
{
title: formattedDate+" 阿里盘签到",
desp:totalresult,
},
{
headers: {
"Content-Type": "application/json",
},
timeout: 60000, // 设置超时时间
}
)
-----------------------------
2022-1-22上面代码已更新,之前由于某些编辑器的原因复制粘贴出来的格式有变化导致Airscript报错
说明
25天自动刷新重写阿里token(首次部署需手动按照格式写入时间在G列,以后是基于此时间计算,25天会重新获取token并覆写老的,同时G列时间会更新。且推送通知)
页面上的代码 对应https://www.kdocs.cn/l/cj8tjHptRYdY 的最后一个表
整合推送全部用户 结果在一条信息中
|