企业微信推送课表
- 作者:申也
- 个人网站:申也个人网站(www.dongshengye.space)
- 个人公众号:申也
- B站:申也_
- 本项目交流群:474570120
目录
示例
文件结构
wxComMy
├── common //通用文件
│ ├── class.tips.js
│ └── weather.city.js
├── config //配置文件
│ ├── class.config.js
│ ├── weather.config.js
│ └── yi.config.js
├── index.js //入口文件
├── package-lock.json
├── package.json
└── request //主要网络请求文件
├── class.request.js
├── weather.request.js
└── yi.request.js
快速开始
克隆仓库
请在公众号申也
后台,发送企业微信推送
,获取源码链接。
生成依赖
npm install
企业微信准备
企业微信注册
https://work.weixin.qq.com/
直接注册即可
创建应用
如下依次点击,之后会让你填写一些信息,按照自己需求填写即可
![image-20220926081051190](http://myimg.resumeg.club/markdown_img/image-20220926081051190.png)
获取配置信息
配置说明
如果你想操作你创建的应用,那么需要去获取一些信息。
corpid
:企业微信idcorpsecret
:应用密码agentid
:应用代码
如何获取
agentid和corpsecret按照如下方式获取
corpid如下图所示
下载微信插件
想要将企业微信发送到微信客户端,需要加载企业微信插件,具体流程如下
测试
创建好应用之后,可以点进去应用,并点击发送消息,查看能否接收到消息。
如果可以,那我们接下来利用代码实现自动化。
修改配置
配置文件说明
所有配置文件都在config
文件夹中,大家从上文文件结构中可以看到有两个config.js文件。
weather.config.js
:推送天气的配置文件- corpId:请看上文
- corpSecret:请看上文
- agentId:请看上文
- province:省份
- city:城市
class.config.js
:推送课表的配置文件- corpId:请看上文
- corpSecret:请看上文
- agentId:请看上文
- classMo:我女朋友的课表
- classSheng:我的课表
配置文件示例
天气示例
课表示例
注意:
我用了两个应用来分别发送我和我女朋友的课表,所以
corpSecret
和agentId
都为一个二维数组课表是7x5的数组,代表的是一周七天,一天五节课,从周日到周一
课表最小单元的存储为JavaScript中的对象,有三个属性名
name:课程名称
pos:上课地点
time:从第几周开始,到第几周结束(连字符为 - )
上传服务器
如果你有服务器,本地调试成功之后直接将项目文件打包,并传输到你的服务器。
需要环境
- node
- npm
具体linux或window如何配置环境,可以在网上看一下其他的博客。
注意:
- 本项目入口文件为
index.js
,配置好环境之后,首先可以在服务器进行测试,node index.js
,查看自己的微信能否接收。- 入口文件实现的原理为node中的
child_process
创建一个 shell,然后在 shell 里执行命令。*但是!*我在我本地运行和在服务器运行结果不一样,因为服务器环境和本地环境不同。最稳妥的方法是下文细讲
至于我的实现方法,是在linux系统上安装了宝塔面板,然后通过宝塔面板的计划任务进行的。
具体可以查看我的另一篇博客:
https://blog.csdn.net/qq_51490212/article/details/126919785
其中有一些宝塔面板的操作方法,与此次几乎没有差别。
结语
至此,你就实现了企业微信推送的所有功能。
很明显的可以看到,这里用到的逻辑很简单,就是
- 将你当做企业微信中的一位员工
- 用代码给员工发消息,实现自动化
- 上传服务器实现定时推送
接下来我们详细说明一下各个文件的具体作用。
详细说明
所用工具包
- axios:异步网络请求
- moment.js:时间处理
文件结构
wxComMy
├── common //通用文件
│ ├── class.tips.js
│ └── weather.city.js
├── config //配置文件
│ ├── class.config.js
│ ├── weather.config.js
│ └── yi.config.js
├── index.js //入口文件
├── package-lock.json
├── package.json
└── request //主要网络请求文件
├── class.request.js
├── weather.request.js
└── yi.request.js
config文件夹
很明显,这是一个配置文件夹,也是用户需要修改的一个文件,前文已经说得很多,这里不再赘述
common文件夹
一些通用的,对代码整体性没有影响的文件。
class.tips.js
:存放激励语录,用于发课表时附带weather.city.js
:存放城市对应代码,通过代码获取天气。
request文件夹
主要文件,用于逻辑实现和发送请求。
整体说明
-
class.request.js
-
weather.request.js
可以看到,两个文件的主要函数大差不差
- 获取token
- 获取信息
- 将token和信息进行发送
课表文件 class.request.js
这其实是整个逻辑中最复杂的地方,因为要对课表进行处理
主要功能如下:
- 获取token
- 判断本周是第几周
- 根据本周周次获取本周的课表
- 判断今天是本周第几天
- 根据第几天获取明天的课表
- 包装课表信息
- 将信息携带token发送到微信服务器,微信自动发送信息
可以看到,其中最重要的是对时间的处理,所以我用到了moment.js
这个包,这是一个很方便的处理时间的包。
他的中文官网为:http://momentjs.cn/
天气文件 weather.request.js
这里和class.request.js文件差不多,只是将获取课表信息变成了获取天气信息。
获取天气信息更加简单
- 获取token
- 根据weather.config.js文件中的province与city获取城市代码
- 将城市代码发送给外部api获取天气信息
- 包装天气信息
- 将信息携带token发送到微信服务器,微信自动发送信息
入口文件index.js
作用
因为能每次运行文件的时候,都去node一遍request中的所有文件,所以我用代码替我node运行。
代码逻辑
- 读取request目录
- 进入遍历,生成命令,并执行命令
注意
由于实现方法是用node中的child_process
模块,这个模块受运行环境影响比较大,最保险的方法,是直接从根目录出发,去运行文件。
将order命令改成如下即可
let order = `/www/server/nodejs/v14.17.6/bin/node ${__dirname}/request/`
总结
所有代码已上传本人gitee,特地给大家做了一个交流群,大家有什么问题可以在群里交流
qq群号:474570120
我也会不定期在群里回答大家问题。