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之入门(二)基本数据类型
May 25 Python
python使用tkinter实现简单计算器
Jan 30 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
用Python shell简化开发
Aug 08 Python
python绘制随机网络图形示例
Nov 21 Python
python ftplib模块使用代码实例
Dec 31 Python
python对接ihuyi实现短信验证码发送
May 10 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
python opencv实现简易画图板
Aug 27 Python
Matplotlib绘制混淆矩阵的实现
May 27 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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模板判断输出Empty标签用法详解
2014/06/30 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
js实现左右轮播图
2020/01/09 Javascript
Python类的用法实例浅析
2015/05/27 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python实现excel转sqlite的方法
2017/07/17 Python
python下载图片实现方法(超简单)
2017/07/21 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Python中logger日志模块详解
2020/08/04 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
临床医学大学生求职信
2013/09/28 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
小学生演讲稿大全
2014/04/25 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
民事纠纷协议书
2016/03/23 职场文书
Python 图片添加美颜效果
2022/04/28 Python