文章的主要内容是介绍怎么利用钉钉的自定义机器人来自动通知技术部的今日分享。目的是想给大家提供一种『利用钉钉的「自定义机器人」实现「定时」通知「固定格式消息」的实现思路』。
需求来源
背景
- 公司使用钉钉作为聊天软件
- 钉钉存在对外开放的接口,例如『自定义机器人』
- 技术部一直有分享的氛围
起因
有分享者自然也要有听众,这样分享者才有动力。那么分享者采用什么方式通知到听众今天要分享的内容呢?目前我们都是提前把分享内容告知给郭大侠,然后由郭大侠统一在分享开始之前,『手动』在技术部的钉钉群里通知即将要分享的相关内容。但这样做存在两个问题:
- 当你提前告知郭大侠分享内容之后,必须再一次通知郭大侠才能修改之前定的分享日期,不能实现自主修改
- 郭大侠有时候会忘记在群里发通知
由于通过『郭大侠手动通知分享内容』的现行方式存在以上两个问题,于是就有了想写一个程序来实现自动通知分享内容的想法。Let’s do it.
实现思路
- 先写一个 python 脚本。将公司内部专门用来记录分享内容的 wiki 页面 爬下来,然后进行解析,得到分享内容。然后利用钉钉提供的 自定义机器人 将分享内容通知到技术部聊天群
- 再写一个定时任务。用来每天定时跑上面写好的 python 脚本
先写一个 python 脚本
工欲善其事,必先利其器。
下面介绍几个能节省几周工作时间的 python 类库。
BeautifulSoup
Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。Beautiful Soup 会帮你节省数小时甚至数天的工作时间。
Requests
Requests is the only Non-GMO HTTP library for Python, safe for human consumption.
代码注意,代码采用 python3 实现。
1 | #!/usr/bin/env python3 |
复用上面这段代码需要注意两点:
doc_url 需要替换成自己要解析的网页地址
dingding_url 需要替换成自己的钉钉机器人的 webhook 地址
再写一个定时任务
linux 机器有一个 crontab 命令,这个是 linux 系统提供的实现自定义系统计划的命令。
编辑系统计划
crontab -e
查看系统计划
crontab -l
自定义一个系统计划
crontab 格式说明
crontab 命令示例40 8 * * * /home/hufei/parse-all.py >> /home/hufei/out-all.file 2>&1
40 8 * * *
每天的 8 点 40 分>
表示覆盖>>
表示追加1
表示 stdout 标准输出,系统默认值是 12
表示 stderr 标准错误&
表示等同于的意思2>&1
表示 2 的输出重定向等同于 1
实现效果
分享内容的格式
钉钉通知消息的格式