背景
马上公司的体检福利快过期了,不少同学终于去体检了.
结果一出来, 9个人的群里2个人有双肾结晶, 好几个人都经常忘了喝水.
基于此,搞了下面的 钉钉机器人, 基于设定的时间,定期进行喝水提醒.
实现流程
新建群聊钉钉机器人
这个不用说了.
要注意这里记得要配置下 安全设置, 不然就会被
{"errcode":310000,"errmsg":"keywords not in content""} 这个报错
编写脚本
具体可参见 官方文档: 企业内部开发机器人 - 钉钉开放平台
# -*- coding: utf-8 -*-
# This Python file uses the following encoding: utf-8
import requests
import json
import time
def dingmessage(tex):# 请求的URL,WebHook地址
webhook = "https://oapi.dingtalk.com/robot/send?access_token=注意这里换成自己的"#构建请求头部
header = {"Content-Type": "application/json","Charset": "UTF-8"}#构建请求数据
message ={"msgtype": "text","text": {"content":tex},"at": {"isAtAll": True}} #对请求的数据进行json封装 isAtAll 是指 要不要at所有人
message_json = json.dumps(message) #发送请求
info = requests.post(url=webhook,data=message_json,headers=header) #打印返回的结果
print(info.text)
然后就可以直接发送啦~
虽然我只是一个小小的产品,但是我的业务方(群里的其他产品)比较苛刻,提出了 例如 "定时发送","喝水签到","基于图像识别的实际摄入量监控","不及时喝水电击提醒" 等等需求, 但是本着追求投产比(能力不够)的原则,加了个定时发送的逻辑.
time_list = ['09:50:00','11:40:00','14:00:00','16:00:00','18:00:00','21:00:00']
while 1==1:
n = 1
for t in time_list:
time_now = time.strftime("%H:%M:%S",time.localtime())
time_date = time.strftime("%Y/%m/%d ",time.localtime())
time_now_struct = time.localtime()
t_struct = time.strptime(time_date+t,'%Y/%m/%d %H:%M:%S')
print('现在的时间是',time_now,',面向时间为',t,'第',n,'次')
time_diff = time.mktime(t_struct)-time.mktime(time_now_struct)
if time_diff <0:
print(t,',本次已经超时.等待下一次判断\r\n')
else:
print('预计sleep',time_diff,'秒')
time.sleep(time_diff)
time_now = time.strftime("%H:%M:%S",time.localtime())
if n == len(time_list):
text_message = "小金提醒您: 现在是 %s ,到了该喝水的时间了! 建议饮用量为 300ml.\r\n现在是今日第 %s 次播报.\r\n 下次播报就是明天了! "%(time_now,n)
print(text_message)
dingmessage(text_message)
else:
text_message = "小金提醒您: 现在是 %s 到了该喝水的时间了! 建议饮用量为 300ml.\r\n现在是今日第 %s 次播报.\r\n 下次播报为%s "%(time_now,n,time_list[n])
print(text_message)
dingmessage(text_message)
n=n+1
time.sleep(5)
print('判断今日列表循环已经完成. 等待明天重跑')
time.sleep(25200) #休息7个小时.明天继续
总结
以上全程大概花了我2-3个小时,包括里面的一些调整.
逻辑上是可以基于现在的 钉钉生态,实现一些更加复杂的互动,例如 "喝完水打卡签到不然单独at"等.
但目前没有比较迫切的需求. 等到群里出现第三个双肾结晶的人可是再试一下...
整体来说基本上达到了期望,大家也养成了看到 消息喝水的好习惯了.
也算是达到了我对Python的一个基本期望,即 有效的小工具~~