首页/ Python/ 正文

Python获取钉钉打卡考勤打卡月度汇总

微站长 6个月前 1848 0
# -*- coding: utf-8 -*-
import datetime
from time import time

import dingtalk.api

access_token = ''
depts = []
users = []


# 获取进入key
def get_access():
    req = dingtalk.api.OapiGettokenRequest("https://oapi.dingtalk.com/gettoken")

    req.appkey = "你的应用appkey"
    req.appsecret = "你的应用appsecret "

    try:
        global access_token
        resp = req.getResponse(access_token)
        access_token = resp['access_token']
    except Exception as e:
        print('获取access失败')
        exit()


# 获取部门信息1
def get_departs(depart_id=1):
    req = dingtalk.api.OapiV2DepartmentListsubidRequest("https://oapi.dingtalk.com/topapi/v2/department/listsubid")
    req.dept_id = depart_id
    try:
        resp = req.getResponse(access_token)
        for dept in resp['result']['dept_id_list']:
            GetDepartInfo(dept)
    except Exception as e:
        print(e)
        exit('get_departs Error')


# 获取部门信息2
def GetDepartInfo(dept_id):
    req = dingtalk.api.OapiV2DepartmentGetRequest("https://oapi.dingtalk.com/topapi/v2/department/get")

    req.dept_id = dept_id
    try:
        resp = req.getResponse(access_token)
        tmp = {'dept_id': dept_id, 'name': resp['result']['name'], 'parent_id': resp['result']['parent_id']}
        global depts
        depts.append(tmp)
        get_departs(dept_id)
    except Exception as e:
        print(e)


# 获取部门成员
def getDeptUsers(dept_id, name):
    req = dingtalk.api.OapiV2UserListRequest("https://oapi.dingtalk.com/topapi/user/listid")

    req.dept_id = dept_id
    try:
        resp = req.getResponse(access_token)
        # print(resp)
        for u in resp['result']['userid_list']:
            us = {'userid': u, 'dept_name': name}
            global users
            users.append(us)
    except Exception as e:
        print(e)


# 获取用户信息
def getUserInfo(userid):
    req = dingtalk.api.OapiV2UserGetRequest("https://oapi.dingtalk.com/topapi/v2/user/get")
    req.userid = userid
    try:
        resp = req.getResponse(access_token)
        return resp['result']['name']
    except Exception as e:
        return -1


# 获取打卡天数
def getDaKaDay(userid, start_time, end_time):
    import dingtalk.api

    req = dingtalk.api.OapiAttendanceGetcolumnvalRequest("https://oapi.dingtalk.com/topapi/attendance/getcolumnval")

    req.userid = userid
    req.column_id_list = "179438576"  # 需要改成你自己需要获取的统计列ID
    req.from_date = str(start_time) + ' 00:00:00'
    req.to_date = str(end_time) + ' 23:59:59'
    try:
        resp = req.getResponse(access_token)
        result = resp['result']['column_vals']
        count = 0
        for dataInfo in result[0]['column_vals']:
            # print(float(dataInfo['value']))
            count += float(dataInfo['value'])
        return count
    except Exception as e:
        print(e)
        return -1


if __name__ == '__main__':
    get_access()
    today = datetime.date.today()
    yester_day = today - datetime.timedelta(days=1)
    first_day = datetime.date(today.year, today.month, 1)

    t1 = time()
    get_access()
    # print(access_token)
    get_departs()
    # print(depts)
    # t2 = time()
    # print(t2 - t1)
    des = []
    for d in depts:
        if d['parent_id'] == 1:
            des.append({'dept_id': d['dept_id'], 'name': d['name']})
        else:
            di = d['parent_id']
            for d2 in depts:
                if d2['dept_id'] == di:
                    des.append({'dept_id': d['dept_id'], 'name': d2['name']})

    # print(des)
    for bm in des:
        getDeptUsers(bm['dept_id'], name=bm['name'])

    print('获取成员数:', len(users))
    # print(users)
    for u in users:
        u['username'] = getUserInfo(u['userid'])
        u['daka'] = getDaKaDay(u['userid'], first_day, yester_day)
    print(users)
    t3 = time()
    print('共耗时:', t3 - t1)


分享到:

如果您喜欢本站,点击这儿不花一分钱捐赠本站

资源解压密码默认为:vzzw.com www.vzzw.com

本站部分资源收集于网络,如有侵权请联系9108780#qq.com(#替换成@)

THE END

评论列表

暂时没有评论

发表评论: