Python获取钉钉打卡考勤打卡月度汇总
微站长
1年前
2383
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)
THE END
评论列表