1.场景分析
公司内部很多文档都是由多人进行维护的,随时发生变更,因此在利用这些数据的时候就需要直接读取云文档的数据,从而执行下一步动作。团队云文档api执行权限一般需要管理员审核才能使用。如果你就是管理员,那么恭喜你,你可以随意。下面具体介绍下如何开通云文档api操作权限,并使用python调用各种API。
2.开通云文档API操作权限
- 搜索开发者小助手,点击开发资源找到开发文档
- 点击开发者后台
- 创建企业应用
- 开通所需权限
- 版本发布,权限申请后发步才能进入审批环节
申请成功后,飞书会发送一条权限开通成功的消息,收到之后,恭喜你可以进行下一步操作。
3.给予自建应用云文档编辑权限
access_token一般常用有两种:
tenant_access_token:访问应用非自有资源
- 访问其他用户的文档、电子表格、多维表格需要取得文档所有者的授权
- 需要应用开启机器人能力
- 需要所有者打开对应的文档,在页面右上方「…」->「…更多」-> 「添加文档应用」入口添加
- 访问 知识库需要获得知识库管理员的授权
- 需要应用开启机器人能力
- 需要知识库管理员打开知识库节点文档,在页面右上方「…」->「…更多」-> 「添加文档应用」入口添加
user_access_token:访问用户非自有资源
- 访问其他用户的文档、电子表格、多维表格需要取得文档所有者的授权
- 需要所有者打开对应的文档,在页面右上方「分享」入口添加
- 访问其他用户文件夹需要取得文件夹所有者的授权
- 需要所有者在我的空间找到目标文件夹,右键菜单中「分享」入口添加
- 访问知识库需要获得知识库管理员的授权
- 需要知识库管理员打开知识库节点文档,在页面右上方「分享」入口添加
注:user_access_token需要用户授权,脚本获取不到,建议使用tenant_access_token,之后想要编辑文档可以在文档中添加应用
云文档添加自己创建的应用,需要有文档的管理者权限
4.获取app_id和app_secret
5.程序调用api
飞书api开发文档:https://open.feishu.cn/document/server-docs/docs/faq
api调用实战
import json
import requests
import pymysql
app_id = "cli_xxxxx"
app_secret = "xxxx"
#获取tenant_access_token
url1 = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
payload = {
"app_id": app_id,
"app_secret": app_secret
}
response = requests.post(url1, json=payload)
# print(response.json())
tenant_access_token = response.json()["tenant_access_token"]
print(tenant_access_token)
#获取code,添加自定义的机器人应用到文档中,需要有文档管理权限,之后使用tenant_access_token即可
#获取表的元数据信息
sheet_token="xxx"
sheet_id="xxxx"
url="https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/" + sheet_token + "/sheets/"+sheet_id
Authorization_value="Bearer "+tenant_access_token
payload = ''
headers = {'Authorization': Authorization_value}
response = requests.request("GET", url, headers=headers, data=payload)
json_Data=json.loads(response.text)
row_count= json_Data['data']['sheet']['grid_properties']['row_count']
column_count= json_Data['data']['sheet']['grid_properties']['column_count']
# 打印返回体信息
print(row_count)
print(column_count)
print(ord('A'))
print(chr(65))
#查看表内容
sheet_range="A1:C"+str(row_count)
print(sheet_range)
url="https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/" + sheet_token + "/values/"+sheet_id+"!"+sheet_range+'?valueRenderOption=ToString&dateTimeRenderOption=FormattedString'
Authorization_value="Bearer "+tenant_access_token
payload = ''
headers = {'Authorization': Authorization_value}
response = requests.request("GET", url, headers=headers, data=payload)
json_Data=json.loads(response.text)
# 打印返回体信息
sheet0_values= json_Data['data']['valueRange']['values']
print(sheet0_values)
# print(sheet0_values[0][0])
#向单个范围写入数据
# https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/:spreadsheetToken/values
# url="https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/" + sheet_token + "/values"
# Authorization_value="Bearer "+tenant_access_token
# sheet_range_in=sheet_id+"!A17:C18"
# payload = {
# "valueRange":{
# "range": sheet_range_in,
# "values": [
# [
# "Hello", 1,4
# ],
# [
# "World", 1,5
# ]
# ]
# }
# }
# headers = {
# 'Authorization': Authorization_value,
# 'Content-Type': 'application/json'
# }
# response = requests.put( url, headers=headers, json=payload)
# print(response.text)
#获取筛选条件
# https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/:spreadsheet_token/sheets/:sheet_id/filter
url="https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/" + sheet_token + "/sheets/"+sheet_id + "/filter"
Authorization_value="Bearer "+tenant_access_token
payload = ''
headers = {
'Authorization': Authorization_value,
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
json_Data=json.loads(response.text)
print(json_Data)
#删除筛选
# https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/:spreadsheet_token/sheets/:sheet_id/filter
# url="https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/" + sheet_token + "/sheets/"+sheet_id + "/filter"
# Authorization_value="Bearer "+tenant_access_token
# payload1 =''
# # payload2 ={
# # "range": sheet_id+"!"+sheet_range,
# # "col": "A",
# # "condition": {
# # "filter_type": "color",
# # "compare_type": "backColor",
# # "expected": ["#ffff00"]
# # }
# # }
# headers = {
# 'Authorization': Authorization_value
# }
# response = requests.request("DELETE", url, headers=headers, data=payload1)
# # response = requests.post( url,headers=headers, json=payload2)
# # print(response)
# print(response.text)
#创建筛选
url="https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/" + sheet_token + "/sheets/"+sheet_id + "/filter"
Authorization_value="Bearer "+tenant_access_token
payload ={
"range": sheet_id+"!A:A",
"col": "A",
"condition": {
"filter_type": "color",
"compare_type": "backColor",
"expected": ["#ffff00"]
}
}
headers = {
'Authorization': Authorization_value,
'Content-Type': 'application/json'
}
response = requests.get( url,headers=headers, json=payload)
# print(response)
print(response.text)
6.不足之处
飞书表格不能获取单元格的属性信息,只能查看单元格内容,使用很不方便。