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 相关文章推荐
win与linux系统中python requests 安装
Dec 04 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
Python编程求质数实例代码
Jan 31 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
python requests指定出口ip的例子
Jul 25 Python
Django实现跨域的2种方法
Jul 31 Python
python获取Pandas列名的几种方法
Aug 07 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
django 实现简单的插入视频
Apr 07 Python
python+requests接口自动化框架的实现
Aug 31 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
会议活动邀请函
2014/01/27 职场文书
上课迟到检讨书
2014/02/19 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
针对吵架老公保证书
2015/05/08 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
培训讲师开场白
2015/06/01 职场文书
大国崛起英国观后感
2015/06/02 职场文书
2019各种保证书范文
2019/06/24 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android