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代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
django+js+ajax实现刷新页面的方法
May 22 Python
Python 加密的实例详解
Oct 09 Python
python一键去抖音视频水印工具
Sep 14 Python
python数据归一化及三种方法详解
Aug 06 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Python如何读取文件中图片格式
Jan 13 Python
python datetime时间格式的相互转换问题
Jun 11 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
python如何代码集体右移
Jul 20 Python
python识别验证码的思路及解决方案
Sep 13 Python
python关于集合的知识案例详解
May 30 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
webpack入门必知必会
2017/01/16 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python用户管理系统
2018/03/13 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
python实现ftp文件传输功能
2020/03/20 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
自我评价中英文语句
2013/11/30 职场文书
村官工作鉴定评语
2014/01/27 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL