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的pandas框架操作Excel文件中的数据教程
Mar 31 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
Python连接DB2数据库
Aug 27 Python
python timestamp和datetime之间转换详解
Dec 11 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
Python性能分析工具Profile使用实例
Nov 19 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python json格式化打印实现过程解析
Jul 21 Python
Django rest framework分页接口实现原理解析
Aug 21 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
javascript 一些用法小结
2009/09/11 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
python实现简单的单变量线性回归方法
2018/11/08 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python画微信表情符的实例代码
2019/10/09 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
路政管理专业推荐信
2013/11/11 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
课题研究阶段性总结
2015/08/13 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python