暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python3.7使用钉钉2.x版本接口(取token发钉钉消息)

染卷 2020-04-18
940

钉钉开放平台服务端API下载地址 https://ding-doc.dingtalk.com/doc#/faquestions/vzbp02

钉钉的python包是适配python2版本的,如果在python3下使用会报错。经过修改后测试获取钉钉token及发送应用消息成功!

Python SDK需要依赖python2

一、下载钉钉python sdk后使用python3自带的2to3功能进行转换

参考地址:https://zhidao.baidu.com/question/1112843826603079459.html

找到python3的安装目录 如 C:\Python27\Tools\Scripts\2to3.py

打开cmd切换到2to3.py所在目录:输入“python 2to3.py -w   ”命令后不要急着回车,先把你要转换的python文件或目录文件夹直接拖到cmd窗口中,他会自动填充成“ python 2to3.py -w C:\Users\Administrator\Desktop\python\dingding3”然后回车即可。我的sdk是解压到桌面的“ C:\Users\Administrator\Desktop\python\dingding3 ”目录的,转换的同时会生成.bak备份文件

二、修改钉钉python2版本sdk的代码

报错:TypeError: getsockaddrarg: AF_INET address must be tuple, not int ,其实是http.client.HTTPSConnection与http.client.HTTPConnection多了参数

修改base.py文件 dingding3\dingtalk\api\base.py

  1. 找到如下代码

  2. connection = http.client.HTTPSConnection(self.__domain, self.__port, None, None, False, timeout)

  3. 改为

  4. connection = http.client.HTTPSConnection(self.__domain, self.__port,None,None,timeout)


  5. 找到如下代码

  6. connection = http.client.HTTPConnection(self.__domain, self.__port, False, timeout)

  7. 改为

  8. connection = http.client.HTTPConnection(self.__domain, self.__port,timeout)


另外注意tab与空格对齐的问题!部分代码行会报错“IndentationError: unindent does not match any outer indentation level”,如果你用的是vscode可以安装“Trailing Space”插件,然后把vscode的配置修改下打开setting,搜索renderControlCharacters  勾选,renderWhitespace设置为all(参考: https://blog.csdn.net/u014001964/article/details/93993461 )可以明显看到tab与空格的不同。

三、开始测试,在dingding3目录下新建一个testdingding.py

  1. import dingtalk.api

  2. import requests

  3. #import ssl

  4. import json

  5. import datetime



  6. request = dingtalk.api.OapiGettokenRequest("https://oapi.dingtalk.com/gettoken")

  7. #request.corpid="dingoahrq2nlfy7ka6"

  8. #request.corpsecret="TGwtkyRvtoqAm1ttQ2WtrkPkn9wpfFaQIfqY9960bxli3nvq2kHAtXqQOuuM"

  9. request.appkey="dingql1xm9van2xd"

  10. request.appsecret="1bAytrjRNeRrIx1UfnIFppsrdySkduVEk1PmwU890D69GAO46IOBJtKnIgh"


  11. result = request.getResponse()

  12. token_get = result['access_token']

  13. print('获取到的token:',token_get)


  14. #消息接口

  15. request = dingtalk.api.OapiMessageCorpconversationAsyncsendV2Request("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token="+token_get)

  16. #h5 微应用的agent_id

  17. request.agent_id = 472999813


  18. #需要发送的用户userid

  19. request.userid_list = 'manager244'


  20. #消息内容

  21. request.msg = {"msgtype":"text","text":{"content":"消息内容: 系统登录时间 "+ str(datetime.datetime.now())}}

  22. result = request.getResponse()

  23. print('消息发送流水号:'+str(result["task_id"]))



  24. """

  25. #直接调用接口(非SDK形式)


  26. token_get = '206c33ca2d523a2e9362a7944fa55d20'


  27. if (token_get == ''):


  28.    url = "https://oapi.dingtalk.com/gettoken"

  29.    params = {"appkey":"dingql1xm9van2xd","appsecret":"1bAytrjRNeRrIx1UfnIFppsrdySkduVEk1PmwU890D69GAO46IOBJtKnIghi"}

  30.    res = requests.get(url=url,params=params)

  31.    #返回str

  32.    result = json.loads(res.text)

  33.    token_get = result["access_token"]



  34. print(token_get)


  35. #开始发送钉钉消息

  36. url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token="+token_get

  37. params = {"agent_id":"472999813","userid_list":"manager244","msg":'{"msgtype":"text","text":{"content":"消息内容s"}}'}

  38. res = requests.post(url=url,params=params)

  39. #返回str

  40. result = json.loads(res.text)

  41. task_id = result["task_id"]


  42. print(task_id)


  43. """


如果上面不行可以尝试升级pip本身,在dos命令行下运行:python -m pip install –upgrade pip

安装request包:pip install request

至此,可以灵活运用钉钉的python sdk来实现相关功能了。

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/python3-7使用钉钉2-x版本接口/

文章转载自染卷,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论