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  连接字符串(join %)
Sep 06 Python
Python脚本实现格式化css文件
Apr 08 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
Python Web版语音合成实例详解
Jul 16 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
python用什么编辑器进行项目开发
Jun 17 Python
Python中22个万用公式的小结
Jul 21 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
ThinkPHP模板中数组循环实例
2014/10/30 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
JavaScript window.location对象
2014/11/14 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Django开发的简易留言板案例详解
2018/12/04 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
先进班级集体事迹材料
2014/01/30 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
企业年度评优方案
2014/06/02 职场文书
建筑安全标语
2014/06/07 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
初中信息技术教学反思
2016/02/16 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL