出租屋里都用的什么网,还能在线写代码,电脑上装的VSCode不香了吗?在掘金上一篇自动签到(云函数版)让我出入云开发(小程序的云函数也写过),在没必要承担服务器的高昂成本的前提下,有免费的当然要用,做个定义任务真香。不过在体验了云函数在线开发后感觉还是太麻烦,没有本地装的VSCode好用,在云函数的官方文档找到了VSCode上可以装的插件和使用指南,来一起了解一下。
VSCode和腾讯云账号请提前安排
Tencent Serverless插件
安装插件:
配置信息:
编写函数
功能介绍:
- 云函数功能:
- 下载云函数到本地:将云函数拉到本地方便修改,查看。
- 云端调试:在VSCode进行云端调试会将日志输出拉到VSCode终端进行展示。
- 本地函数:
- 创建函数:按指定模板创建云函数。
- 上传云端:将编写好的云函数上传值云端。
编写函数注意:
- 在函数目录下的src进行npm初始化,上传云端后目录完整不缺失。
- 注意node_modules过大的问题,还是建议云端IDE的终端执行安装。
- 编写后上传云端即可进行调试,如果找不到指定的模块建议在云端IDE查看目录结构是否完整。
贴代码:
- 原文章地址:
- 配置文件
exports.config = { cookie: "", email: { user: "", from: "", to: "", pass: "" } } 复制代码
- 业务部分
'use strict'; /*---------------依赖-----------------*/ const nodeMailer = require('nodemailer'); const axios = require('axios'); const conf = require('./config') /*---------------配置-----------------*/ const config = { "baseUrl": "https://api.juejin.cn", "apiUrl": { "getTodayStatus": "/growth_api/v1/get_today_status", "checkIn": "/growth_api/v1/check_in", "getLotteryConfig": "/growth_api/v1/lottery_config/get", "drawLottery": "/growth_api/v1/lottery/draw" }, "cookie": conf.config.cookie, "email": { "qq": { "user": conf.config.email.user, "from": conf.config.email.from, "to": conf.config.email.to, "pass": conf.config.email.pass, } } } /*---------------掘金-----------------*/ // 签到 const checkIn = async () => { let { error, isCheck } = await getTodayCheckStatus(); if (error) return console.log('查询签到失败'); if (isCheck) return console.log('今日已参与签到'); const { cookie, baseUrl, apiUrl } = config; let { data } = await axios({ url: baseUrl + apiUrl.checkIn, method: 'post', headers: { Cookie: cookie } }); if (data.err_no) { console.log('签到失败'); await sendEmailFromQQ('今日掘金签到:失败', JSON.stringify(data)); } else { console.log(`签到成功!当前积分:${data.data.sum_point}`); await sendEmailFromQQ('今日掘金签到:成功', JSON.stringify(data)); } } // 查询今日是否已经签到 const getTodayCheckStatus = async () => { const { cookie, baseUrl, apiUrl } = config; let { data } = await axios({ url: baseUrl + apiUrl.getTodayStatus, method: 'get', headers: { Cookie: cookie } }); if (data.err_no) { await sendEmailFromQQ('今日掘金签到查询:失败', JSON.stringify(data)); } return { error: data.err_no !== 0, isCheck: data.data } } // 抽奖 const draw = async () => { let { error, isDraw } = await getTodayDrawStatus(); if (error) return console.log('查询抽奖次数失败'); if (isDraw) return console.log('今日已无免费抽奖次数'); const { cookie, baseUrl, apiUrl } = config; let { data } = await axios({ url: baseUrl + apiUrl.drawLottery, method: 'post', headers: { Cookie: cookie } }); if (data.err_no) return console.log('免费抽奖失败'); console.log(`恭喜抽到:${data.data.lottery_name}`); } // 获取今天免费抽奖的次数 const getTodayDrawStatus = async () => { const { cookie, baseUrl, apiUrl } = config; let { data } = await axios({ url: baseUrl + apiUrl.getLotteryConfig, method: 'get', headers: { Cookie: cookie } }); if (data.err_no) { return { error: true, isDraw: false } } else { return { error: false, isDraw: data.data.free_count === 0 } } } /*---------------邮件-----------------*/ // 通过qq邮箱发送 const sendEmailFromQQ = async (subject, html) => { let cfg = config.email.qq; if (!cfg || !cfg.user || !cfg.pass) return; const transporter = nodeMailer.createTransport({ service: 'qq', auth: { user: cfg.user, pass: cfg.pass } }); transporter.sendMail({ from: cfg.from, to: cfg.to, subject: subject, html: html }, (err) => { if (err) return console.log(`发送邮件失败:${err}`, true); console.log('发送邮件成功') }) } exports.main_handler = async (event, context, callback) => { console.log('开始'); await checkIn(); await draw(); console.log('结束'); }; 复制代码
部署函数
- 在本地函数窗口执行上传云端操作。
- 在云端函数窗口执行云端调试操作,并观察终端信息。(使用定时器方式触发)
- 测试成功后就可以配置触发器来定时执行云函数了。
配置触发器:
- 在云函数控制台查看我们的云函数。
- 提交后回到函数管理确认重新部署。
- 顺便在代码编辑的下方再次做一次测试。