node腳本實現(xiàn)自動化簽到和抽獎功能
一、前言
掘金自從推出簽到活動后,就不斷的完善這個功能,現(xiàn)在礦石能抽獎還能兌換物品(簡直不要太爽!?*??(ˊ?ˋ*)??*?),樓主本人很早之前就在用掘金了(掘金簽到功能出來之前),但是本人很懶導致打卡簽到斷斷續(xù)續(xù)的,所以只能眼睜睜看著別人兌換獎品(羨慕、嫉妒?(?`^´?)?),現(xiàn)在礦石也沒有過w(主要碰運氣去了( • ?ω•? )?),而正好前不久看過一些掘金的博主發(fā)了自動簽到的相關文章,感覺這是個不錯的辦法,所以趁著元旦好好支棱一下,因為前不久買了個便宜的騰訊云服務器加上本人是個前端老白菜,所以決定使用云服務器加node定時腳本的方法來實現(xiàn)自動化簽到抽獎功能。決定好方向后就開始查文章,所以直接搜了自動簽到關鍵字,開始一篇篇看文章,然后著手自己實現(xiàn),廢話不多說了,接下來看看如何實現(xiàn)自動簽到抽獎吧。
二、準備
服務器
看了很多文章,基本都是使用一個請求包和定時任務觸發(fā)包來實現(xiàn),看了一下有用油猴腳本的、云函數(shù)的、node腳本,基本涵蓋全了。但是不管用啥,思想和調(diào)用的接口都是一樣的,所以本文是基于云服務器來實現(xiàn),需要一個云服務器或者一臺聯(lián)網(wǎng)的24小時不關機的電腦。
node環(huán)境
這個就不多說了,node環(huán)境安裝網(wǎng)上都有,但是想必大家一定都安裝好了。整理好環(huán)境就開始著手建工程。
三、腳本工程搭建
創(chuàng)建一個文件夾,寫上工程名(隨便起個名字( ̄▽ ̄)/);

然后打開文件夾下的dos窗口(cmd),或者用VsCode打開文件夾;

在窗口里面輸入npm init,然后一路回車,生成package.json文件;

然后這里準備兩個包,一個是axios,另一個是node-schedule,分別安裝如下:
npm i axios npm i node-schedule
完成安裝后如下圖;

然后在根目錄中新建index.js和config.js文件,用于代碼和參數(shù)編寫;

至此就搭建完整個node腳本的工程文件了,接下來就是代碼編寫。
四、代碼編寫&運行
先將使用的參數(shù)抽取到一個文件內(nèi)(config.js)
//config.js
//查詢今日是否簽到成功接口 https://api.juejin.cn/growth_api/v1/get_today_status
module.exports = {
//掘金相關參數(shù)
nuggets: {
signInUrl: `https://api.juejin.cn/growth_api/v1/check_in`, //簽到接口
freeCheckUrl: `https://api.juejin.cn/growth_api/v1/lottery_config/get`, //免費抽獎次數(shù)查詢
drawUrl: `https://api.juejin.cn/growth_api/v1/lottery/draw`, //抽獎接口
headers: {
Referer: "https://juejin.cn/",
"Upgrade-Insecure-Requests": 1,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
cookie: `這里填寫自己的cookie,登錄掘金網(wǎng)頁版后打開控制臺的network,隨便找一個請求,查看請求頭里面的cookie復制過來即可`, //用自己的
}, //相關請求頭
},
//消息推送相關參數(shù) 關注pushplus微信公眾號可以獲得一對一推送的調(diào)用參數(shù),不是推廣
pushPlus: {
url: `http://www.pushplus.plus/send`, //微信推送URL
token: `這個是pushplus里面獲取的token,關注公眾號然后打開官網(wǎng)找到一對一推送就可以拿到token了`, //沒有廣告啊,這是免費的
}
}
這個文件內(nèi)需要修改內(nèi)容主要是cookie和token,分別用于掘金接口請求和wx消息推送,如果不需要使用wx消息推送直接在pushMsg函數(shù)的第一行加一行return;就可以了。
這里cookie直接登錄PC端掘金,按F12打開控制臺,去network,然后點一下頁面的一些交互,就能捕獲到請求,然后在里面找到cookie然后復制過來就行了,如下圖。

wx消息推送的token獲取方法直接在wx上搜pushplus的公眾號,然后關注后激活消息推送,去官網(wǎng)拿到token添到文件里面即可(這里不是廣告??!看大佬博客借鑒的,還是挺好用的 ─━ _ ─━?)。
最后進行代碼編寫 (index.js)
這里簡要摘出一部分來說吧,整個代碼放上來太多了,主要就放簽到和定時任務這一部分吧,整個項目我會上傳到Github和Gitee上,歡迎大家下載學習(可以的話,給個star也行(?ω<)☆)。
//需要使用的包文件
const axios = require("axios");
const schedule = require("node-schedule");
//相關參數(shù)保存在文件內(nèi)
const { nuggets, pushPlus } = require("./config");
/**
* 獲取當前時間的格式化時間
* @param {String} key 調(diào)用js日期函數(shù)字符串
* @returns 當前時間格式化的字符串
*/
const getNowTime = (key) => {
let nowTime = ``;
try {
nowTime = new Date()[key]();
} catch (e) {
nowTime = `獲取時間函數(shù)錯誤!`;
console.error(`請傳入日期函數(shù) —— ${e}`);
}
return nowTime;
}
/**
* 掘金自動簽到 請求方法
*/
const hacpaiSignRequest = async () => {
console.log(`\n\n------${getNowTime(`toLocaleDateString`)} - 開始簽到------\n`);
const { headers, signInUrl } = nuggets; //簽到相關參數(shù)
const res = await axios({
url: signInUrl,
method: `post`,
headers,
});
if (res && res.data) {
let jsonMsg = JSON.stringify(res.data);
console.log(`\n ${jsonMsg} \n \n ------ ${getNowTime(`toLocaleTimeString`)} 簽到成功 ------\n`);
pushMsg(`掘金簽到結(jié)果`, res.data); //簽到成功后推送消息
//簽到成功后,30s內(nèi)查詢免費抽獎次數(shù)
setTimeout(() => {
freeCheck();
}, Math.random() * 30 * 1000)
} else {
console.log(res);
console.log(`\n ------ ${getNowTime(`toLocaleTimeString`)} 簽到失敗 ------ \n`);
pushMsg(`掘金簽到結(jié)果`, { '簽到失敗': res.data }); //簽到成功后推送消息
}
}
//定時觸發(fā)任務
const signTask = () => {
//每天在6:00-6:10隨機簽到
schedule.scheduleJob("0 0 6 * * *", () => {
setTimeout(() => {
hacpaiSignRequest(); //簽到函數(shù)
}, Math.random() * 10 * 60 * 1000)
})
}
//開始執(zhí)行任務
console.log(`開始執(zhí)行任務-${getNowTime('toLocaleString')}`);
signTask();
這里代碼不能直接使用,因為有些函數(shù)沒有放上去,這里編寫邏輯主要就是簽到—》查詢免費抽獎次數(shù)—》抽獎,這個流程,每天6:00-6:10內(nèi)任意一個時段隨機觸發(fā)(害怕寫死被當成機器人!!!∑(?Д?ノ)ノ)。代碼還是挺好寫的,主要把需求邏輯理順,然后找到相關的接口就行,最后不管用什么請求包,只要是http請求就可以完成這些功能。
最后在cmd窗口內(nèi)輸入node index.js就可以執(zhí)行代碼了,然后一直放在穩(wěn)定的環(huán)境中運行就行了(我直接扔服務器?(?????)?)。
本文主要使用了wx消息推送,如果各位看官有需要郵箱消息推送的需求可以在評論區(qū)告訴我,我可以之后再寫一篇關于使用node進行郵箱消息推送的文章,感謝大家支持!(自己想寫就寫唄!還說出來!ヾ(•ω•`。))
五、總結(jié)以及想說的話
剛開始想著這個應該可能有點難做,但實際接觸后發(fā)現(xiàn)也沒有那么難寫,主要還是需要克服自己心理上的障礙,克服懶惰以及不想干的情緒,我希望能找回大學時候的那種感覺,不管能不能做成,先硬著頭皮接下來,總會有辦法解決的,大不了多花一些時間,相信只有這樣才能讓自己成長,繼續(xù)加油吧!小D!還有正在讀這篇博客的同學,大家也要一起加油喲!( ̄▽ ̄)/
六、相關源碼和借鑒的博客
源代碼
gitee AutomaticCheck-inJueJin
github: AutomaticCheck-inJueJin
借鑒過的文章 大佬們的博客(順序不分先后(*?ω?)):
一百行代碼實現(xiàn)!云函數(shù)版掘金自動簽到&抽獎&郵件提醒~
?? 幾行代碼實現(xiàn)掘金自動簽到+微信推送 再也不怕漏簽了
云函數(shù)定時觸發(fā)掘金社區(qū):自動簽到 、自動免費抽獎 ????
到此這篇關于node腳本實現(xiàn)自動化簽到和抽獎功能的文章就介紹到這了,更多相關node自動簽到抽獎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
express + jwt + postMan驗證實現(xiàn)持久化登錄
這篇文章主要介紹了express + jwt + postMan驗證實現(xiàn)持久化登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06
node-webkit打包成exe文件被360誤報木馬的解決方法
這篇文章主要介紹了node-webkit打包成exe文件被360誤報木馬的解決方法的相關資料,需要的朋友可以參考下2015-03-03
nodejs開發(fā)微信小程序?qū)崿F(xiàn)密碼加密
本文給大家分享的是在使用nodejs開發(fā)微信小程序的過程中,實現(xiàn)密碼加密的示例代碼,非常簡單,有需要的小伙伴可以參考下2017-07-07

