使用javascript寫shell腳本(四) 掘金自動簽到腳本以及發送郵件

這是我參與8月更文挑戰的第11天,活動詳情查看:8月更文挑戰javascript

本文主要講解一個掘金自動簽到的腳本如何寫。 以前的文章:java

首先要明確需求: 天天早上7點自動簽到,而後發個郵件到個人郵箱,告知簽到結果。node

第一步,分析調用的接口

image.png

打開瀏覽器,按f12,點開Network面板,在界面上點擊按鈕 我要簽到,看調用是哪一個接口,在對應的接口上鼠標右鍵 Copy->Copy as fetchlinux

image.png 同樣的步驟,把自動抽獎的接口也複製下來git

第二步,把對應的接口封裝成函數

首先須要注意有些版本的curl不支持data-raw選項,須要改爲datagithub

image.png

注意要把COOKIE做爲一個變量提取出來,能夠從外部文件中讀入,也能夠用一個變量寫死shell

const COOKIE=`_ga=GA1.2.151728167.1605962485; n_mh=QqqO9vdPyoUgGd`
// 簽到
function signIn(){
    return ` curl 'https://api.juejin.cn/growth_api/v1/check_in?_signature=_02B4Z6wo00101ko.H4gAAIDDtHNjubVswAZKOxsAAPOuAAlx6VxXpAuTLBl4IC1eYOBrCQaJL2bxRG2WMew4GQseXw5FTF7DWUseoJnrvSHnaYcWquty-lQ3DaLLkODkvNHe9Msoy7jWBaIz39' \ -H 'authority: api.juejin.cn' \ -H 'pragma: no-cache' \ -H 'cache-control: no-cache' \ -H 'sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36' \ -H 'content-type: application/json' \ -H 'accept: */*' \ -H 'origin: https://juejin.cn' \ -H 'sec-fetch-site: same-site' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-dest: empty' \ -H 'referer: https://juejin.cn/' \ -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7' \ -H 'cookie:${COOKIE} ' \ --data-raw '{}' \ --compressed `
}
// 抽獎
function luckyDraw(){
    return ` curl 'https://api.juejin.cn/growth_api/v1/lottery/draw' \ -H 'authority: api.juejin.cn' \ -H 'pragma: no-cache' \ -H 'cache-control: no-cache' \ -H 'sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36' \ -H 'content-type: application/json' \ -H 'accept: */*' \ -H 'origin: https://juejin.cn' \ -H 'sec-fetch-site: same-site' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-dest: empty' \ -H 'referer: https://juejin.cn/' \ -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7' \ -H 'cookie: ${COOKIE}' \ --data-raw '{}' \ --compressed `
}
複製代碼

而後在腳本中調用兩個函數npm

function logic(){
    try {
        const res= JSON.parse(shell.exec(signIn(),{silent:true})) 
        // err_no爲0表示簽到成功 err_no爲15001爲重複簽到
        if(res.err_no==0){
            // 簽到成功,執行一次自動抽獎,由於簽到成功以後有一次免費的自動抽獎
           shell.exec(luckyDraw(),{silent:true})
        }
    } catch (error) {
        // 若是自動簽到失敗,發送一封郵件通知本身

    }
    
}
複製代碼

第三步 定時執行腳本

定時執行腳本須要使用node-schedule模塊.json

npm i node-schedule -S
複製代碼

使用很簡單,寫個demo:segmentfault

const schedule = require('node-schedule');

const  scheduleCronstyle = ()=>{
  //每分鐘的第30秒定時執行一次:
    schedule.scheduleJob('30 * * * * *',()=>{
        console.log('scheduleCronstyle:' + new Date());
    }); 
}
//執行定時器
scheduleCronstyle();
複製代碼

假如我要天天早上7點執行,修改對應的規則便可:

schedule.scheduleJob({second:0,minute:0,hour:7},()=>{logic()})
複製代碼

node-schedule的更多用法,參考博客以及 官方文檔

第四步 發送郵件

發送郵件也很簡單,安裝個依賴便可npm i nodemailer -S 使用:

image.png

nodemailer更詳細的功能介紹,參考:這篇文章 以及 官方文檔

完整代碼

image.png

源碼地址: github.com/huangyangte…

最後部署一下

若是你有服務器的話,把代碼丟到服務器上,使用pm2執行一下對應的js文件便可。

個人部署路徑以下:

juejin-signin/
├── index.js
├── node-email.js
├── node_modules
├── package.json
└── package-lock.json
複製代碼

啓動腳本,做爲一個進程的話,我會使用 pm2 start index.js

最後附一下pm2的基礎使用命令

# 安裝pm2
npm install -g pm2

# 啓動進程
pm2 start app.js
# 查看進程
pm2 ls
# 結束進程
pm2 stop xxx
# 刪除進程
pm2 del xxx
# 查看日誌
pm2 logs
# 查看某個進程的日誌
pm2 logs xxx
# 重啓應用
pm2 restart xxx
複製代碼
相關文章
相關標籤/搜索