美文网首页
用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