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 + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python实现翻转数组功能示例
Jan 12 Python
Python打印“菱形”星号代码方法
Feb 05 Python
pandas 将索引值相加的方法
Nov 15 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
django模板加载静态文件的方法步骤
Mar 01 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
用基于python的appium爬取b站直播消费记录
Apr 17 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 异常处理实现代码
2009/03/10 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
javascript 节点排序 2
2011/01/31 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
WebPack基础知识详解
2017/01/16 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
学校后勤人员职责
2013/12/27 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
js不常见操作运算符总结
2021/11/20 Javascript
instantclient客户端 连接oracle数据库
2022/04/26 Oracle