Python实现钉钉发送报警消息的方法


Posted in Python onFebruary 20, 2019

钉钉开放平台传送门:https://open.dingtalk.com

我司使用钉钉作为内部通讯工具,基本上大家在电脑和手机上都开着,消息可以第一时间查看,报警消息的即时性要求比较高,所以适合用钉钉通知。

下面介绍如何用Python实现钉钉发送报警消息。

获取access token

要使用钉钉发送消息,首先需要获取access token,代码如下:

def get_access_token():
 url = 'https://oapi.dingtalk.com/gettoken?corpid=%s&corpsecret=%s' % (corp_id, corp_secret)
 request = urllib2.Request(url)
 response = urllib2.urlopen(request)
 response_str = response.read()
 response_dict = json.loads(response_str)
 error_code_key = "errcode"
 access_token_key = "access_token"
 if response_dict.has_key(error_code_key) and response_dict[error_code_key] == 0 and response_dict.has_key(access_token_key):
  return response_dict[access_token_key]
 else:
  return ''

access token在2小时内有效,有效期内重复获取返回相同结果,有效期会自动延长。corp_id和corp_secret是企业的id和secret,在钉钉的管理后台可以找到。另外,上面用到了urllib2和json,需要import:

import urllib2
import json

消息类型

钉钉的消息类型分为:text,image,voice,file,link和OA,具体消息格式参见:https://open-doc.dingtalk.com/docs/doc.htm?treeId=172&articleId=104972&docType=1 。

下面以发送文本,链接和文件消息为例进行说明。

给用户发送消息

发送文本

def send_text_to_users(access_token, users, text):
 msg_type, msg = _gen_text_msg(text)
 return _send_msg_to_users(access_token, users, msg_type, msg)

def _gen_text_msg(text):
 msg_type = 'text'
 msg = { "content": text }
 return msg_type, msg

def _send_msg_to_users(access_token, users, msg_type, msg):
 to_users = '|'.join(users)
 body_dict = {
  "touser": to_users,
  "agentid": agent_id,
  "msgtype": msg_type
 }
 body_dict[msg_type] = msg
 body = json.dumps(body_dict)
 return _send_msg("https://oapi.dingtalk.com/message/send?access_token=", access_token, body)

其中agent_id是一个钉钉应用的id,以钉钉应用的名义给用户发送消息。users是用户id列表,每个用户id是一个字符串。

发送链接

def send_link_to_users(access_token, users, url, title, text):
 msg_type, msg = _gen_link_msg(url, title, text)
 return _send_msg_to_users(access_token, users, msg_type, msg)

def _gen_link_msg(url, title, text):
 msg_type = 'link'
 msg = { 
  "messageUrl": url,
  "picUrl": "https://gw.alicdn.com/tps/TB1FN16LFXXXXXJXpXXXXXXXXXX-256-130.png",
  "title": title,
  "text": text 
 }
 return msg_type, msg

其中_send_msg_to_users方法参见前面的代码,picUrl字段设置的是钉钉官方的图片,这里用于测试。

发送文件

def send_file_to_users(access_token, users, file_name):
 media_id = upload_file(access_token, file_name)
 if media_id == '':
  return
 msg_type, msg = _gen_file_msg(media_id)
 return _send_msg_to_users(access_token, users, msg_type, msg)

def upload_file(access_token, file_name):
 register_openers()
 datagen, headers = multipart_encode({'media': open(file_name, 'rb')})
 requst_url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token + '&type=file'
 request = urllib2.Request(requst_url, datagen, headers)
 response = urllib2.urlopen(request)
 response_str = response.read()
 response_dict = json.loads(response_str)
 media_id_key = 'media_id'
 error_code_key = 'errcode'
 if response_dict.has_key(error_code_key) and response_dict[error_code_key] == 0 and response_dict.has_key(media_id_key):
  return response_dict[media_id_key]
 else:
  return ''

需要先上传文件获得media_id,然后使用media_id将文件发送给用户。另外,这里用到了poster,可使用pip安装:

pip install poster

之后引入multipart_encode和register_openers函数:

from poster.encode import multipart_encode
from poster.streaminghttp import register_openers

给群会话发送消息

与给用户发送信息类似,区别是需要群会话id,而不是用户列表,以发送文本消息为例,代码如下:

def send_text_to_chat(access_token, chat_id, text):
 msg_type, msg = _gen_text_msg(text)
 return _send_msg_to_chat(access_token, chat_id, msg_type, msg)

def _send_msg_to_chat(access_token, chat_id, msg_type, msg):
 body_dict = {
  "chatid": chat_id,
  "msgtype": msg_type
 }
 body_dict[msg_type] = msg
 body = json.dumps(body_dict)
 return _send_msg("https://oapi.dingtalk.com/chat/send?access_token=", access_token, body)

其中_gen_text_msg方法参见前面的代码。

群会话可以自行创建,参见https://open-doc.dingtalk.com/docs/doc.htm?treeId=172&articleId=104977&docType=1 。

以上这篇Python实现钉钉发送报警消息的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读写Json涉及到中文的处理方法
Sep 12 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
对numpy中的where方法嵌套使用详解
Oct 31 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
Python秒算24点实现及原理详解
Jul 29 Python
python是否适合网页编程详解
Oct 04 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
python标准库OS模块详解
Mar 10 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
想学画画?python满足你!
Dec 24 Python
python给微信好友定时推送消息的示例
Feb 20 #Python
linux查找当前python解释器的位置方法
Feb 20 #Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 #Python
python爬取酷狗音乐排行榜
Feb 20 #Python
python 定时器,轮询定时器的实例
Feb 20 #Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 #Python
python爬取内容存入Excel实例
Feb 20 #Python
You might like
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
python开发之文件操作用法实例
2015/11/13 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python enumerate内置库用法解析
2020/02/24 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
新兵入伍心得体会
2014/09/04 职场文书
公司经营目标责任书
2015/01/29 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
导游词之青岛太清宫
2019/12/13 职场文书