1. 程式人生 > 程式設計 >node指令碼實現自動化簽到和抽獎功能

node指令碼實現自動化簽到和抽獎功能

目錄
  • 一、前言
  • 二、準備
  • 三、工程搭建
  • 四、程式碼編寫&執行
  • 五、總結以及想說的話
  • 六、相關原始碼和借鑑的部落格

一、前言

  掘金自從推出簽到活動後,就不斷的完善這個功能,現在礦石能抽獎還能兌換物品(簡直不要太爽!✧*。(ᗜ*)✧*。),樓主本人很早之前就在用掘金了(掘金簽到功能出來之前),但是本人很懶導致打卡簽到斷斷續續的,所以只能眼睜睜看著別人兌換獎品(羨慕、嫉妒(๑`^´๑)),現在礦石也沒有過w(主要碰運氣去了( • ω• )✧),而正好前不久看過一些掘金的博主發了自動簽到的相關文章,感覺這是個不錯的辦法,所以趁著元旦好好支稜一下,因為前不久買了個便宜的騰訊雲伺服器加上本人是個前端老白菜,所以決定使用雲伺服器加node定時指令碼的方法來實現自動化簽到抽獎功能。決定好方向後就開始查文章,所以直接搜了自動簽到

關鍵字,開始一篇篇看文章,然後著手自己實現,廢話不多說了,接下來看看如何實現自動簽到抽獎吧。

二、準備

伺服器

  看了很多文章,基本都是使用一個請求包和定時任務觸發包來實現,看了一下有用油猴指令碼的、雲函式的、node指令碼,基本涵蓋全了。但是不管用啥,思想和呼叫的介面都是一樣的,所以本文是基於雲伺服器來實現,需要一個雲伺服器或者一臺聯網的24小時不關機的電腦。

node環境

  這個就不多說了,node環境安裝網上都有,但是想必大家一定都安裝好了。整理好環境就開始著手建工程。

三、指令碼工程搭建

建立一個資料夾,寫上工程名(隨便起個名字( ̄▽ ̄)/);

輸入cmd

然後開啟資料夾下的dos視窗(cmd),或者用VsCode開啟資料夾;

開啟dos

在窗口裡面輸入npm init,然後一路回車,生成package.on檔案;

初始化工程

然後這裡準備兩個包,一個是axios,另一個是node-schedule,分別安裝如下:

npm i axios
npm i node-schedule

完成安裝後如下圖;

安裝包

然後在根目錄中新建index.jsconfig.js檔案,用於程式碼和引數編寫;

檔案新增

至此就搭建完整個node指令碼的工程檔案了,接下來就是程式碼編寫。

四、程式碼編寫&執行

先將使用的引數抽取到一個檔案內config.js

//config.js
//查詢今日是否簽到成功介面  https://api.juejin.cn/growth_api/v1/get_today_status
module.exports = {
  //掘金相關引數
  nuggets: {
    signInUrl: `https://api.juejin.cn/growth_api/v1/check_in`,//簽到介面
    freeCheckUrl: `https://api.juejin.cn/growth_api/v1/lottery_config/get`,//免費抽獎次數查詢
    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,登入掘金版後開啟控制檯的network,隨便找一個請求,檢視請求頭裡面的cookie複製過來即可`,//用自己的
    },//相關請求頭
  },//訊息推送相關引數 關注pushplus微信公眾號可以獲得一對一推送的呼叫引數,不是推廣
  pushPlus: {
    url: `http://www.pushplus.plus/send`,//微信推送URL
    token: `這個是pushplus裡面獲取的token,關注公眾號然後開啟官網找到一對一推送就可以拿到token了`,//沒有廣告啊,這是免費的
  }
}

  這個檔案內需要修改內容主要是cookietoken,分別用於掘金介面請求和wx訊息推送,如果不需要使用wx訊息推送直接在pushMsg函式的第一行加一行rhttp://www.cppcns.cometurn;就可以了。

  這裡cookie直接登入PC端掘金,按F12開啟控制檯,去network,然後點一下頁面的一些互動,就能捕獲到請求,然後在裡面找到cookie然後復制過來就行了,如下圖。

獲取cookie

  wx訊息推送的token獲取方法直接在wx上搜pushplus的公眾號,然後關注後啟用訊息推送,去官網拿到token添到檔案裡面即可(這裡不是廣告啊!看大佬部落格借鑑的,還是挺好用的 ─━ _ ─━✧)。

最後進行程式碼編寫index.js

  這裡簡要摘出一部分來說吧,整個程式碼放上來太多了,主要就放簽到和定時任務這一部分吧,整個專案我會上傳到和Gitee上,歡迎大家下載學習(可以的話,給個star也行(・ω<)☆)。

//需要使用的包檔案
const axios = require("axios");
const schedule = require("node-schedule");
//相關引數儲存在檔案內
const { nuggets,pushPlus } = require("./config");

/**
 * 獲取當前時間的格式化時間
 * @param {String} key 呼叫js日期函式字串
 * @returns 當前時間格式化的字串
 */
const getNowTime = (key) => {
  let nowTime = ``;
  try {
    nowTime = new Date()[key]();
  } catch (e) {
    nowTime = `獲取時間函式錯誤!`;
    console.error(`請傳入日期函式 —— ${e}`);
  }
  return nowTime;
}

/**
 * 掘金自動簽到 請求方法
 */
const hacpaiSignRequest = async () => {
  console.log(`\n\n------${getNowTime(`toLocaleDateString`)} - 開始簽到------\n`);
  const { headers,signInUrl } = nuggets; //簽到相關引數
  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(`掘金簽到結果`,res.data); //簽到成功後推送訊息
    //簽到成功後,30s內查詢免費抽獎次數
    setTimeout(() => {
      freeCheck();
    },Math.random() * 30 * 1000)
  } else {
    console.log(res);
    console.log(`\n ------ ${getNowTime(`toLocaleTimeString`)} 簽到失敗 ------ \n`);
    pushMsg(`掘金簽到結果`,{ '簽到失敗': res.data }); //簽到成功後推送訊息
  }
}

//定時觸發任務
const signTask = () => {
  //每天在6:00-6:10隨機簽到
  schedule.scheduleJob("0 0 6 * * *",() => {
    setTimeout(() => {
      hacpaiSignRequest(); //簽到函式
    },Math.random() * 10 * 60 * 1000)
  })
}

//開始執行任務
console.log(`開始執行任務-${getNowTime('toLocaleString')}`);
signTask();

  這裡程式碼不能直接使用,因為有些函式沒有放上去,這裡編寫邏輯主要就是簽到—》查詢免費抽獎次數—》抽獎,這個流程,每天6:00-6:10內任意一個時段隨機觸發(害怕寫死被當成機器人!!!∑(゚゚ノ)ノ)。程式碼還是挺好寫的,主要把需求邏輯理順,然後找到相關的介面就行,最後不管用什麼請求包,只要是http請求就可以完成這些功能。

最後在cmd視窗內輸入node index.js就可以執行程式碼了,然後一直放在穩定的環境中執行就行了(我直接扔伺服器(๑❛ᴗ❛๑))。

  本文主要使用了wx訊息推送,如果各位看官有需要郵箱訊息推送的需求可以在評論區告訴我,我可以之後再寫一篇關於使用node進行郵箱訊息推送的文章,感謝大家支援!(自己想寫就寫唄!還說出來!ヾ(•ω•`。))

五、總結以及想說的話

  剛開始想著這個應該可能有點難做,但實際接觸後發現也沒有那麼難寫,主要還是需要克服自己心理上的障礙,克服懶惰以及不想幹的情緒,我希望能找回大學時候的那種感覺,不管能不能做成,先硬著頭皮接下來,總會有辦法解決的,大不了多花一些時間,相信只有這樣才能讓自己成長,繼續加油吧!小D!還有正在讀這篇部落格的同學,大家也要一起加油喲!( ̄▽ ̄)/

六、相關原始碼和借鑑的部落格

原始碼

gitee AutomaticChttp://www.cppcns.comheck-inJueJin

github: AutomaticCheck-inJueJdQrKnZRuin

借鑑過的文章 大佬們的部落格(順序不分先後(*❦ω❦)):

掘金免漏籤!自動簽到&自動免費抽獎

一百行程式碼實現!雲函式版掘金自動簽到&抽獎&郵件提醒~