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求crc32值的方法
Oct 05 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
Python处理中文标点符号大集合
May 14 Python
python实现感知器算法(批处理)
Jan 18 Python
Python的UTC时间转换讲解
Feb 26 Python
python操作日志的封装方法(两种方法)
May 23 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
python 19个值得学习的编程技巧
Aug 15 Python
python MD5加密的示例
Oct 19 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
django用户登录验证的完整示例代码
2019/07/21 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python 转换文本编码实现解析
2019/08/27 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android
讲解Python实例练习逆序输出字符串
2022/05/06 Python