# -*- 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)