python3 企业微信邮箱批量脚本
缺陷:执行速度慢 1s 一条数据,无多线程
(如果有更好的方法,可以告知我)
脚本功能介绍:
-
批量判断创建不存在部门,更新成员到部门
-
xlsx 模板格式:
工作表1:
| 湛江事业群 | 运维部 | 网络部 |
| 湛江事业群 | 技术部 | 后台部 |
工作表2:
| 张三 |
| 李四 |
#!/usr/bin/env python3
# -*- coding:utf8 -*
import requests
from xlrd import open_workbook
import re
import pprint
from multiprocessing import Process
def get_token():
"""
获取 token
:return:
"""
dict_new = {
'corpid': '',
'corpsecret': ''
}
url = 'https://api.exmail.qq.com/cgi-bin/gettoken'
getr = requests.get(url=url, params=dict_new)
access_token_new = getr.json().get('access_token')
return access_token_new
def get_department_members(department_id_new):
"""
获取所有员工 userid
:param department_id_new:
:return:
"""
dict_new = {
"access_token": str(access_token),
"department_id": str(department_id_new),
"fetch_child": int(1)
}
url = "https://api.exmail.qq.com/cgi-bin/user/simplelist"
get_department_members_new = requests.get(url=url, params=dict_new, timeout=300).json()['userlist']
return get_department_members_new
def find_department(name_new):
"""
精准查询部门
:param name_new:
:return:
"""
dict_new = {
"name": str(name_new),
"fuzzy": 0,
}
url = 'https://api.exmail.qq.com/cgi-bin/department/search?access_token=' + str(access_token)
post_find_department = requests.post(url=url, json=dict_new, timeout=300).json()['department']
return post_find_department
def find_name_userid(dict_list, name_new):
"""
遍历查询 userid
:param dict_list:
:param name_new:
:return:
"""
for dict_new in dict_list:
if dict_new['name'] == str(name_new):
id_new = dict_new['userid']
return id_new
def create_department(name_new, parentid_new):
"""
创建部门
:param name_new:
:param parentid_new:
:return:
"""
dict_new = {
"name": str(name_new),
"parentid": int(parentid_new),
}
url = 'https://api.exmail.qq.com/cgi-bin/department/create?access_token=' + str(access_token)
post_create_department = requests.post(url=url, json=dict_new).json()
return post_create_department
def update_member(userid_new, department_new):
"""
更新成员信息
:param userid_new:
:param department_new:
:return:
"""
dict_new = {
"userid": str(userid_new),
"department": [int(department_new)]
}
url = 'https://api.exmail.qq.com/cgi-bin/user/update?access_token=' + str(access_token)
get_update_member = requests.post(url=url, json=dict_new, timeout=300).json()
return get_update_member
def update_userid_department(user_in, department_in, members_in):
"""
高级 更新成员信息
:param user_in:
:param department_in:
:param members_in:
:return:
"""
userid_new = find_name_userid(members_in, user_in)
department_new = find_department(department_in)[0]['id']
updata_member_new = update_member(userid_new, department_new)
return updata_member_new
def open_xlxs(filename_new, sheets_id):
data_xlrd = open_workbook(str(filename_new))
table_xlrd_new = data_xlrd.sheets()[int(sheets_id)]
return table_xlrd_new
def get_members(userid_new):
dict_new = {
"access_token": access_token,
"userid": userid_new
}
url = 'https://api.exmail.qq.com/cgi-bin/user/get'
get_members_new = requests.get(url=url, params=dict_new, timeout=300).json()
return get_members_new
if __name__ == '__main__':
access_token = get_token()
members_list = get_department_members(1)
table_xlrd = open_xlxs('alist.xlsx', 0)
table_xlrd_0 = open_xlxs('alist.xlsx', 1)
if table_xlrd.nrows == table_xlrd_0.nrows:
ranit_xlrd_nrows = table_xlrd.nrows
print('总行数: ' + str(ranit_xlrd_nrows))
for ranit_xlrd in range(ranit_xlrd_nrows):
print('##### ' + str(ranit_xlrd) + ' #####')
line_tablexlrd = table_xlrd.row_values(ranit_xlrd)
# 定义全局变量
global line_ranint
global parentid_line
global end_id
global end_department
global brack_id
line_ranint = ''
parentid_line = 0
end_id = 0
brack_id = 0
end_department = ''
line_tablelist = []
line_findlist = []
# 遍历列表执行
for ranit in range(table_xlrd.row_len(ranit_xlrd)):
if line_tablexlrd[ranit]:
line_ranint = line_ranint + line_tablexlrd[ranit] + '/'
line_tablelist.append(line_ranint)
line_findlist.extend(find_department(line_tablexlrd[ranit]))
start_for = find_department(line_tablelist[-1].split('/')[-2])
for statfor in start_for:
if statfor['path'] == line_tablelist[-1][:-1]:
name_start = table_xlrd_0.row_values(ranit_xlrd)[0]
update_start = update_member(get_members(find_name_userid(members_list, name_start))['userid'],
statfor['id'])['errmsg']
brack_id = 1
print(name_start + ' 员工更新部门状态: ' + update_start + "\n" +
name_start + ' 员工更新部门路径:' + statfor['path'])
if brack_id == 0:
for ranit in range(len(line_tablelist)):
for findranit in line_findlist:
if findranit['path'] == line_tablelist[ranit][:-1]:
parentid_line = findranit['id']
print('路径绝对匹配: ' + findranit['path'])
break
elif findranit['path'] == line_tablelist[ranit-1][:-1]:
create_status = create_department(line_tablexlrd[ranit], parentid_line)
if create_status['errcode'] == 0:
findranit_append = find_department(line_tablexlrd[ranit])
print('创建值: ' + line_tablelist[ranit][:-1] + ' / id : ' + str(create_status['id']))
line_findlist.extend(findranit_append)
parentid_line = create_status['id']
end_id = create_status['id']
end_department = line_tablelist[ranit][:-1]
elif create_status['errcode'] == 60008:
findranit_err_path = []
for findranit_err in line_findlist:
if findranit_err['name'] == line_tablexlrd[ranit] \
and findranit_err['path'] == line_tablelist[ranit][:-1]:
parentid_line = findranit_err['id']
findranit_err_path.append(findranit_err['path'])
end_id = findranit_err['id']
end_department = findranit_err['path']
print('存在值: ' + findranit_err_path[0])
break
if ranit == (len(line_tablelist)) - 1:
name_ranit = table_xlrd_0.row_values(ranit_xlrd)[0]
update_status = update_member(get_members(find_name_userid(members_list, name_ranit))['userid'],
end_id)['errmsg']
print(name_ranit + ' 员工更新部门状态: ' + update_status)
print(name_ranit + ' 员工更新部门路径:' + end_department)
else:
print('错误: 表单不一致 对比值:' + str(table_xlrd.nrows) + ' != ' + str(table_xlrd_0.nrows))
不断学习