知乎文章若有排版问题请见谅,原文放在个人博客中【欢迎互踩!】
写在最前
飞书作为一款高效远程办公软件,在疫情期间凭借着人性化的UI交互以及稳定的远程联络能力深得各大企业的偏好。但在创建团队之初,难免遇到需要批量导入数据或者批量处理员工信息的情况,飞书为此提供了各种API接口以便集中处理这些情况,此文的目的也是为了让各位团队管理者能自如使用这些API接口。
Python调用API接口
在了解飞书API接口前,我们先熟悉如何用python发送和接受请求,这里我是用的是requests模块。
POST请求方式
具体请求地址、Header、Body会在接口声明中提及,执行request.post()后会接收返回Body。
# 请求地址
url = “https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/”
# 请求Header(字典形式储存)
header = {“content-type”:”application/json”,
“Authorization”:”Bearer ” + str(tat)}
# 请求Body(字典形式储存)
post_data = {“app_id”:”xxx”,
“app_secret”:”xxx”}
# 发送POST请求
r = requests.post(url, data=post_data, headers=header)
GET请求方式
与POST请求方式大致相同,具体参数内容参见接口声明。
# 请求Header(字典形式储存)
header = {“content-type”:”application/json”,
“Authorization”:”Bearer ” + str(tat)}
# 请求地址
url = “https://open.feishu.cn/open-apis/contact/v1/tenant/custom_attr/get”
# 发送GET请求
r = requests.get(url, headers = header)
解析json
为便于对返回Body进行处理,我们通常将返回信息以json形式展示,方法如下:
r.json()
飞书API接口调用准备
这一部分建议大家查阅飞书API官方文档,以下两项为补充文档中未详细提及的部分
获取授权凭证
在使用API之前我们要先获得三种授权凭证,分别是:app_access_token :访问App资源相关接口。
tenant_access_token :访问企业资源相关接口。
user_access_token :访问用户资源相关接口。
我们这里只介绍在企业管理中最常用到tenant_access_token的获取方式:
1. 管理后台创建企业自建应用;
2. 记录应用凭证内AppID和AppSecret备用;
3. 从左侧三种应用功能任选一种;
4. 根据后续操作需要选择所需权限,具体权限内容参见这里;
5. 发布应用(应用于所有部门);
明确API调用顺序
在这一部分我们以批量导入联系人为例(文末有python代码):由于诸如部门id以及通讯录字段id等信息无法直接获得,我们在导入联系人前要先获得这些id信息获取tenant_access_token
获取企业自定义用户属性配置
获取通讯录授权范围(所有部门id列表)
建立部门id与真实部门的键值对应关系
批量新增用户
pandas模块读取excel数据因为在批量处理用户信息时我们所需要的基本都是从已有excel中读取相关信息,所以我们在这里只对pandas的读取功能做简要介绍。import pandas as pd 导入pandas模块
data = pd.read_csv( file, sep, encoding, nrows, skiprows) data = pd.read_excel( file, sep, encoding, nrows, skiprows) file为导入文件目录,sep为数据分隔符,nrows为读取前n行,skiprows为跳过某几行
pd.DataFrame() 创建一个DataFrame对象
data.head(3)/data.tail(3) 读取数据头/末3行
data.iloc[] 提供基于整数的索引方式,索引序数而非标签
data.to_numpy() 将pandas数组转化为np数组处理(对,有什么pandas数组不会的转成np数组操作岂不美汁汁)
实例:飞书批量导入联系人
import json
import requests
import pandas as pd
# 获取tenant_access_token
url = “https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/”
post_data = {“app_id”:”xxx”,
“app_secret”:”xxx”}
r = requests.post(url, data=post_data)
tat = r.json()[“tenant_access_token”]
# 获取通讯录自定义字段id
header = {“content-type”:”application/json”,
“Authorization”:”Bearer ” + str(tat)}
url = “https://open.feishu.cn/open-apis/contact/v1/tenant/custom_attr/get”
r = requests.get(url, headers = header)
qq_id = list(r.json()[“data”][“custom_attrs”].keys())[0]
sn_id = list(r.json()[“data”][“custom_attrs”].keys())[1]
# 获取部门id
department = {}
sex = {“男”:”1″, “女”:”2″}
url = “https://open.feishu.cn/open-apis/contact/v1/scope/get”
r = requests.get(url, headers = header)
ls = r.json()[“data”][“authed_departments”]
for i in range(len(ls)):
url = “https://open.feishu.cn/open-apis/contact/v1/department/info/get?department_id=” + str(ls[i])
r = requests.get(url, headers = header)
name = r.json()[“data”][“department_info”][“name”]
department[name] = ls[i]
# 批量导入联系人信息
url = “https://open.feishu.cn/open-apis/contact/v1/user/add”
data = pd.read_excel(‘class_data.xlsx’)
data = data.iloc[2:, :]
data = data.to_numpy()
for i in range(len(data)):
user_data = {
“name”:data[i][0],
“department_ids”:[department[data[i][4][:7]]],
# “email”:”zhangsan@gmail.com”,
“mobile”:”+86″+str(data[i][5]),
“mobile_visible”:”true”,
“city”:data[i][7],
“country”: “CN”,
“gender”:sex[data[i][1]],
“employee_type”:1,
“employee_id”:”id_” + str(data[i][3]),
“employee_no”:str(data[i][3]),
“need_send_notification”:”true”,
“custom_attrs”:{
qq_id: {
“value”: str(data[i][6])
},
sn_id: {
“value”: str(data[i][3])
}
}
}
data_to_send = json.dumps(user_data).encode(“utf-8”)
r = requests.post(url, data = data_to_send, headers = header)
print(r.json())
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36831.html