前言
1024 的时候我发现掘金的福利兑换礼品真的是白菜价,奈何如此少的矿石,我依然没有。我每天开始去签到,只是为了来年 1024 的时候去挥霍一番,可是我发现每天都念叨这件事情属实让我很不舒服,因为只有女朋友可以让我每天如此思念 T_T
所以我决定写个自动签到的脚本来帮我干这件事情 (:
功能点
自动签到
聪明的人打开浏览器控制台就可以找到签到对应的接口:
- 查询今日是否已经签到:
https://api.juejin.cn/growth_api/v1/get_today_status
- 签到:
https://api.juejin.cn/growth_api/v1/check_in
这样一来就非常简单了,先获取一下签到状态,没签到的去签个到:
// 查询今日是否已经签到
const getTodayCheckStatus = async () => {
const cookie = '从浏览器的请求头里 copy 一个 cookie';
let { data } = await axios({
url: 'https://api.juejin.cn/growth_api/v1/get_today_status',
method: "get",
headers: {
Cookie: cookie,
},
});
return {
error: data.err_no !== 0,
isCheck: data.data,
};
};
// 签到
const checkIn = async () => {
let { error, isCheck } = await getTodayCheckStatus();
if (error) {
console.log('验证签到错误');
return;
}
if (isCheck) {
console.log('已经签到');
return;
}
const cookie = '从浏览器的请求头里 copy 一个 cookie';
let { data } = await axios({
url: 'https://api.juejin.cn/growth_api/v1/check_in',
method: "post",
headers: {
Cookie: cookie,
},
});
if (data.err_no) {
console.log('签到失败');
} else {
console.log('签到成功');
}
};
顺带免费抽奖
聪明的人又打开了浏览器的控制台找到了抽奖对应的接口:
- 获取抽奖配置:
https://api.juejin.cn/growth_api/v1/lottery_config/get
- 发起抽奖
https://api.juejin.cn/growth_api/v1/lottery/draw
这样一来就又非常简单了,先获取一下抽奖状态,没抽奖的去抽个奖:
const getTodayLotteryStatus = async () => {
const cookie = '从浏览器的请求头里 copy 一个 cookie';
let { data } = await axios({
url: 'https://api.juejin.cn/growth_api/v1/lottery_config/get',
method: "get",
headers: {
Cookie: cookie,
},
});
if (data.err_no) {
return {
error: true,
isLotteryed: false,
};
} else {
return {
error: false,
isLotteryed: data.data.free_count === 0,
};
}
};
// 抽奖
const draw = async () => {
let { error, isLotteryed } = await getTodayLotteryStatus();
if (error || isLotteryed) {
console.log('抽过啦');
return;
}
const cookie = '从浏览器的请求头里 copy 一个 cookie';
let { data } = await axios({
url: 'https://api.juejin.cn/growth_api/v1/lottery/draw',
method: "post",
headers: {
Cookie: cookie,
},
});
if (data.err_no) {
console.log('抽奖失败啦');
return;
}
console.log('抽奖结果:\n' + data);
};
失败了再顺带给我发个邮件
邮件服务可以参考:nodemailer
const sendEmail = async (subject, html) => {
// xxx
};
将上面函数里失败的 console.log()
替换成邮件提醒 await sendEmail()
丢到服务器上每天定时执行
let job = new Cron(
"10 10 10 * * *",
async () => {
await checkIn();
await draw();
},
null,
true,
'Asia/Shanghai'
);
job.start();
注意事项
由于 cookie 会过期,所以失败之后可以尝试在浏览器里重新 copy 一个 cookie 到脚本里执行。