前言
因为本人比较懒,导致一些平台活动经常忘记打卡签到,所以经常会写一些脚本,把需要重复去做的事情交给代码去执行,而现在掘金签到获得的矿石还可以兑换礼品,就以掘金为例子,介绍一下脚本+云函数自动执行。顺便帮女朋友(xiao hao)也挂机一下。
脚本
1.创建脚本项目
环境 node v12.x.x 环境 npm 6.x.x
脚本基于node环境下,创建一个空文件夹,进入文件夹后执行npm init,然后一路回车,生成package.json文件,然后在改文件夹下新建index.js和mail.config.js。最终生成如下文件结构:其中index.js是脚本的主要逻辑代码、mail.congig.js是抽离出来的配置项,主要包括登录的邮箱账号和需要运行脚本的账号配置。
2.获取接口和入参
一般接口都会在请求headers中携带cookie或者token/authorization字段用来携带操作用户信息,少数接口会在参数内携带用户信息。f12打开控制台,查看network,找到当前操作触发的接口,获取到Request URL、Request Method、以及Request Headers中的cookie字段。掘金是以请求头中携带的cookie做的用户身份验证,有效的cookie应该是这个格式,在谷歌浏览器下可以右键复制出来。使用axios模拟请求。
// 签到
const handleCheckIn = async (cookie) => {
let { data } = await axios({
url: "https://api.juejin.cn/growth_api/v1/check_in",
method: 'post',
headers: { Cookie: cookie }
})
return data
}
// 免费抽奖
const handleDraw = async (cookie) => {
let { data } = await axios({
url: "https://api.juejin.cn/growth_api/v1/lottery/draw",
method: 'post',
headers: { Cookie: cookie }
})
return data
}
// 沾喜气
const handleDipLucky = async (cookie, param) => {
let { data } = await axios({
url: "https://api.juejin.cn/growth_api/v1/lottery_lucky/dip_lucky",
method: 'post',
data: param,
headers: { Cookie: cookie }
})
return data
}
以上是本次脚本需要使用的接口,其中签到和抽奖接口只需要携带cookie,而沾喜气需要携带一个被沾的id。
3.邮件通知服务
当签到成功或者失败时可以通过邮件通知我们,nodemailer是一个非常简单易用的nodeJs邮件发送模块。
const nodeMailer = require('nodemailer');
const transporter = nodeMailer.createTransport({
service: SMTP,
auth: {
user: "主邮箱/发送人邮箱",
pass: "授权码"
}
});
const sendEmail = (to, subject, text) => {
transporter.sendMail({
from: "发送人邮箱",
to:"接收人邮箱,多个可用‘,’分隔",
subject:"邮件主题、标题",
text:"邮件内容"
}, (err) => {
if (err) {
console.log(`发送邮件失败:${err}`);
}
})
}
此处需要注意的是,传入的auth:{pass:""} pass为邮箱授权码而不是邮箱密码,一般在 邮箱 -> 设置 -> POP3/SMTP/IMAP -> 生成授权码 可以获得。
部署云函数
腾讯的云函数有免费的额度,如果不够用的话还可以购买1元的资源包,可以说是白嫖了。
- 打开腾讯云函数控制台页面,点击新建(新用户需要认证流程)。
2.选择从头开始 -> 函数名称 -> 事件函数 -> 选择地域 -> 运行环境选择node12.16。其中函数名称只影响在列表的展示,可以语义化去定义,比如:sign_juejin。地域最好选择国内。运行环境选择node,版本号根据自己常用版本选择。
3.函数代码可以选择在线编辑。执行方法这里需要遵守云函数的规则,即:[文件名].[函数名]。其中函数名为下方代码exports.方法名暴露出的方法,两者需要命名一致。这里在下一步可以重写编辑,新建时这里可以不做修改。点击完成。
4.函数创建成功后点击函数管理进入函数编辑页面,按照脚本结构创建文件,将代码粘贴进来,修改执行方法。
5.编辑器右下角可以查看当前是新版还是旧版编辑器。新版编辑器直接打开终端,运行npm install安装依赖(注意文件结构,比如我是在src文件下,需要先cd src进入src文件下执行),然后点击部署、测试;旧版编辑器选择在线安装依赖,然后点击部署、测试。
测试完成后可以查看日志,如果没有问题就可以进入下一步,定时执行该脚本。
6.点击触发管理 -> 创建触发器,下拉触发周期,如果设定的触发周期无法满足需求,可以自定义,需要自己配置Cron表达式,具体规则可以查看文档(0 0 8 * * * *表示每天8点执行一次)。点击保存,等着函数自动触发就行啦。
结尾
觉得查看邮件的比较麻烦的话还可以接入微信推送:Server酱。Server酱使用起来也非常方便,只需要:微信扫码登入 -> 获取Sendkey -> 调用接口https://sctapi.ftqq.com/<SENDKEY>.send?title=short_title 就可以收到推送消息。
完整代码查看:github