• python实现钉钉文件上传发送,钉钉机器人接收信息


    一、钉钉代码

    import dingtalk.api
    import requests
    
    class DingDingAPI():
        def __init__(self, appkey, appsecret):
            self.appkey = appkey
            self.appsecret = appsecret
            self.access_token = self.get_token()
    
        # 获取token
        def get_token(self):
            params = {
                "appkey": self.appkey,
                "appsecret": self.appsecret
            }
            try:
                res = requests.get("https://oapi.dingtalk.com/gettoken", params=params)
                access_token = res.json().get("access_token")
                return access_token
            except Exception as e:
                print(e)
    
        # 发送消息
        def send_msg(self, chatid="", content=""):
    
            req = dingtalk.api.OapiChatSendRequest("https://oapi.dingtalk.com/chat/send")
    
            req.chatid = chatid
            req.text = {
                "content": content
            }
            req.msgtype = "text"
    
            resp = req.getResponse(self.access_token)
    
            return resp
    
        # 发送文件
        def send_file(self, chatid="", media_id=""):
    
            req = dingtalk.api.OapiChatSendRequest("https://oapi.dingtalk.com/chat/send")
    
            req.chatid = chatid
            req.file = {
                "media_id": media_id
            }
            req.msgtype = "file"
            resp = req.getResponse(self.access_token)
            return resp
    
    
        # 上传文件
        def upload_media(self,file_name="name.docx",file_path=""):
            req = dingtalk.api.OapiMediaUploadRequest("https://oapi.dingtalk.com/media/upload")
    
            req.type = "file"
            req.media = dingtalk.api.FileItem(file_name,open(file_path, 'rb'))
            resp = req.getResponse(self.access_token)
            return resp
    
        # 通过电话获取userid
        def get_by_mobile(self,mobile):
            req = dingtalk.api.OapiUserGetByMobileRequest("https://oapi.dingtalk.com/user/get_by_mobile")
    
            req.mobile = mobile
            try:
                resp = req.getResponse(self.access_token)
                return resp
            except Exception as e:
                print(e)
    
        # 通过userid获取信息,不能使用机器人appkey
        def get_user_msg(self,userid):
            req = dingtalk.api.OapiUserGetRequest("https://oapi.dingtalk.com/user/get")
            req.userid = userid
            try:
                resp = req.getResponse(self.access_token)
                print(resp)
                return resp
            except Exception as e:
                print(e)
    
    
    if __name__ == '__main__':
        appkey = "*******"
        appsecret = "**********"
        dd=DingDingAPI(appkey,appsecret)

    官方的封装模块dingtalk是python2.7的,我已改成3.0的

    https://pan.baidu.com/s/1tpnTm17h4kVq81DK71wlDQ

    密码:ivt4

    钉钉的debug调试网址:https://wsdebug.dingtalk.com/,可以用来获取chatid

    二、钉钉机器人

    需要一个公网ip,搭建django服务器来接收钉钉服务器的回调

    首先是注册一个钉钉机器人,重要的是将自己接收钉钉消息的服务器ip加路由填入到-‘消息接收地址’

    #url部分代码
    from django.conf.urls import url
    from django.contrib import admin
    from dingding import views
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^robot/', views.robot),
    ]
    #views部分代码
    
    from django.http import HttpResponse, JsonResponse
    import json
    
    import hmac
    import hashlib
    import base64
    
    # 机器人的app_secret
    app_secret = "************"
    
    # Create your views here.
    def robot(request):
        if request.method == "POST":
            HTTP_SIGN = request.META.get("HTTP_SIGN")
            HTTP_TIMESTAMP = request.META.get("HTTP_TIMESTAMP")
            res = json.loads(request.body)
            print(res)
            # 用户输入钉钉的信息
            content = res.get("text").get("content")
    
            string_to_sign = '{}
    {}'.format(HTTP_TIMESTAMP, app_secret)
            string_to_sign_enc = string_to_sign.encode('utf-8')
            hmac_code = hmac.new(app_secret.encode("utf-8"), string_to_sign_enc, digestmod=hashlib.sha256).digest()
            sign = base64.b64encode(hmac_code).decode("utf-8")
            print(sign)
            print(HTTP_SIGN)
            #验证签名是否为钉钉服务器发来的
            if sign == HTTP_SIGN:
                '''
                可以写一些执行逻辑,返回用户想要的信息,比如工资信息,可以去数据库查工资信息回给钉钉用户
                '''
                if "我的工资" in content:
                    return JsonResponse(
                        {"msgtype": "text",
                         "text": {
                             "content": "您上月的工资为*****元"
                         }
                         }
                    )
                return JsonResponse(
                    {"msgtype": "text",
                     "text": {
                         "content": "谢谢使用此机器人,{}".format(content)
                     }
                     }
                )
            return JsonResponse({"error":"你没有权限访问此接口"})
        if request.method == "GET":
            return HttpResponse("hello")
  • 相关阅读:
    MS SQL 挑战问题
    ORA00060错误
    用SYS本地登录或远程登录引起ORA01031错误
    RhelServer 5.5 安装ORACLE10
    sys不能远程登录的问题
    ORA12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
    MERGE INTO 性能问题疑问
    断开网线后监听服务器配置
    ORACLE——Instant Client配置SQL*LDR、EXP等命令工具
    监听服务管理
  • 原文地址:https://www.cnblogs.com/angelyan/p/12523687.html
Copyright © 2020-2023  润新知