Python实现钉钉订阅消息功能


Posted in Python onJanuary 14, 2020

钉钉设置机器人

首先在钉钉设置钉钉机器人

群设置—> 智能群助手—>添加机器人—>自定义

Python实现钉钉订阅消息功能

Python实现钉钉订阅消息功能

添加完成,得到一个Webhook API地址

Python实现钉钉订阅消息功能

Python脚本实现推送钉钉消息

钉钉官方给出了机器人接口的文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

但是该文档只实现了JAVA和PHP的示例。以下是python脚本的示例。

# -*- coding: utf-8 -*-
"""Created on Mon Jan 13 11:18:59 2020
python3
@author: 谢公子
"""
import json
import requests
def send_msg(url,data):
 headers = {'Content-Type': 'application/json;charset=utf-8'}
 r = requests.post(url,data = json.dumps(data),headers=headers)
 return r.text
if __name__ == '__main__':
 data = {
   "msgtype": "text", 
   "text": {
    "content": "hello,word!test"
   }, 
  }
 url = 'https://oapi.dingtalk.com/robot/send?access_token=xx' #此处为钉钉机器人的webhook地址
 print(send_msg(url,data))

Python实现钉钉订阅消息功能

Python实现钉钉订阅消息功能

如果要实现签名认证,如下

Python实现钉钉订阅消息功能

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 13 11:18:59 2020
python3
@author: mi
"""
import json
import requests
import time
import hmac
import hashlib
import base64
import urllib
from urllib import parse
def send_msg(url,data):
 headers = {'Content-Type': 'application/json;charset=utf-8'}
 r = requests.post(url,data = json.dumps(data),headers=headers)
 return r.text
def auth(secret):
 timestamp = round(time.time() * 1000)
 secret = secret  #秘钥
 secret_enc = bytes(secret.encode('utf-8'))
 string_to_sign = '{}\n{}'.format(timestamp, secret)  #把 timestamp+"\n"+密钥 当做签名字符串 string_to_sign
 string_to_sign_enc = bytes(string_to_sign.encode('utf-8'))
 hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() #使用HmacSHA256算法计算签名,得到 hmac_code
 hmac_code_base64=base64.b64encode(hmac_code) #将hmac_code进行Base64 encode
 sign = urllib.parse.quote(hmac_code_base64) #进行urlEncode,得到最终的签名sign
 authlist=[timestamp,sign]
 return authlist
if __name__ == '__main__':
 data = {
 "msgtype": "link", 
 "link": {
  "text": "", 
  "title": "时代的火车向前开", 
  "messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng"
  }
 }
 authlist = auth("你的签名")
 url = "https://oapi.dingtalk.com/robot/send?access_token=xxx"+"×tamp="+str(authlist[0])+"&sign="+authlist[1]
 print(send_msg(url,data))

消息类型

text类型
{
 "msgtype": "text", 
 "text": {
  "content": "我就是我, 是不一样的烟火@156xxxx8827"
 }, 
 "at": {
  "atMobiles": [
   "156xxxx8827", 
   "189xxxx8325"
  ], 
  "isAtAll": false
 }
}

Python实现钉钉订阅消息功能

效果图如下

Python实现钉钉订阅消息功能

link类型
{
 "msgtype": "link", 
 "link": {
  "text": "这个即将发布的新版本,创始人xx称它为“红树林”。
而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是“红树林”?", 
  "title": "时代的火车向前开", 
  "picUrl": "", 
  "messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng
 }
}

Python实现钉钉订阅消息功能

效果图如下

Python实现钉钉订阅消息功能

markdown类型
{
  "msgtype": "markdown",
  "markdown": {
   "title":"杭州天气",
   "text": "#### 杭州天气 @156xxxx8827\n" +
     "> 9度,西北风1级,空气良89,相对温度73%\n\n" +
     "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n" +
     "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n"
  },
 "at": {
  "atMobiles": [
   "156xxxx8827", 
   "189xxxx8325"
  ], 
  "isAtAll": false
 }
 }

Python实现钉钉订阅消息功能

效果图如下

Python实现钉钉订阅消息功能

整体跳转ActionCard类型

{
 "actionCard": {
  "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
  "text": "![screenshot](@lADOpwk3K80C0M0FoA) 
 ### 乔布斯 20 年前想打造的苹果咖啡厅 
 Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
  "hideAvatar": "0", 
  "btnOrientation": "0", 
  "singleTitle" : "阅读全文",
  "singleURL" : "https://www.dingtalk.com/"
 }, 
 "msgtype": "actionCard"
}

Python实现钉钉订阅消息功能

效果图如下

Python实现钉钉订阅消息功能

独立跳转ActionCard类型

Python实现钉钉订阅消息功能

{
 "actionCard": {
  "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
  "text": "![screenshot](@lADOpwk3K80C0M0FoA) 
 ### 乔布斯 20 年前想打造的苹果咖啡厅 
 Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
  "hideAvatar": "0", 
  "btnOrientation": "0", 
  "btns": [
   {
    "title": "内容不错", 
    "actionURL": "https://www.dingtalk.com/"
   }, 
   {
    "title": "不感兴趣", 
    "actionURL": "https://www.dingtalk.com/"
   }
  ]
 }, 
 "msgtype": "actionCard"
}

效果图如下

Python实现钉钉订阅消息功能

FeedCard类型
{
 "feedCard": {
  "links": [
   {
    "title": "时代的火车向前开", 
    "messageURL": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI", 
    "picURL": "https://www.dingtalk.com/"
   },
   {
    "title": "时代的火车向前开2", 
    "messageURL": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI", 
    "picURL": "https://www.dingtalk.com/"
   }
  ]
 }, 
 "msgtype": "feedCard"
}

Python实现钉钉订阅消息功能

效果图如下

Python实现钉钉订阅消息功能

总结

以上所述是小编给大家介绍的Python实现钉钉订阅消息功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
从零学python系列之数据处理编程实例(二)
May 22 Python
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
python实现统计文本中单词出现的频率详解
May 20 Python
python二进制文件的转译详解
Jul 03 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 #Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 #Python
基于pytorch的lstm参数使用详解
Jan 14 #Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 #Python
np.random.seed() 的使用详解
Jan 14 #Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 #Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 #Python
You might like
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
Document 对象的常用方法
2009/07/31 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
教大家使用Python SqlAlchemy
2016/02/12 Python
python爬虫使用cookie登录详解
2017/12/27 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
Python中bisect的用法及示例详解
2020/07/20 Python
python3中确保枚举值代码分析
2020/12/02 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
趵突泉导游词
2015/02/03 职场文书
材料员岗位职责
2015/02/10 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
如何写好开幕词?
2019/06/24 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL