Python第三方包之DingDingBot

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

安装

pip install DingDingBot

使用方法

  1. from DingDingBot.DDBOT import DingDing
  2. # 初始话DingDingBOt webhook是钉钉机器人所必须的
  3. dd = DingDing(webhook='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx')
  4. # 发送文本消息
  5. print(dd.Send_Text_Msg(Content='test:测试数据'))
  6. # 发送链接消息
  7. 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'))
  8. # 发送Markdown格式的消息
  9. print(dd.Send_MardDown_Msg(Content="# 测试数据\n" + "> testone", Title='测试数据'))

源码

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. '''
  4. @@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@
  5. @@ @@ @@ @@ @@ @@ @@ @@ @@
  6. @@ @@ @@ @@ @@ @@ @@ @@ @@
  7. @@ @@ @@ @@ @@ @@ @@ @@ @@
  8. @@ @@ @@ @@ @@ @@ @@ @@ @@
  9. @@ @@ @@ @@ @@ @@ @@ @@ @@
  10. @@ @@ @@ @@ @@ @@ @@ @@ @@
  11. @@ @@ @@ @@ @@ @@ @@ @@ @@
  12. @@ @@ @@ @@ @@ @@ @@ @@ @@
  13. @@ @@ @@ @@ @@ @@@@@@@@@ @@
  14. '''
  15. import requests, json
  16. class DingDing():
  17. """
  18. # 钉钉官方文档
  19. Refer to official documentation: https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
  20. """
  21. # 初始化
  22. def __init__(self, webhook):
  23. self.webhook = webhook
  24. self.session = requests.session()
  25. self.session.headers = {"Content-Type": "application/json;charset=utf-8"}
  26. def Send_Text_Msg(self, Content: str, atMobiles: list = [], isAtAll: bool = False) -> dict:
  27. """
  28. :param content: 要发送的内容
  29. :param atMobiles: @指定的人,这里必须是列表,且参数为手机号
  30. :param isAtAll: @全体成员
  31. :return:
  32. """
  33. try:
  34. data = {
  35. "msgtype": "text",
  36. "text": {
  37. "content": Content
  38. },
  39. "at": {
  40. "atMobiles": atMobiles,
  41. "isAtAll": isAtAll
  42. }
  43. }
  44. response = self.session.post(self.webhook, data=json.dumps(data))
  45. if response.status_code == '200':
  46. result = {"status": True, "message": "Message has been sent"}
  47. return result
  48. else:
  49. return response.text
  50. except Exception as error:
  51. result = {"status": False, "message": f"Failed to send message,Error stack:{error}"}
  52. return result
  53. def Send_Link_Msg(self, Content: str, Title: str, MsgUrl: str, PicUrl: str = ''):
  54. """
  55. :param Content: 链接的内容
  56. :param title: 链接的标题
  57. :param MsgUrl: 待跳转页面的url
  58. :param PicUrl: 消息所展示的图片
  59. :return:
  60. """
  61. try:
  62. data = {
  63. "msgtype": "link",
  64. "link": {
  65. "text": Content,
  66. "title": Title,
  67. "picUrl": PicUrl,
  68. "messageUrl": MsgUrl
  69. }
  70. }
  71. response = self.session.post(self.webhook, data=json.dumps(data))
  72. if response.status_code == '200':
  73. result = {"status": True, "message": "Message has been sent"}
  74. return result
  75. else:
  76. return response.text
  77. except Exception as error:
  78. result = {"status": False, "message": f"Failed to send message,Error stack:{error}"}
  79. return result
  80. def Send_MardDown_Msg(self, Content: str, Title: str, atMobiles: list = [], isAtAll: bool = False):
  81. """
  82. :param Content: Markdown格式的文本,仅支持下面的格式
  83. '''
  84. 标题
  85. # 一级标题
  86. ## 二级标题
  87. ### 三级标题
  88. #### 四级标题
  89. ##### 五级标题
  90. ###### 六级标题
  91. 引用
  92. > A man who stands for nothing will fall for anything.
  93. 文字加粗、斜体
  94. **bold**
  95. *italic*
  96. 链接
  97. [this is a link](http://name.com)
  98. 图片
  99. ![](http://name.com/pic.jpg)
  100. 无序列表
  101. - item1
  102. - item2
  103. 有序列表
  104. 1. item1
  105. 2. item2
  106. '''
  107. :param Title: 这个Markdown的标题
  108. :param atMobiles: @指定的人,这里必须是列表,且参数为手机号
  109. :param isAtAll: @全体成员
  110. :return:
  111. """
  112. try:
  113. data = {
  114. "msgtype": "markdown",
  115. "markdown": {
  116. "title": Title,
  117. "text": Content
  118. },
  119. "at": {
  120. "atMobiles": atMobiles,
  121. "isAtAll": isAtAll
  122. }
  123. }
  124. response = self.session.post(self.webhook, data=json.dumps(data))
  125. if response.status_code == '200':
  126. result = {"status": True, "message": "Message has been sent"}
  127. return result
  128. else:
  129. return response.text
  130. except Exception as error:
  131. result = {"status": False, "message": f"Failed to send message,Error stack:{error}"}
  132. return result

Python第三方包之DingDingBot的更多相关文章

  1. Python 第三方包上传至 PyPI 服务器

    PyPI 服务器主要功能是?PyPI 服务器怎么搭建? PyPI 服务器可以用来管理自己开发的 Python 第三包. Pypi服务器搭建 Python 第三方包在本地打包 # 本地目录执行以下命令应 ...

  2. python第三方包的windows安装文件exe格式

    今天弄了一上午的python-ldap,发现要么安装vc,要么用其他比较麻烦的方法,都比较麻烦.幸好找到这个地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

  3. Python第三方包之PrettyTable

    Python第三方包之PrettyTable 可以让我们将数据用表格的方式展示出来 安装方式 pip install PrettyTable 测试是否安装成功 使用方法与对比 增加一条数据 先简单的看 ...

  4. Python第三方包之离线安装

    Python第三方包之离线安装 第一步 首先我们得从pypi上先下载要装的第三方包 https://pypi.org/ 第二步(因为下载下来的包可能需要其他包的依赖,那我们依旧要按照第一步再次下载) ...

  5. Python第三方包之pretty-errors

    Python第三方包之pretty-errors 发现了一个第三方好用的python包,这个包可以让我们在面对冗长的错误时候能够一眼看到重点 安装方式 pip install pretty-error ...

  6. 内网安装python第三方包

    内网快速安装python第三方包 内网安装包是一个很麻烦的问题,很多时候,内网的源会出现问题,导致无法安装. 这里给出一种快速在内网中安装第三方包,无需使用内网的源. 外网操作 1.根据开发环境下的所 ...

  7. vs2017安装pygame,vs2017安装python第三方包

    vs2017有独立的python环境:所以想在vs2017开发python并使用第三方包,需要在vs2017中操作,完成第三方包的安装. 一,查看vs2017有哪些版本的python,当前使用的是哪个 ...

  8. 7行代码,彻底告别python第三方包import导入问题!

    最近有不少小伙伴咨询关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事. 随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现各种各样的功能.但是,他 ...

  9. python第三方包安装方法(两种方法)

    具体有以下两种方法: 第一种方法(不使用pip或者easy_install): Step1:在网上找到的需要的包,下载下来.eg. rsa-3.1.4.tar.gz Step2:解压缩该文件. Ste ...

随机推荐

  1. 机器学习基础——简单易懂的K邻近算法,根据邻居“找自己”

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的文章给大家分享机器学习领域非常简单的模型--KNN,也就是K Nearest Neighbours算法,翻译过来很简单,就是K最近邻居 ...

  2. 初探Linux

    这是一个小小新手根据自己对Linux的理解而写下的笔记,记录的是大体的学习内容.记录的笔记不全面,甚至没有整体的概念,但也希望能够给部分人一些入门的帮助,实机基于CentOS 7. 导语:学习一件新事 ...

  3. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...

  4. TypeScript Jest 调试

    本文简要介绍了如何在 Jest 单元测试中利用 Chrome Node DevTools 来辅助调试. 背景 代码是 TS 写的 所测功能无 UI 界面,出现Bug后不容易定位 用 console 式 ...

  5. Hadoop集群搭建(三)~centos6.8网络配置

    安装完centos之后,进入系统,进行网络配置.主要分为五个部分: 修改虚拟机网络编辑器:配置Winodws访问虚拟机:配置centos网卡:通过网络名访问虚拟机配置网络服务. (一)虚拟机网络编辑器 ...

  6. jQuery万能放大镜插件(普通矩形放大镜)

    插件链接:http://files.cnblogs.com/files/whosMeya/magnifier.js 1.在jquery下插入. 2.格式:magnifier("需要插入的位置 ...

  7. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    将 RCN 中下面 3 个独立模块整合在一起,减少计算量: CNN:提取图像特征 SVM:目标分类识别 Regression 模型:定位 不对每个候选区域独立通过 CN 提取特征,将整个图像通过 CN ...

  8. 建议8:恰当选用if和switch

    相对来说下面几种情况更适合switch结构 枚举表达式的值.这种枚举是可以期望的,平行逻辑关系的 表达式的值具有离散性,不具有线性的非连续的区间值 表达式的值是固定的,不是动态变化的 表达式的值是有限 ...

  9. C++ 人脸识别系统的浅理解

    机器学习 机器学习的目的是把数据转换成信息. 机器学习通过从数据里提取规则或模式来把数据转成信息. 人脸识别 人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸. 每个节点的正确识别率很高,但正确 ...

  10. 6个出色的Kubernetes发行版,哪款最适合你?

    作者简介 Christopher Tozzi,自2008年来以自由职业者的身份对Linux.虚拟化.容器.数据存储及其相关主题进行报道. 本文来自Rancher Labs 时至今日,通过Kuberne ...