使用javascript写shell脚本(四) 掘金自动签到脚本以及发送邮件「终于解决」

使用javascript写shell脚本(四) 掘金自动签到脚本以及发送邮件「终于解决」“这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战” 本文主要讲解一个掘金自动签到的脚本如何写。 之前的文章: javascript写shell脚本一 基础操作 javascript写sh

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

本文主要讲解一个掘金自动签到的脚本如何写。 之前的文章:

首先要明确需求: 每天早上7点自动签到,然后发个邮件到我的邮箱,告知签到结果。

第一步,分析调用的接口

image.png

打开浏览器,按f12,点开Network面板,在界面上点击按钮 我要签到,看调用是哪个接口,在对应的接口上鼠标右键 Copy->Copy as fetch

image.png 一样的步骤,把自动抽奖的接口也复制下来

第二步,把对应的接口封装成函数

首先需要注意有些版本的curl不支持data-raw选项,需要改成data

image.png

注意要把COOKIE作为一个变量提取出来,可以从外部文件中读入,也可以用一个变量写死

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 `
}

然后在脚本中调用两个函数

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模块.

npm i node-schedule -S

使用很简单,写个demo:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13656.html

(0)

相关推荐

  • 基于Python的BinaryTree实现

    基于Python的BinaryTree实现二叉树是一种非常常见且重要的数据结构,它广泛应用于计算机科学和算法的设计中。其中,二叉树所用的数据结构关系比较简单,适合各类算法的实现。这篇文章将会介绍基于Python的BinaryTree实现,它为我们深入了解二叉树的工作方式和如何应用算法提供了一个很好的起点。

    2024-06-15
    50
  • Python脚本运行指南

    Python脚本运行指南Python是一个高级编程语言,越来越受到开发者的欢迎。Python的使用范围非常广泛,可以用于编写各种类型的脚本。为了更加顺利地运行Python脚本,我们需要一些指南。在这篇文章中,我们将介绍Python脚本运行的指南,并提供一些背景信息,希望能够对Python初学者和有经验的开发者有所帮助。

    2024-09-11
    25
  • 【漫画】JAVA并发编程 J.U.C Lock包之ReentrantLock互斥锁

    【漫画】JAVA并发编程 J.U.C Lock包之ReentrantLock互斥锁在如何解决原子性问题的最后,我们卖了个关子,互斥锁不仅仅只有synchronized关键字,还可以用什么来实现呢? J.U.C包中还提供了一个叫做Locks的包,我好歹英语过了四级,听名字我就能马上大

    2023-02-27
    150
  • Redis学习笔记(二十一) 事务

    Redis学习笔记(二十一) 事务文章开始啰嗦两句,写到这里共21篇关于redis的琐碎知识,没有过多的写编程过程中redis的应用,着重写的是redis命令、客户端、服务器以及生产环境搭建用到的主从、哨兵、集群实现原理,如果你真的能

    2023-03-11
    151
  • 学会这三招提取字符串中的数字不用愁

    学会这三招提取字符串中的数字不用愁在Excel表格中提取字符串中的数字是我们经常会遇到的问题的,那么平时朋友们都用什么方法呢?今天分享三种方法,学会这三招,提取字符串中的数字不用

    2023-03-01
    148
  • MySQL总结(八)数据库表与表之间的关系-详解

    MySQL总结(八)数据库表与表之间的关系-详解表与表之间的关系 1.表关系的概念 在现实生活中,实体与实体之间肯定是有关系的。比如:员工和部门,老师和学生等。那么我们在设计表的时候,就应该体现出表与表之间的这种关系。 表关系 描述 一对一 相对…

    2023-03-07
    158
  • 用Python绘制散点图

    用Python绘制散点图散点图是一种常见的数据可视化方式,在数据分析、机器学习等领域都有着广泛的应用。Python作为一种强大的编程语言,本身就集成了各种绘图库,可以轻松地绘制各种类型的图表,包括散点图。

    2024-07-07
    42
  • Mysql 数据恢复逻辑 基于binlog redolog undolog「建议收藏」

    Mysql 数据恢复逻辑 基于binlog redolog undolog「建议收藏」注:文中有个易混淆的地方"事务" sql事务,即每次数据库操作生成的事务,这个事务trx_id只在undolog里存储,同时undolog维护了此事务是否完成的状态。 日志持久化事

    2023-05-29
    145

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注