node 定时任务 签到

278 阅读3分钟

1.定时任务

推荐使用node-schedule库

  • 什么是定时任务
    • 定时任务就是在预定的时间 去执行 后台任务 如 数据备份 日志清楚 自动签到

2.安装依赖

node-schedule官网

npm install node-schedule

npm intall request

3.cron表达式

  • Cron表达式是一种用于指定定时任务执行时间的字符串表示形式。它由6个或7个字段组成,每个字段表示任务执行的时间单位和范围。

    *    *    *    *    *    *
    ┬    ┬    ┬    ┬    ┬    ┬
    │    │    │    │    │    │
    │    │    │    │    │    └── 星期(0 - 6,0表示星期日)
    │    │    │    │    └───── 月份(1 - 12)
    │    │    │    └────────── 日(1 - 31)
    │    │    └─────────────── 小时(0 - 23)
    │    └──────────────────── 分钟(0 - 59)
    └───────────────────────── 秒(0 - 59)
    
    是否必须取值范围特殊字符
    秒 Seconds0-59*,- ,/
    分钟 Minutes0-59*,-, /
    小时hours0-23*,-, /
    日期DayofMonth1-31*, - ,/ ? L W
    月份Mthon1-12*, - ,/
    星期DayofWeek[1, 7]或[MON, SUN]。若使用[1, 7]表达方式,1代表星期一,7代表星期日。*, - ,/ ? L W
    年year1970+*,- ,/
    • 数值:表示具体的时间单位,如1、2、10等。

    • 范围:使用-连接起始和结束的数值,表示一个范围内的所有值,如1-5表示1到5的所有数值。

    • 通配符:使用*表示匹配该字段的所有可能值,如*表示每分钟、每小时、每天等。

    • 逗号分隔:使用逗号分隔多个数值或范围,表示匹配其中任意一个值,如1,3表示1或3。

    • 步长:使用/表示步长,用于指定间隔的数值,如*/5表示每隔5个单位执行一次。

    • 特殊字符:Cron表达式还支持一些特殊字符来表示特定的含义,如?用于替代日和星期字段中的任意值,L表示最后一天,W表示最近的工作日等。

    每个字段可以接受特定的数值、范围、通配符和特殊字符来指定任务的执行时间:

    • * * * * * * :每秒执行一次任务。

    • 0 * * * * * : 每分钟执行一次任务

    • 0 0 * * * * :每小时执行整点执行任务

    • */5 * * * * * : 每5秒执行任务

    • 0 0 * * 1 * :每周一 凌晨午夜执行任务

      这是因为在 `node-schedule` 的 Cron 表达式中,如果你只提供了五个字段(如 `0 0 * * 1 *`),那么这五个字段将按照以下顺序解析:
      
      1. 秒(0 - 59)
      2. 分钟(0 - 59)
      3. 小时(0 - 23)
      4. 日期(1 - 31)
      5. 星期几(0 - 7)(0 和 7 都代表星期日)
      
      所以在 `0 0 * * 1 *` 中,`1` 是在星期几的位置,代表星期一。
      
    • 0 0 * * 1 2 : 在1月每个星期二 午夜执行任务

      然而,如果你提供了六个字段(如 0 0 * * 1 2),那么这六个字段将按照以下顺序解析:
      
      秒(0 - 59)
      分钟(0 - 59)
      小时(0 - 23)
      日期(1 - 31)
      月份(1 - 12)
      星期几(0 - 7)(0 和 7 都代表星期日)
      所以在 0 0 * * 1 2 中,1 是在月份的位置,代表一月,而 2 是在星期几的位置,代表星期二。
      

4. 代码编写(掘金自动签到)

index.js

import schedule from 'node-schedule';
import config from './config.js';
import request from 'request';
schedule.scheduleJob('30 0 0 * * *', function () {
  request(
    config.check_url,
    {
      method: 'POST',
      headers: {
        Referer: config.url,
        Cookie: config.cookie,
      },
    },
    (err, res, body) => {
      if (!err && res.statusCode === 200) {
        console.log(body);
      }
    }
  );
});

config.js

export default {
    cookie: 'sessionid=你的cookie',
    url: 'https://juejin.cn/',
    check_url: 'https://api.juejin.cn/growth_api/v1/check_in?aid=你的aid&uuid=你的uuid'
}

aid和uuid

cookie