一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
前言
之前写过 《白嫖云函数 实现掘金签到抽奖沾喜气的脚本》,现在bugfix活动也在网页端开放了,web端每天有两个,3天内不领取会过期,所以再加一个收集bug脚本,继续白嫖。
功能实现
分析流程
- 查询用户可收集bug数
- 循环收取bug
- 查询活动状态
- 查询可用bug数
- 参与活动
代码
- 调用接口
本次使用的接口都需要aid、uuid、cookie
三个参数,这三个参数可以在个人主页内的接口中获取。
需要使用到的接口:
/**
* @Author: yuyongxing
* @param {*} aid
* @param {*} uuid
* @param {*} cookie
* @return {*} data
* @Date: 2022-04-15 22:52:34
* @LastEditors: yuyongxing
* @LastEditTime: Do not edit
* @Description: 查询用户可收集bug数
*/
const getBugList = async (aid, uuid, cookie) => {
let { data } = await axios({
url: `https://api.juejin.cn/user_api/v1/bugfix/not_collect?aid=${aid}&uuid=${uuid}`,
method: 'post',
headers: { Cookie: cookie }
})
return data
}
/**
* @Author: yuyongxing
* @param {*} aid
* @param {*} uuid
* @param {*} cookie
* @param {*} params
* @return {*}data
* @Date: 2022-04-15 22:53:01
* @LastEditors: yuyongxing
* @LastEditTime: Do not edit
* @Description: 收集bug
*/
const collectBug = async (aid, uuid, cookie, params) => {
let { data } = await axios({
url: `https://api.juejin.cn/user_api/v1/bugfix/collect?aid=${aid}&uuid=${uuid}`,
method: 'post',
data: params,
headers: { Cookie: cookie }
})
return data
}
/**
* @Author: yuyongxing
* @param {*} aid
* @param {*} uuid
* @param {*} cookie
* @return {*} data
* @Date: 2022-04-15 22:53:16
* @LastEditors: yuyongxing
* @LastEditTime: Do not edit
* @Description: 获取活动详情
*/
const getBugFixGameInfo = async (aid, uuid, cookie) => {
let { data } = await axios({
url: `https://api.juejin.cn/user_api/v1/bugfix/competition?aid=${aid}&uuid=${uuid}`,
method: 'post',
headers: { Cookie: cookie }
})
return data
}
/**
* @Author: yuyongxing
* @param {*} aid
* @param {*} uuid
* @param {*} cookie
* @param {*} params
* @return {*} data
* @Date: 2022-04-15 22:53:32
* @LastEditors: yuyongxing
* @LastEditTime: Do not edit
* @Description: 获取活动用户详情:可用Bug数量
*/
const getBugFixGameUserInfo = async (aid, uuid, cookie, params) => {
let { data } = await axios({
url: `https://api.juejin.cn/user_api/v1/bugfix/user?aid=${aid}&uuid=${uuid}`,
method: 'post',
data: params,
headers: { Cookie: cookie }
})
return data
}
/**
* @Author: yuyongxing
* @param {*} aid
* @param {*} uuid
* @param {*} cookie
* @param {*} params
* @return {*} data
* @Date: 2022-04-15 22:53:49
* @LastEditors: yuyongxing
* @LastEditTime: Do not edit
* @Description: 参与活动
*/
const bugFix = async (aid, uuid, cookie, params) => {
let { data } = await axios({
url: `https://api.juejin.cn/user_api/v1/bugfix/fix?aid=${aid}&uuid=${uuid}`,
method: 'post',
data: params,
headers: { Cookie: cookie }
})
return data
}
- 消息推送
这次使用server酱,来实现微信消息推送。首先可以在官网注册,生成自己的sendKey
,然后调用接口传参。需要注意的是中文需要urlencode编码。
// 微信推送
const sendWxMessage = async (title, desp) => {
title = encodeURIComponent(title)
desp = encodeURIComponent(desp)
let { data } = await axios({
url: `https://sctapi.ftqq.com/${SendKey}.send?title=${title}&desp=${desp}`,
method: 'post'
})
return data
}
- 业务流程
//省略部分代码,完整代码可以从文章底部查看 githu源代码
const bugFix_start = async () => {
//1. 查询用户可收集bug数
const res_bugList = await getBugList(user.aid, user.uuid, user.cookie)
//2. 循环收取bug
if (res_bugList.err_no == 0) {
const res_collectBugByList = await collectBugByList(user.aid, user.uuid, user.cookie, res_bugList.data)
}
//3. 查询活动状态
const res_bugFixGameInfo = await getBugFixGameInfo(aid, uuid, cookie)
if (res_bugFixGameInfo.err_no == 0 && res_bugFixGameInfo.data.award_status == 1) {
// 活动进行中
//4. 查询可用bug数
const res_bugFixGameUserInfo = await getBugFixGameUserInfo(aid, uuid, cookie, { competition_id: res_bugFixGameInfo.data.competition_id })
}
//5. 参与活动
const res_bugFix = await bugFix(aid, uuid, cookie, { competition_id: res_bugFixGameInfo.data.competition_id })
}
部署云函数
部署云函数这里就不细讲了,上一篇签到脚本已经较少过了。这里介绍一个我在使用云函数时发现的一个问题:云函数的主函数里如果有未被执行完的异步会被kill掉,具体表现为:如图,云函数执行这段代码时只会输出Hello
然后函数执行到最后,异步函数并不会被调用。
解决方法:可以使用await
保证异步函数执行完成。
结尾
本项目仅适用于学习交流 并不具备其他用途(手动狗头🐶)。主要是发现有不活跃用户使用脚本签到被社区警告了,大家平时多在社区活跃一下。多输出知识和赞👍🏻。毕竟我们是技术社区,出现个脚本也正常。
完整代码查看:github