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

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

需求:每天固定时间需要向钉钉群推送数据文件
1.由于钉钉群机器人推送消息类型只支持text,link,markdown等形式,并不支持文件和图片类媒体文件的推送,所以咱们这里就需要用到钉钉的API接口来实现了,进入钉钉开放平台:
在这里咱们是可以看到支持文件类消息的,下面怎么实现呢
2.群消息的推送是需要三个参数的,access_token(调用接口凭证),chatid(群会话id,可以通过jsapi工具获取,后边详情介绍),msg(步骤1),咱们一个一个参数来看在这里插入图片描述
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,然后进行调用才可以
在这里插入图片描述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感兴趣的朋友们可以扫码关注公众号,会不定时更新一些python基础、网络爬虫、数据分析等知识,也欢迎大家前来探讨交流,公众号加星标,不迷路!


在这里插入图片描述

  • 22
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
python中,可以使用钉钉API来按照人员发送文件。首先,需要导入相应的库,如`requests`。 1. 首先,需要获取到钉钉的access_token,用于后续的接口调用。access_token可以通过调用钉钉API获取。 ```python import requests def get_access_token(): app_key = 'your_app_key' app_secret = 'your_app_secret' url = f'https://oapi.dingtalk.com/gettoken?appkey={app_key}&appsecret={app_secret}' response = requests.get(url) access_token = response.json().get('access_token') return access_token access_token = get_access_token() ``` 2. 接下来,可以使用钉钉文件发送接口,按照人员发送文件。 ```python def send_file_to_user(user_id, media_id): url = f'https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={access_token}' headers = {'Content-Type': 'application/json'} data = { "agent_id": your_agent_id, "userid_list": user_id, "msg": { "msgtype": "file", "file": { "media_id": media_id } } } response = requests.post(url, headers=headers, json=data) result = response.json() if result.get('errcode') == 0: print("文件发送成功") else: print("文件发送失败") user_id = 'user_id_of_the_receiver' # 接收文件的用户ID media_id = 'media_id_of_the_file_to_send' # 要发送文件的media_id send_file_to_user(user_id, media_id) ``` 需要注意的是,上述代码中的`your_app_key`、`your_app_secret`以及`your_agent_id`需要替换成真实的值。 以上就是使用Python按照人员发送文件钉钉的基本流程,可以根据实际需求进行扩展和调整。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值