node脚本练习一之掘金社区自动签到

思路:

1、首先查看掘金签到的接口,获取其curl和cookie(curl+exec搭配就可以发送请求)

2、代码思路

js 复制代码
const autoCheckIn = () => {
   try{
   // 发送请求
     const res = await fetchCheckIn()
     if(success){
       // 成功信息发送邮箱
     }else{
     // 失败也发送邮箱
     }
   }catch(err){
   // 失败发送邮箱
   }
}
// 定时发送信息-立即执行函数
(function scheduleLogic() {
  schedule.scheduleJob({ second: 0, minute: 0, hour: 7 }, () => {
    logic();
  });
})();

代码:

js 复制代码
const { execSync } = require("child_process"); // 引入shell
const schedule = require("node-schedule"); // 定时任务
const nodemailer = require("nodemailer"); // 发送邮件

// Create a transporter using SMTP
const transporter = nodemailer.createTransport({
  service: "qq",  // qq邮箱固定
  port: 465, // qq邮箱固定
  secureConnection: true,
  auth: {
    user: "xxxxxxxxxx@qq.com",  // 写你自己的发送邮件号
    pass: "xxxxxxxxxxxxxxxx", // 写你自己的IMAP授权码(在qq邮箱官网可看)
  },
});

/** 写死cookie*/
const myCookie = "xxxxxxxxx"; // 根据curl中的-b提取出来你自己的cookie

/**
 * 进行签到
 * @returns
 */
const checkIn = () => {
  return `curl -s 'https://api.juejin.cn/growth_api/v1/check_in?aid=2608&uuid=752451xxxxxx6&spider=0&a_bogus=dXBmDcxxxxxxxxwy' \
  -H 'accept: */*' \
  -H 'accept-language: en,zh-CN;q=0.9,zh;q=0.8' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -b '${myCookie}' \
  -H 'origin: https://juejin.cn' \
  -H 'pragma: no-cache' \
  -H 'priority: u=1, i' \
  -H 'referer: https://juejin.cn/' \
  -H 'sec-ch-ua: "Not:A-Brand";v="99", "Google Chrome";v="145", "Chromium";v="145"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-site' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36' \
  -H 'x-secsdk-csrf-token: DOWNGRADE' \
  --data '{}'`;
};

/** 签到函数 */
const logic = async () => {
  console.log("开始签到...");
  try {
    const res = JSON.parse(execSync(checkIn(), { silent: true }));
    console.log("。。。", res);
    if (res.err_no === 0) {
      console.log("签到成功...", res);
      // 签到成功
      await sendEmail({ subject: "掘金签到成功", text: "恭喜你,签到成功!" });
    } else {
      console.log("签到失败", res?.err_msg);
      await sendEmail({ subject: "掘金签到失败", text: res?.err_msg });
    }
  } catch (err) {
    console.log("签到失败");
    // 签到失败
    await sendEmail({ subject: "掘金签到失败", text: `签到失败!${err}` });
  }
};

/** 发送邮件*/
const sendEmail = async (text) => {
  // 先进行验证~
  await transporter.verify();
  console.log("Server is ready to take our messages");
  try {
    const info = await transporter.sendMail({
      from: "xxxxxxxxx@qq.com", // sender address
      to: "xxxxxxxxx@126.com", // list of recipients
      subject: text?.subject, // subject line
      text: text?.text, // plain text body
    });
    console.log("邮件发送成功", info.messageId);
  } catch (err) {
    console.error("邮件发送失败", err);
  }
};

// 定时执行签到-立即执行函数
(function scheduleLogic() {
  schedule.scheduleJob({ second: 0, minute: 0, hour: 7 }, () => {
    logic();
  });
})();
// 测试用*/
// logic();

示例:

相关推荐
没事别瞎琢磨1 小时前
十一、审计与 Run Session——每一步操作都被记录
人工智能·node.js
没事别瞎琢磨1 小时前
十六、AgentSandbox——把所有模块串起来的编排类
人工智能·node.js
没事别瞎琢磨1 小时前
十二、网络代理与白名单规则引擎
人工智能·node.js
没事别瞎琢磨2 小时前
十四、Git Worktree 隔离执行
人工智能·node.js
没事别瞎琢磨3 小时前
十、统一 Runner 入口——能力检测与模式回退
人工智能·node.js
没事别瞎琢磨3 小时前
八、环境隔离——构建安全的子进程环境
人工智能·node.js
没事别瞎琢磨4 小时前
六、输出捕获与截断
人工智能·node.js
没事别瞎琢磨4 小时前
七、敏感路径预检——Protected Paths
人工智能·node.js
没事别瞎琢磨4 小时前
五、进程执行——spawn、超时与进程树清理
人工智能·node.js
没事别瞎琢磨4 小时前
四、命令风险分级与审批策略
人工智能·node.js