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 相关文章推荐
TensorFlow如何实现反向传播
Feb 06 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python中常用的8种字符串操作方法
May 06 Python
Django 缓存配置Redis使用详解
Jul 23 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
python中删除某个元素的方法解析
Nov 05 Python
python 实现兔子生兔子示例
Nov 21 Python
Python FtpLib模块应用操作详解
Dec 12 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
Python机器学习之逻辑回归
May 11 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
PHP中16个高危函数整理
2019/09/19 PHP
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
windows系统下Python环境搭建教程
2017/03/28 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python tkinter组件使用详解
2019/09/16 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
python的launcher用法知识点总结
2020/08/07 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
三下乡活动方案
2014/01/31 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
解除合同协议书
2014/04/17 职场文书
应届毕业生自荐信
2015/03/04 职场文书
美术教师求职信范文
2015/03/20 职场文书
出生证明格式
2015/06/15 职场文书
安全温馨提示语大全
2015/07/14 职场文书