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 相关文章推荐
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
python多线程方式执行多个bat代码
Jun 07 Python
Python字符编码判断方法分析
Jul 01 Python
python django事务transaction源码分析详解
Mar 17 Python
利用python获取Ping结果示例代码
Jul 06 Python
Python global全局变量函数详解
Sep 18 Python
opencv与numpy的图像基本操作
Mar 08 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
python__new__内置静态方法使用解析
Jan 07 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 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
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
PHP实现的json类实例
2015/07/28 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
JS实现留言板功能
2017/06/17 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
常见python正则用法的简单实例
2016/06/21 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
Python实现图片识别加翻译功能
2019/12/26 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
关于python中导入文件到list的问题
2020/10/31 Python
详解python中的异常和文件读写
2021/01/03 Python
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
简短证婚人证婚词
2014/01/09 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
小学班主任培训方案
2014/06/04 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
交通事故责任认定书
2015/08/06 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python