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修改Excel数据的实例代码
Nov 01 Python
有关wxpython pyqt内存占用问题分析
Jun 09 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
详解Python中with语句的用法
Apr 15 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
python Celery定时任务的示例
Mar 13 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
Python3中详解fabfile的编写
Jun 24 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
jQuery自动添加表单项的方法
2015/07/13 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
python3.x实现发送邮件功能
2018/05/22 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
房地产员工找工作的自我评价
2013/11/15 职场文书
妇女干部培训方案
2014/05/12 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
muduo TcpServer模块源码分析
2022/04/26 Redis