送给双肾结晶患者的一个小彩蛋(Python+钉钉机器人发送喝水提醒)

背景

马上公司的体检福利快过期了,不少同学终于去体检了.

结果一出来, 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的一个基本期望,即 有效的小工具~~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值