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实现排序算法
Feb 14 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
列举Python中吸引人的一些特性
Apr 09 Python
Python提取网页中超链接的方法
Sep 18 Python
python读写LMDB文件的方法
Jul 02 Python
pycharm配置git(图文教程)
Aug 16 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
Python魔法方法 容器部方法详解
Jan 02 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
python urllib库的使用详解
Apr 13 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之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
JavaScript 五大常见函数
2018/03/23 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python读写unicode文件的方法
2015/07/10 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
python反编译学习之字节码详解
2019/05/19 Python
python安装scipy的方法步骤
2019/06/26 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
python urllib和urllib3知识点总结
2021/02/08 Python
美的官方商城:Midea
2016/09/14 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
若干个Java基础面试题
2015/05/19 面试题
护理专科毕业生自荐书范文
2014/02/19 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
公司新年寄语
2014/04/04 职场文书
研究生简历自我评
2015/03/11 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js