Python第三方包之DingDingBot钉钉机器人


Posted in Python onApril 09, 2020

这个是作者自己封装的一个钉钉机器人的包,目前只支持发文本格式、链接格式、markdown格式的消息,我们可以在很多场景用到这个,比如告警通知等

安装

pip install DingDingBot

使用方法

from DingDingBot.DDBOT import DingDing
# 初始话DingDingBOt webhook是钉钉机器人所必须的
dd = DingDing(webhook='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx')
# 发送文本消息
print(dd.Send_Text_Msg(Content='test:测试数据'))
# 发送链接消息
print(dd.Send_Link_Msg(Content='test',Title='测试数据',MsgUrl='https://www.baidu.com',PicUrl='https://cn.bing.com/images/search?q=outgoing%e6%9c%ba%e5%99%a8%e4%ba%ba&id=FEE700371845D9386738AAAA51DCC43DC54911AA&FORM=IQFRBA'))
# 发送Markdown格式的消息
print(dd.Send_MardDown_Msg(Content="# 测试数据\n" + "> testone", Title='测试数据'))

源码

#!/usr/bin/python
# -*- coding: UTF-8 -*-

'''
  @@@@@@@@   @@@@@@@@@   @@@@@@@@@  @@@@@@@@@   @@@@@@@@@@@@
  @@   @@  @@   @@  @@   @@  @@   @@     @@
  @@    @@ @@    @@  @@  @@  @@    @@    @@
  @@    @@ @@    @@  @@  @@   @@    @@    @@
  @@    @@ @@    @@  @@ @@   @@    @@    @@
  @@   @@  @@   @@  @@ @@    @@    @@    @@
  @@   @@  @@   @@   @@ @@   @@    @@    @@
  @@  @@   @@  @@   @@  @@   @@    @@    @@
  @@  @@   @@  @@    @@ @@    @@   @@     @@
  @@ @@    @@ @@     @@      @@@@@@@@@     @@

'''

import requests, json


class DingDing():
  """
  # 钉钉官方文档
  Refer to official documentation: https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
  """
  # 初始化
  def __init__(self, webhook):
    self.webhook = webhook
    self.session = requests.session()
    self.session.headers = {"Content-Type": "application/json;charset=utf-8"}

  def Send_Text_Msg(self, Content: str, atMobiles: list = [], isAtAll: bool = False) -> dict:
    """
    :param content: 要发送的内容
    :param atMobiles: @指定的人,这里必须是列表,且参数为手机号
    :param isAtAll: @全体成员
    :return:
    """
    try:
      data = {
        "msgtype": "text",
        "text": {
          "content": Content
        },
        "at": {
          "atMobiles": atMobiles,
          "isAtAll": isAtAll
        }
      }
      response = self.session.post(self.webhook, data=json.dumps(data))
      if response.status_code == '200':
        result = {"status": True, "message": "Message has been sent"}
        return result
      else:
        return response.text
    except Exception as error:
      result = {"status": False, "message": f"Failed to send message,Error stack:{error}"}
      return result

  def Send_Link_Msg(self, Content: str, Title: str, MsgUrl: str, PicUrl: str = ''):
    """
    :param Content: 链接的内容
    :param title: 链接的标题
    :param MsgUrl: 待跳转页面的url
    :param PicUrl: 消息所展示的图片
    :return:
    """
    try:
      data = {
        "msgtype": "link",
        "link": {
          "text": Content,
          "title": Title,
          "picUrl": PicUrl,
          "messageUrl": MsgUrl
        }
      }
      response = self.session.post(self.webhook, data=json.dumps(data))
      if response.status_code == '200':
        result = {"status": True, "message": "Message has been sent"}
        return result
      else:
        return response.text
    except Exception as error:
      result = {"status": False, "message": f"Failed to send message,Error stack:{error}"}
      return result

  def Send_MardDown_Msg(self, Content: str, Title: str, atMobiles: list = [], isAtAll: bool = False):
    """
    :param Content: Markdown格式的文本,仅支持下面的格式
    '''
    标题
      # 一级标题
      ## 二级标题
      ### 三级标题
      #### 四级标题
      ##### 五级标题
      ###### 六级标题

      引用
      > A man who stands for nothing will fall for anything.

      文字加粗、斜体
      **bold**
      *italic*

      链接
      [this is a link](http://name.com)

      图片
      ![](http://name.com/pic.jpg)

      无序列表
      - item1
      - item2

      有序列表
      1. item1
      2. item2
    '''
    :param Title: 这个Markdown的标题
    :param atMobiles: @指定的人,这里必须是列表,且参数为手机号
    :param isAtAll: @全体成员
    :return:
    """
    try:
      data = {
        "msgtype": "markdown",
        "markdown": {
          "title": Title,
          "text": Content
        },
        "at": {
          "atMobiles": atMobiles,
          "isAtAll": isAtAll
        }
      }
      response = self.session.post(self.webhook, data=json.dumps(data))
      if response.status_code == '200':
        result = {"status": True, "message": "Message has been sent"}
        return result
      else:
        return response.text
    except Exception as error:
      result = {"status": False, "message": f"Failed to send message,Error stack:{error}"}
      return result

到此这篇关于Python第三方包之DingDingBot钉钉机器人的文章就介绍到这了,更多相关Python DingDingBot内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python脚本实现12306火车票查询系统
Sep 30 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
详解Python sys.argv使用方法
May 10 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
python实现自定义日志的具体方法
May 28 Python
python实现简单学生信息管理系统
Apr 09 #Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 #Python
pycharm的python_stubs问题
Apr 08 #Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 #Python
解决pycharm下pyuic工具使用的问题
Apr 08 #Python
解决pyqt5异常退出无提示信息的问题
Apr 08 #Python
python由已知数组快速生成新数组的方法
Apr 08 #Python
You might like
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
node.js超时timeout详解
2014/11/26 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python中函数参数调用方式分析
2018/08/09 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
用python制作个音乐下载器
2021/01/30 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
社区服务活动小结
2014/07/08 职场文书
教师个人事迹材料
2014/12/17 职场文书
地道战观后感
2015/06/04 职场文书
成事在人观后感
2015/06/16 职场文书
公司管理建议书
2015/09/14 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
Python OpenCV超详细讲解基本功能
2022/04/02 Python
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏