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 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
Python如何定义接口和抽象类
Jul 28 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 18 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 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 如何访问外围作用域中的变量
2016/09/11 Python
用python实现对比两张图片的不同
2018/02/05 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python3 爬取图片的实例代码
2018/11/06 Python
python生成n个元素的全组合方法
2018/11/13 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
办公室文员工作自我评价
2013/12/01 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
军训口号
2014/06/13 职场文书
作风建设整改方案
2014/10/27 职场文书
干部年终考核评语
2015/01/04 职场文书
检讨书模板
2015/01/29 职场文书
mysql 子查询的使用
2022/04/28 MySQL
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers