• 钉钉api开发


    参考:https://blog.csdn.net/tachycardie/article/details/97249198

    import requests
    import dingtalk.api

    import datetime
    from datetime import datetime as dt

    一、#先调用API获取到token
    def getaccseetoken():
        request = dingtalk.api.OapiGettokenRequest("https://oapi.dingtalk.com/gettoken")
        request.corpid = "AppKey"                 #AppKey要更换为实际查到的值
        request.corpsecret = "AppSecret"      #AppSecret要更换为实际查到的值
        f = request.getResponse()
        access_token = f['access_token']
        return access_token

    print(getaccseetoken())

    二、#获取userid
    def get_userid(access_token):
        request = dingtalk.api.OapiAttendanceListscheduleRequest('https://oapi.dingtalk.com/topapi/attendance/listschedule')
        request.workDate = str(dt.strftime(dt.now(), '%Y-%m-%d %H:%M:%S'))
        f = request.getResponse(access_token)
        
        for fx in f:
            print(fx)
        userid = list(map(lambda x: x["userid"], f['result']['schedules']))   
        userid = list(set(userid))
        return userid
    print(get_userid(getaccseetoken()))
    #print(get_userid(getaccseetoken()))
    #print(len(get_userid(getaccseetoken())))

    三、#根据API获取到打卡详情(钉钉有人数限制,此处已做处理)

    def get_attendence_listrecord(userid, access_token, day):
        request = dingtalk.api.OapiAttendanceListRecordRequest('https://oapi.dingtalk.com/attendance/list')
        request.workDateFrom = str(dt.now() - day * datetime.timedelta(days=1))
        request.workDateTo = str(dt.now())
        request.userIdList = userid
        request.offset = 0
        request.limit = 50
        f = request.getResponse(access_token)
        h = []
        h.append(f)
        while ('hasMore', True) in f.items():
            request.offset = request.offset+request.limit
            f = request.getResponse(access_token)
            h.append(f)
        return h

    response = get_attendence_listrecord(['manager5540'], '8d1207d535e23e428bda3532110bc06d', day=0)
    print(response[0]['recordresult'][0]['userCheckTime'])
    print(dt.fromtimestamp(int(response[0]['recordresult'][0]['userCheckTime']) / 1000))

    四、#之后你就可以拿数据存入数据库了(注意处理返回system的数据)
    def get_value(userid_in, access):
        l = []
        if len(userid_in)>50:
            users = []
            start = 0
            end = 49
            while end<len(userid_in):
                users.append(userid_in[start:end])
                start +=49
                end = start + 50
                users.append(userid_in[start:end])
        for userid_in_in in users:
            reponse = get_attendence_listrecord(userid_in_in, access, day=0)
            if reponse[0]['errmsg'] != 'ok':
                global access_token
                access_token = getaccseetoken()
                reponse = get_attendence_listrecord(userid_in_in, access_token, day=0)
            for respose in reponse[0]['recordresult']:
                if respose['sourceType'] != 'SYSTEM':
                    value = (respose['userId'], respose['checkType'], dt.fromtimestamp(int(respose['userCheckTime']) / 1000),
                             respose['locationResult'])
                    l.append(value)
        return l
     
    db = pymysql.connect('数据库地址', '用户名', '密码', '库名', charset="utf8")
    cursor = db.cursor()
    query = """insert into 表名 (字段名, 字段名,字段名,字段名
                  ) values (%s,%s,%s,%s)"""
    valu = get_value(userid, access_token)
     
    def insert():
        value = get_value(userid, access_token)
        for record in value:
            cursor.execute(query, record)
            db.commit()

  • 相关阅读:
    SpringData JPA 使用原生 SQL
    解决:CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    Java 正则表达式 简单用法
    Java文件I/O简单介绍
    理清 UT、UTC、GMT和CST
    【LeetCode】面试题62. 圆圈中最后剩下的数字
    【阅读笔记】Java核心技术卷一 #6.Chapter8
    【阅读笔记】Java核心技术卷一 #5.Chapter7
    【阅读笔记】Java核心技术卷一 #4.Chapter6
    SQL面试题
  • 原文地址:https://www.cnblogs.com/sfccl/p/14069760.html
Copyright © 2020-2023  润新知