热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python+钉钉API实现发送文件消息

python3.7+钉钉API实现自动发送文件消息需求:每天固定时间需要向钉钉群推送数据文件1.由于钉钉群机器人推送消息类型只支持text,link,markdown等形式,并不支

python3.7+钉钉API实现自动发送文件消息

需求:每天固定时间需要向钉钉群推送数据文件
1.由于钉钉群机器人推送消息类型只支持text,link,markdown等形式,并不支持文件和图片类媒体文件的推送,所以咱们这里就需要用到钉钉的API接口来实现了,进入钉钉开放平台:
《python+钉钉API实现发送文件消息》在这里咱们是可以看到支持文件类消息的,下面怎么实现呢
2.群消息的推送是需要三个参数的,access_token(调用接口凭证),chatid(群会话id,可以通过jsapi工具获取,后边详情介绍),msg(步骤1),咱们一个一个参数来看《python+钉钉API实现发送文件消息》
3.access_token:

def getAccess_token():
url = 'https://oapi.dingtalk.com/gettoken?appkey=********&appsecret=*******'
appkey = '*********' # 管理员账号登录开发者平台,应用开发-创建应用-查看详情-appkey
appsecret = '********' # 应用里的appsecret
headers = {
'Content-Type': "application/x-www-form-urlencoded"
}
data = { 'appkey': appkey,
'appsecret': appsecret}
r = requests.request('GET', url, data=data, headers=headers)
access_token = r.json()["access_token"]
return access_token

4.msg中的media_id:
钉钉推送媒体文件需要先上传至媒体文件中,生成一个独立的media_id,然后进行调用才可以
《python+钉钉API实现发送文件消息》access_token和type两个参数都显然没有问题,这个media_id怎么传递呢,它需要的是文件名为media,并且包含filelength、content-type等信息,咱们可以把需要上传的文件放在files的参数里来实现

def getMedia_id():
access_token = getAccess_token() # 拿到接口凭证
path = '*********' # 文件路径
url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token + '&type=file'
files = { 'media': open(path, 'rb')}
data = { 'access_token': access_token,
'type': 'file'}
response = requests.post(url, files=files, data=data)
json = response.json()
return json["media_id"]

是不是发现没有headers,在网上看到过很多例子都将文件以multipart/form-data形式把数据放在了headers里面,结果你发现人家压根不读你的头信息,你说气不气,这也是这文档坑的地方了,文件也上传了,media_id咱们也拿到了,接下来就可以愉快的推送文件了
5.推送消息至钉钉群:

def SendFile():
access_token = getAccess_token()
media_id = getMedia_id()
chatid = '********' # 通过jsapi工具获取的群聊id
url = 'https://oapi.dingtalk.com/chat/send?access_token=' + access_token
header = {
'Content-Type': 'application/json'
}
data = { 'access_token': access_token,
'chatid': chatid,
'msg': {
'msgtype': 'file',
'file': { 'media_id': media_id}
}}
r = requests.request('POST', url, data=json.dumps(data), headers=header)
print(r.json())

6.完整代码:

# -*- coding: utf-8 -*-
import requests
import json
def getAccess_token():
url = 'https://oapi.dingtalk.com/gettoken?appkey=********&appsecret=*******'
appkey = '*********' # 管理员账号登录开发者平台,应用开发-创建应用-查看详情-appkey
appsecret = '********' # 应用里的appsecret
headers = {
'Content-Type': "application/x-www-form-urlencoded"
}
data = { 'appkey': appkey,
'appsecret': appsecret}
r = requests.request('GET', url, data=data, headers=headers)
access_token = r.json()["access_token"]
return access_token
def getMedia_id():
access_token = getAccess_token() # 拿到接口凭证
path = '*********' # 文件路径
url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token + '&type=file'
files = { 'media': open(path, 'rb')}
data = { 'access_token': access_token,
'type': 'file'}
response = requests.post(url, files=files, data=data)
json = response.json()
return json["media_id"]
def SendFile():
access_token = getAccess_token()
media_id = getMedia_id()
chatid = '*******'# 通过jsapi工具获取的群聊id
url = 'https://oapi.dingtalk.com/chat/send?access_token=' + access_token
header = {
'Content-Type': 'application/json'
}
data = { 'access_token': access_token,
'chatid': chatid,
'msg': {
'msgtype': 'file',
'file': { 'media_id': media_id}
}}
r = requests.request('POST', url, data=json.dumps(data), headers=header)
print(r.json())
if __name__ == '__main__':
SendFile()

7.chatid的获取:
进入JSAPI控制台https://wsdebug.dingtalk.com,手机钉钉扫码登录(主管理员),往下划,执行v0.1.2中的biz.chat.chooseConversationByCorpId,这时手机会弹出选择群聊,选择你需要获取chatid的群,JSAPI控制台就会出现chatid和群聊名称。
《python+钉钉API实现发送文件消息》

语音和图片类消息同道理,鄙人菜鸟一枚,才疏学浅,希望路过的各位大佬希望不吝赐教!

    对python感兴趣的朋友们可以扫码关注公众号,会不定时更新一些python基础、网络爬虫、数据分析等知识,也欢迎大家前来探讨交流,公众号加星标,不迷路!

《python+钉钉API实现发送文件消息》


推荐阅读
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 本章节在上一章的基础上,深入探讨了如何通过引入机器人实现自动聊天、表情包回应以及Adidas官方账号的自动抽签功能。具体介绍了使用wxpy库进行微信机器人的开发,优化了智能回复系统的性能和用户体验。通过详细的代码示例和实践操作,展示了如何实现这些高级功能,进一步提升了机器人的智能化水平。 ... [详细]
  • 深入解析微信小程序开发中的全局配置文件设置与优化技巧
    本文深入探讨了微信小程序开发中全局配置文件的设置与优化技巧,详细解析了 `app.js`、`app.json`、`app.wxss` 和 `project.config.json` 的功能与最佳实践。通过合理配置这些文件,开发者可以显著提升小程序的性能和用户体验。文章还介绍了如何利用这些配置文件进行模块化开发和调试,帮助开发者更好地管理和维护小程序项目。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 2018年热门趋势:轻松几步构建高效智能聊天机器人
    2018年,构建高效智能聊天机器人的简易步骤成为行业焦点。作为AI领域的关键应用,聊天机器人不仅被视为企业市场智能化转型的重要工具,也是技术变现的主要途径之一。随着自然语言处理技术的不断进步,越来越多的企业开始重视并投资于这一领域,以期通过聊天机器人提升客户服务体验和运营效率。 ... [详细]
  • 如何在微信公众平台集成新浪云服务应用摘要:新浪云服务平台SinaAppEngine(简称SAE)自2009年启动内部研发,并于同年对外开放。本文详细介绍了如何利用SAE的强大功能,在微信公众平台上构建高效、稳定的云服务应用程序,涵盖从环境配置到应用部署的全流程,为开发者提供详尽的技术指导与实践案例。 ... [详细]
  • 微软发布紧急安全更新,所有Windows 10版本均面临影响!
    微软于周五紧急发布了两项安全更新,旨在解决Windows 10所有版本中Windows Codecs库和Visual Studio Code应用存在的安全隐患。此次更新是继本周初发布的月度例行安全补丁之外的额外措施,凸显了这些问题的紧迫性和重要性。这些漏洞可能被攻击者利用,导致系统权限提升或远程代码执行等严重后果。建议用户尽快安装更新,以确保系统的安全性。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 如何正确安装Python:详细步骤与常见问题解答
    本文详细介绍了如何正确安装Python,包括环境准备、下载与安装过程、路径配置等关键步骤,并针对初学者常见的安装问题提供了详细的解答和解决方案,帮助读者顺利搭建Python开发环境。 ... [详细]
  • 每日精选Codeforces训练题:1119E(贪心算法)、821C(栈模拟)和645D(拓扑排序)
    题目涉及三种不同类型的算法问题:1119E(贪心算法)、821C(栈模拟)和645D(拓扑排序)。其中,1119E的问题背景是有n种不同长度的棍子,长度分别为2^0, 2^1, …, 2^(n-1),每种棍子的数量为a[i]。任务是计算可以组成的三角形数量。根据三角形的性质,任意两边之和必须大于第三边。该问题可以通过贪心算法高效解决,通过合理选择棍子组合来最大化三角形的数量。 ... [详细]
author-avatar
liaojiawei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有