下载钉钉通讯录人员信息

import requests

# 拼接请求链接
# 需要创建钉钉应用获取AppKey和AppSecret,并且赋予应用权限
AppKey = 'dingqr1yngem1iyr1qk'
AppSecret = 'AAzWs-Amawi0wyBkUMLwVQx96guf-mKLrgXx1ZRl20zXSly90GfvCaNZBrNdtuJ'
ding_token_URL = "https://oapi.dingtalk.com/gettoken?appkey=" + AppKey + "&appsecret=" + AppSecret
print('token请求地址:', ding_token_URL)

# 发送请求获取access_token
access_token = requests.get(ding_token_URL)
print("钉钉token", access_token.json()["access_token"])

# 获取部门人员信息
ding_dept_user_list = f"https://oapi.dingtalk.com/topapi/v2/user/list?access_token={access_token.json()["access_token"]}"
# 遍历获取钉钉部门信息
ding_department_list = f"https://oapi.dingtalk.com/topapi/v2/department/listsub?access_token={access_token.json()["access_token"]}"
# 获取花名册元数据
ding_smartwork_list = f"https://oapi.dingtalk.com/topapi/smartwork/hrm/roster/meta/get?access_token={access_token.json()["access_token"]}"
# 获取员工花名册字段信息
ding_rosters_list = f"https://api.dingtalk.com/v1.0/hrm/rosters/lists/query"


# 获取部门人员信息
def dept_user_list(dept_id):
    json = {
        "cursor": "0",
        "contain_access_limit": "false",
        "size": "10",
        "order_field": "modify_desc",
        "language": "zh_CN",
        "dept_id": str(dept_id)
    }
    # 获取部门人员信息
    get_user_info = requests.post(url=ding_dept_user_list, json=json)
    for user_info in get_user_info.json()['result']['list']:
        # 使用 .get() 方法安全获取字段值,避免 KeyError
        dept_id_list = user_info.get("dept_id_list", [])
        email = user_info.get("email", "")
        job_number = user_info.get("job_number", "")
        mobile = user_info.get("mobile", "")
        name = user_info.get("name", "")
        title = user_info.get("title", "")
        userid = user_info.get("userid", "")
        work_place = user_info.get("work_place", "")
        extension = user_info.get("extension", "")

        # 打印用户信息,仅显示存在的字段
        print(
            f"Dept ID List: {dept_id_list}, "
            f"Email: {email if email else 'N/A'}, "
            f"Job Number: {job_number if job_number else 'N/A'}, "
            f"Mobile: {mobile if mobile else 'N/A'}, "
            f"Name: {name if name else 'N/A'}, "
            f"Title: {title if title else 'N/A'}, "
            f"User ID: {userid if userid else 'N/A'}, "
            f"Work Place: {work_place if work_place else 'N/A'}, "
            f"extension: {extension if extension else 'N/A'}"
        )

        # print(user_info['dept_id_list'], user_info['email'], user_info['job_number'],
        #       user_info['mobile'], user_info['name'], user_info['title'], user_info['userid'], user_info['work_place'])


# 遍历获取钉钉部门信息和调用获取部门人员信息
def traverse_organization(node):
    json = {
        "dept_id": str(node)
    }
    get_dept_info = requests.post(url=ding_department_list, json=json)

    for parent_id in get_dept_info.json()['result']:
        print(parent_id['dept_id'], parent_id['name'], parent_id['parent_id'])
        dept_user_list(parent_id['dept_id'])
        traverse_organization(parent_id['dept_id'])


def active_user_list(node):
    # 遍历部门和部门下人员信息
    traverse_organization(str(node))
    # 获取根部门下的人员信息
    dept_user_list(str(node))


def hrm_roster_meta():
    json = {
        "agentid": str(2819356646)
    }
    # 获取部门人员信息
    get_hrm_roster_meta = requests.post(url=ding_smartwork_list, json=json)
    for roster_info in get_hrm_roster_meta.json()['result']:
        print(roster_info)


def hrm_roster():
    json = {
        "userIdList": ["bpm88b3983895fb45a689b9628b44564f07", "2560817822832039636"],
        "appAgentId": 2819356646,
        "text2SelectConvert": True,
        "fieldFilterList": ["姓名", "部门", "sys00-entryAge", "sys03-highestEdu"]
    }

    headers = {
        "x-acs-dingtalk-access-token": str(access_token.json()["access_token"]),
        "Content-Type": "application/json"
    }
    # 获取部门人员信息
    get_hrm_roster_meta = requests.post(url=ding_rosters_list, json=json, headers=headers)
    # print(get_hrm_roster_meta.json()['result'])
    for user_info in get_hrm_roster_meta.json()['result']:

        # print(len(user_info['fieldDataList']))

        for i in range(len(user_info['fieldDataList'])):
            print(user_info['fieldDataList'][i]['fieldValueList'][0]['value'])


# active_user_list(974463964)
hrm_roster_meta()
hrm_roster()