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数据类型之String字符串实例详解
May 08 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
简单分析python的类变量、实例变量
Aug 23 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Python实现打印实心和空心菱形
Nov 23 Python
python获取array中指定元素的示例
Nov 26 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
Python识别验证码的实现示例
Sep 30 Python
python调试工具Birdseye的使用教程
May 25 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
Python list列表删除元素的4种方法
Nov 01 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
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
详解vue高级特性
2020/06/09 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
python发送HTTP请求的方法小结
2015/07/08 Python
简单解决Python文件中文编码问题
2015/11/22 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
工程项目经理岗位职责
2013/12/15 职场文书
语文教育专业求职信
2014/06/28 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
政协委员个人总结
2015/03/03 职场文书
暑期工社会实践报告
2015/07/13 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server