最近在学习Python,刚好项目上有一个需求,需要将OA中的通讯录,包括部门及部门下所有人员信息,定时同步到钉钉中,由于OA标准的同步钉钉功能只能同步OA主账号资料,不能同步次账号,于是考虑用Python开发一个程序来实现这个功能。
实现思路如下:
首先通过钉钉开放的API,获取钉钉中现有的部门及人员信息,并保存到本地OA数据库,
然后在本地OA数据中,对比OA通讯录与钉钉部门及人员信息,计算出需要同步更新到钉钉的数据。最后,通过调用钉钉API,将OA数据库中需要同步到钉钉的数据,同步到钉钉,包括新增、修改部门,新增、修改人员。
先获取钉钉中现有的部门及人员信息
参考同步钉钉信息的 API文档,创建如下代码
import requests
import json
app_key = 'dingqx5duul0lw'
app_secret = 'YCcDPchwjr9mtAfRNtu1HDsF2n8hnbpu2O9BAdvOwhxj5n'
def get_access():
"""
获取token
:return:
"""
url = "https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}".format(app_key, app_secret)
jo = json.loads(requests.get(url).text)
return jo['access_token']
def get_dp(token):
"""
获取部门列表
:param token:
:return:
"""
url = "https://oapi.dingtalk.com/department/list?access_token=" + token
# url = "https://oapi.dingtalk.com/topapi/v2/department/get?access_token=" + token
dp = json.loads(requests.get(url).text)
return dp['department']
def get_users(token, dept_id):
"""
获取部门用户userid列表
:param token:
:param dept_id:
:return:
"""
url = "https://oapi.dingtalk.com/user/getDeptMember?access_token={0}&deptId={1}".format(token, dept_id)
user_list = json.loads(requests.get(url).text)
return user_list['userIds']
def get_user_info(token, user_id):
"""
根据userid获取用户详情
:param token:
:param userId:
:return:
"""
url = "https://oapi.dingtalk.com/user/get?access_token={0}&userid={1}".format(token, user_id)
info = json.loads(requests.get(url).text)
return info
if __name__ == '__main__':
token = get_access()
dp = get_dp(token)
for d in dp:
users = get_users(token, d['id'])
for u in users:
user_info_dict = get_user_info(token, u)
print(user_info_dict)
网友评论