美文网首页
用Python同步OA系统通讯录到钉钉

用Python同步OA系统通讯录到钉钉

作者: CoryLiu | 来源:发表于2022-03-07 23:24 被阅读0次

最近在学习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)

然后在OA数据库中,计算出需要同步到钉钉的数据

最后,将数据同步到钉钉

相关文章

网友评论

      本文标题:用Python同步OA系统通讯录到钉钉

      本文链接:https://www.haomeiwen.com/subject/qweorrtx.html