python 钉钉获取用户/部门接口
2020-04-26 本文已影响0人
路破格
#-*- coding=utf-8 -*-
#-*- encoding:utf-8 -*-
import sys
import json
import requests
import traceback
default_encoding = "utf-8"
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
def access_url(request_url):
rs = requests.get(url = request_url, timeout = 15)
result = False
if rs.status_code == 200:
result = rs.json()
rs.close()
return result
def get_token():
# 以下2个参数需要修改
appkey = "{yourkey}"
appsecret = "{yoursecret}"
request_url = "https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s" % (appkey, appsecret)
return access_url(request_url)['access_token']
def get_dingtalk_departments(token):
"""
获取钉钉部门信息
"""
request_url = "https://oapi.dingtalk.com/department/list?access_token=%s&id=1" % token
rs = access_url(request_url)
deps = {}
if rs['errcode'] == 0:
for dep in rs_api['department']:
deps[dep['id']] = deps['name']
return deps
def get_dingtalk_users(token):
"""
获取钉钉用户信息
"""
deps = get_dingtalk_departments(token)
users = {}
for dep_id, dep_name in deps.items():
request_url = "https://oapi.dingtalk.com/user/listbypage?access_token=%s&department_id=%d&offset=0&size=100" % (token, dep_id)
rs = access_url(request_url)
if rs['errcode'] == 0:
for user in rs_api['userlist']:
userid = user['userid']
users[userid] = userid
users[userid]['username'] = user['name']
email = ""
if 'orgEmail' in i and i['orgEmail'].find("@") != -1:
email = i['orgEmail']
elif 'email' in i and i['email'].find("@") != -1:
email = i['email']
users[userid]['email'] = email
users[userid]['dep'] = dep_name
print(json.dumps(users, indent = 2), ensure_ascii = False)
if __name__ == "__main__":
try:
token = get_token()
get_dingtalk_users(token)
except Exception as e:
traceback.print_exc()