python3实现钉钉消息推送的方法示例


Posted in Python onMarch 14, 2019

背景

偶然发现一个python实现的按照农历/阴历推送消息提醒的程序,钉钉群消息推送。此处总结并对其可推送的消息做。

DingtalkNotice

环境:python3.7

安装:

pip install schedule #实现定时任务的模块
pip install DingtalkChatbot #python封装的各种消息的调用
pip install sxtwl #日历库

钉钉自定义机器人:

钉钉群机器人是一个高级扩展的功能,可以将第三方服务的信息聚合到钉钉群众,实现信息的自动化同步。1、通过聚合Github、Gitlab等源码管理服务,实现源码更新的同步;2、通过聚合Trello、JIRA等项目协调服务,实现项目信息同步;3、支持Webhook协议的自定义接入,可实现比如运维报警提醒、自动化测试结果报告提醒、工作与生活日程安排(上下班打卡、纪念日、生日)等等的提醒,均可通过自定义机器人聚合到钉钉中。目前自定义机器人支持文本(text)、链接(link)、markdown三种消息格式,五种消息类型。参考官方链接:钉钉自定义机器人,官方对各种消息的调用只提供了Java语言的封装,Python的封装见参考链接:https://3water.com/article/156661.htm,项目源码:源码

python 实现推送生日提醒的消息的源码地址:DingtalkNotice

One2TwoDigit.py

import time
def One2TwoDigit(a):
  a= int(a)
  if a<10:
    a = '0'+str(a)
  else:
    a=a
  return str(a)
 
 
def addYear(monthDay):
  monthDay = (time.strftime("%Y")) + str(monthDay)
  return monthDay

differ_days.py

#coding:utf8 
import datetime
 
def date_part(date='20170301'):
  global year,month,day
  year=date[0:4]
  month_first=int(date[4:5])
  month = date[5:6]
  if month_first ==0:
    month = date[5:6]
  else :
    month = date[4:6]
 
  day=date[6:8]
  
  year = int(year)
  month = int(month)
  day = int(day)
  
  d = datetime.date(year,month,day)
  return d

birthday_notice.py

# -*- coding: UTF-8 -*-
'''
pip install DingtalkChatbot
pip install sxtwl
'''
 
from dingtalkchatbot.chatbot import DingtalkChatbot
import time
import sxtwl
lunar = sxtwl.Lunar() 
from One2TwoDigit import One2TwoDigit,addYear
from differ_days import date_part
import datetime
 
# 初始化机器人小丁
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=' #填写你自己创建的机器人
xiaoding = DingtalkChatbot(webhook)
 
ymc = ["11", "12", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10" ]
rmc = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"]  
def birthdayNotice_job(bri_name,bri_mon,bri_day,futureDays=3):
  print("birthdayNotice_job is working...")
  dayYinli2Yangli = lunar.getDayByLunar(int(time.strftime("%Y")), bri_mon, bri_day , False) #查询阴历2018年10月20日的信息,最后一个False表示是否是润月,填True的时候只有当年有润月的时候才生效
  yangliDay = (str(dayYinli2Yangli.y) + One2TwoDigit(str(dayYinli2Yangli.m)) + One2TwoDigit(str(dayYinli2Yangli.d)))
  yangliDayMsg ='农历:' + (str(bri_mon) + '月' + (str(bri_day)) + '日' )
  print(bri_name+'阳历生日是:'+yangliDay)
  d2 = date_part(yangliDay) 
  d1 = date_part(date=datetime.datetime.now().strftime('%Y%m%d'))
  differ_day = (d2 - d1).days
  
  if 0<differ_day<=futureDays:
    name = bri_name
    xiaoding.send_text(msg= yangliDayMsg + '是【' + name + '】的生日?\n再过' + str(differ_day) + '天就到了~\n', is_at_all=True)   # Text消息@所有人
    print(time.strftime("%Y-%m-%d") + name + '的生日提前提醒发送完毕~\n')
  elif differ_day==0 :
    name = bri_name
    xiaoding.send_text(msg='今天是【' + name + '】的生日?\n祝寿星生日快乐!\n', is_at_all=True)   # Text消息@所有人
    print(time.strftime("%Y-%m-%d") + name + '的当天生日提醒发送完毕~\n')

run.py

# -*- coding: utf-8 -*-
 
from birthday_notice import birthdayNotice_job
import schedule
import time
def run():
  print("定时任务开始...")
  f_douhao = open(r"data.csv","r")
  line_douhao = f_douhao.readlines()
  for i in range(6):
    bri_name = (line_douhao[i].split(";")[0])
    bri_mon = (line_douhao[i].split(";")[1])
    bri_day = (line_douhao[i].split(";")[2])
    birthdayNotice_job(bri_name,int(bri_mon),int(bri_day),futureDays=5)
  f_douhao.close()
 
schedule.every().day.at("16:49").do(run)
while True:
  schedule.run_pending()
  time.sleep(1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理中文编码和判断编码示例
Feb 26 Python
Python实现删除文件但保留指定文件
Jun 21 Python
Python的collections模块中namedtuple结构使用示例
Jul 07 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Django中使用Celery的方法示例
Nov 29 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
python单例设计模式实现解析
Jan 07 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
python安装和pycharm环境搭建设置方法
May 27 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
python实现黄金分割法的示例代码
Apr 28 Python
详解Python做一个名片管理系统
Mar 14 #Python
在Python中使用Neo4j的方法
Mar 14 #Python
浅谈Python中eval的强大与危害
Mar 13 #Python
详解python中init方法和随机数方法
Mar 13 #Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 #Python
python ---lambda匿名函数介绍
Mar 13 #Python
Python实现的列表排序、反转操作示例
Mar 13 #Python
You might like
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
动态刷新 dorado树的js代码
2009/06/12 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
MySQL适配器PyMySQL详解
2017/09/20 Python
python协程之动态添加任务的方法
2019/02/19 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
python获取Linux发行版名称
2019/08/30 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
python实现图像全景拼接
2020/03/27 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
英语分层教学实施方案
2014/06/15 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
小学校园广播稿
2015/08/18 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Python合并多张图片成PDF
2021/06/09 Python
python元组打包和解包过程详解
2021/08/02 Python
人民币符号
2022/02/17 杂记
如何Python使用re模块实现okenizer
2022/04/30 Python