🎉 几行代码实现掘金自动签到+微信推送 再也不怕漏签了

11,615 阅读2分钟

项目代码 戳这里
使用问题,欢迎留言

项目初衷

之前用 腾讯云 部署过自动化脚本,就试了下掘金自动签到,搭配 pushPlus进行微信推送,发现可行,所以分享出来。

经jym测试 got 11.8.3以上版本不支持使用require语法,仓库已锁版本号,如需使用以上版本,package.json中添加"type": "module",并修改相关文件的导入导出方式

你需要用到什么

Githubnodejs这些就不说了,标配。

  • 腾讯云账号,用来发布脚本
  • pushplus账号,用来接收签到结果,需要使用微信关注公众号激活消息

使用步骤

  1. 拉代码,安装依赖,项目使用 got 进行接口请求,具体使用方法戳链接查看。

  2. 打开项目,安装依赖,配置一下config.js中的内容。

    module.exports = {
      cookie: '', 
      aid: '',
      uuid: '',
      _signature: '',
      PUSH_PLUS_TOKEN: ''
    }
    
    标题
    cookie打开控制台可以找到任意juejin请求,找到Request Header中的cookie
    aid, uuid, _signature这三个请求可以将浏览器断网之后手动点击一下签到按钮,查看请求拿到
    PUSH_PLUS_TOKENpushplus 推送用到的token,下面说明有获取方式
  3. 微信搜索pushplus推送加,关注之后激活消息。

  4. 打开公众号底部菜单栏的pushplus官网,进入官网后右上方菜单展开有个一对一推送,可以查看pushplus的推送token

    image.png

  5. 打开 [腾讯云函数](函数服务 - Serverless - 控制台 (tencent.com))登录

  6. 新建云函数,选择自定义创建, 运行环境选择Nodejs 12.16 image.png 提交方式选择本地上传文件夹,将项目代码整个传上去

    node_modules文件夹也一并上传 image.png

  7. 创建完成之后配置一下项目触发器,这里使用的是自定义触发周期,要用到corn表达式, corn表达式使用方法:(云函数 定时触发器说明 - 触发器 - 文档中心 - 腾讯云 (tencent.com)) image.png

    图上的 0 30 9 * * * * 意思就是每天的09:30执行一次代码

本地调试

打开项目,执行node app.js

云函数调试

云函数新建完毕之后,点击函数管理下面的函数代码,执行方式默认不用修改,先点击部署,再点测试, 这时候手机微信就会收到一条微信通知了,也可以在日志查询Tab内查看具体执行日志。

image.png

项目目录结构说明

app.js: 项目主代码
config.js: 项目的一些配置信息
index.js: 云函数入口,如果本地调用则不需要在意该文件

项目代码

app.js

const got = require('got')

const { cookie, aid, uuid, _signature, PUSH_PLUS_TOKEN } = require('./config')

const BASEURL = 'https://api.juejin.cn/growth_api/v1/check_in' // 掘金签到api
const PUSH_URL = 'http://www.pushplus.plus/send' // pushplus 推送api

const URL = `${BASEURL}?aid=${aid}&uuid=${uuid}&_signature=${_signature}`

const HEADERS = {
  cookie,
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67'
}

// 签到
async function signIn () {
  const res = await got.post(URL, {
    hooks: {
      beforeRequest: [
        options => {
          Object.assign(options.headers, HEADERS)
        }
      ]
    }
  })
  console.log(res.body)
  handlePush(res.body)
}

// push
async function handlePush (desp) {
  const body = {
    token: `${PUSH_PLUS_TOKEN}`,
    title: `签到结果`,
    content: `${desp}`
  };
  const res = await got.post(PUSH_URL, {
    json: body
  })
  console.log(res.body)
}

signIn()

config.js

module.exports = {
  cookie: '',
  PUSH_PLUS_TOKEN: '',
  aid: '',
  uuid: '',
  _signature: ''
}

index.js

'use strict';
exports.main_handler = async (event, context, callback) => {
  require('./app.js')
}