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中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
Python实现队列的方法
May 26 Python
Python数据操作方法封装类实例
Jun 23 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
python如何保证输入键入数字的方法
Aug 23 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 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同时连接多个mysql数据库示例代码
2014/03/17 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
会计工作心得体会
2014/01/13 职场文书
我为自己代言广告词
2014/03/18 职场文书
大学生就业求职信
2014/06/12 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
上甘岭观后感
2015/06/10 职场文书
雷锋电影观后感
2015/06/10 职场文书
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python