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();

示例:

相关推荐
雨季mo浅忆7 小时前
记录Node.js安全漏洞及其内置Brotli解码器问题
node.js·安全性测试
tommyjiatong7 小时前
资安底座连环雷:从 PHP2Shell 到 Node2Shell
node.js·php
SEO_juper11 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
SEO_juper12 小时前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
Moshow郑锴1 天前
Ansible 批量部署 Node.js 服务:ZIP 直解与共享目录分发两种方案对比
node.js·ansible
少年的范儿1 天前
Windows 安装 Node.js 教程:nvm 版本管理 + pnpm 安装配置
windows·npm·node.js
peach1 天前
同样是装依赖,为什么 npm 长成 node_modules,Maven 长成 .m2
npm·node.js·maven
FungLeo1 天前
成为全栈·Go 后端篇·重写之前先锁基线:契约、Node 版本与行为清单
golang·node.js·go·openapi·契约测试·成为全栈
FungLeo2 天前
成为全栈·Go 后端篇·契约一致性与差分测试:两套实现如何互相校验
golang·node.js·go·合约测试·差分测试·成为全栈·api兼容
月夏2 天前
前端第一次接自己的后端:mock 切真接口踩了 2 个坑,组件只改了一行 import
前端·后端·node.js