飞书开发学习笔记(三)-利用python开发调试云文档和电子表格

飞书开发学习笔记(三)-利用python开发调试云文档和电子表格

一.建立Python飞书开发环境

首先还是进入开放平台下的API调试台

飞书开放平台:https://open.feishu.cn/app?lang=zh-CN

以获取"我的空间"下的文件清单为例,通过获取飞书API调试台提供的示例代码,建立Python飞书开发环境。

在下方可以切换到开发的示例代码:

bash 复制代码
import requests

url = "https://open.feishu.cn/open-apis/drive/v1/files?direction=DESC&order_by=EditedTime"
payload = ''

headers = {
  'Authorization': 'Bearer u-fMw0FpV'
}

response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)

注意:这里的代码中,headers里面有口令信息,即 'Authorization': 'Bearer u-fMw0FpV'

这个是系统生成的,是必填信息。

一共有python SDK,Python-Requests,Python-http.client三种方式,也就是利用三个不同的python库进行开发,理论上应该是SDK最强大,实际还未知。

Requests是一个比较常用的库,这里就用这个库示例代码吧。

将此代码复制到Python中,开发就可以开始。

OK,运行成功了,良好的开始。

二.Python飞书开发架构的设计

2.1辅助工具准备json

json是返回数据字符串的格式,通过json的类工具可以很方便的读取,导入json工具

bash 复制代码
import json

json_Data=json.loads(response.text)
# 打印返回体信息
print(json_Data)
# 打印电子表格信息
print(json_Data['data']['files'][1])

返回信息

bash 复制代码
{'created_time': '16991126', 'modified_time': '16991138', 'name': '测试表格', 'owner_id': 'ou_3bd053e263b2734a2cc', 'parent_token': 'nodcnEByngMucMb', 'token': 'SVT0sVnhh', 'type': 'sheet', 'url': 'https://test-cptojg6atdfe.feishu.cn/sheets/SVT0sRnhh'}

2.2利用飞书API查询某电子表格内的工作表

同上篇的方法,利用飞书API"获取工作表"来获取电子表格内的工作表关键信息

bash 复制代码
#API范例
#url = "https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/SVTnhh/sheets/query"
user_access_token="u-dYWo5tGit1Bkg4P9h0FoV"

url="https://open.feishu.cn/open-apis/sheets/v3/spreadsheets/" + sheet_token + "/sheets/query"
Authorization_value="Bearer "+user_access_token
payload = ''
headers = {'Authorization': Authorization_value}

response = requests.request("GET", url, headers=headers, data=payload)
json_Data=json.loads(response.text)
# 打印返回体信息
print(json_Data)
# 将工作表id用数组存起来
sheet_ids= [ sheet_info['sheet_id']  for sheet_info in json_Data['data']['sheets']]  
sheet_titles= [ sheet_info['title']  for sheet_info in json_Data['data']['sheets']]  
print(sheet_ids)
print(sheet_titles)

sheet_ids就获得了电子表格内的工作表id,sheet_titles则获得了电子表格内的工作表title

2.3利用飞书API查询某工作表内单元格信息

飞书服务器端API为利用接口用于根据 spreadsheetToken 和 range 读取表格单个范围的值,返回数据限制为10M

由于不支持API调试台,只能仿照其它API格式写查询字符串

python 复制代码
#API范例
# 官方API格式
#url = https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/:spreadsheetToken/values/:range
# 示例API格式
#url ='https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/shtcngNygNfuqhxTBf588jwgWbJ/values/Q7PlXT!A3:D200?valueRenderOption=ToString&dateTimeRenderOption=FormattedString' 
#headers= 'Authorization: Bearer t-ce3540c5f02ac074d64fa90fa49621c0'

user_access_token="u-dYWo5tGKmTTfL3m290w0l0Mw0FoV"
sheet0_id=sheet_ids[0]
sheet0_range="A1:B2"
url="https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/" + sheet_token + "/values/"+sheet0_id+"!"+sheet0_range+'?valueRenderOption=ToString&dateTimeRenderOption=FormattedString' 
Authorization_value="Bearer "+user_access_token
payload = ''
headers = {'Authorization': Authorization_value}

response = requests.request("GET", url, headers=headers, data=payload)
json_Data=json.loads(response.text)
# 打印返回体信息
# print(json_Data)
sheet0_values= json_Data['data']['valueRange']['values']
print(sheet0_values)

返回信息

bash 复制代码
[['A1', '测试1'], ['A2', '测试2']]

可以看到,读取成功了

2.4利用飞书API向某工作表单元格写入信息

上述读取的操作成功以后,写入应该就是类似方法,并不困难了。

下方就是写入数据的API,也不支持调试工具台,但也有参考代码。

spreadsheetToken 和 range 是必须的2个参数

下方是研究后的Python修改单元格值的代码:

python 复制代码
#API范例
# 官方API格式
#url = https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/:spreadsheetToken/values
# 示例API格式
#url = PUT 'https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/shtcnWbJ/values'
# headers= {'Authorization: Bearer t-ce3540c5f0c074530';'Content-Type: application/json'}
# valueRange={"range": "Q7PlXT!A1:B2","values": [[ "Hello", 1],[ "World", 1]]}

sheet0_modi_range=sheet0_id+"!"+"A3:B4"
#print(sheet0_modi_range)
url="https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/" + sheet_token + "/values" 
#print(url)
Authorization_value="Bearer "+user_access_token
#print(Authorization_value)
headers = {'Authorization': Authorization_value,'Content-Type':"application/json; charset=utf-8"}
pay_load = json.dumps({'valueRange':{'range': sheet0_modi_range,'values': [["Hello",11],["World",12]]}})
#print(pay_load)
response = requests.request("PUT", url, headers=headers, data=pay_load)
json_Data=json.loads(response.text)

# 打印返回体信息
print(json_Data)

返回结果

bash 复制代码
{'code': 0, 'data': {'revision': 10, 'spreadsheetToken': 'SVT0sanhh', 'updatedCells': 4, 'updatedColumns': 2, 'updatedRange': '885d89!A3:B4', 'updatedRows': 2}, 'msg': 'success'}

可以看到msg为success,修改单元格值成功

这个API是有点难度的,因为其类型不是一般的"GET"或"POST",而是"PUT"

关键点是pay_load 这个字符串不能像其它案例是空值,而是要把修改的单元格地址和值提前写进去

提前制作一个valueRange的json对象,内容为range地址,类型string和values值,类型为list

这个json对象要传入参数,还需要使用json.dumps()转为json字符串,这是最关键的一步,在此由于提前没有理解知识,

琢磨了一个小时,最后重要理解为什么参数类型错误从而修改后成功。

下图中,修改后的结果已经显示。

至此,利用python操作API获取电子表格中的工作表,修改某一单元格值已经成功。

相关推荐
一车小面包9 小时前
Transformers中从 logits 本质到问答系统中的字符定位机制
pytorch·python·深度学习
送秋三十五9 小时前
Docker 构建教程:学习上下文、架构和性能优化技术
学习·docker·架构
战族狼魂9 小时前
基于python+Java的二手车与奔驰销量数据可视化平台
java·数据库·python
Goboy9 小时前
【Python修仙笔记.3】Python函数作为秘技 - 封装你的仙法
后端·python
高洁0110 小时前
大模型-去噪扩散概率模型(DDPM)采样算法详解
python·深度学习·神经网络·transformer·知识图谱
Goboy10 小时前
【Python修仙笔记.4】数据结构法宝 - 存储你的仙器
后端·python
思成不止于此10 小时前
软考中级软件设计师备考指南(四):I/O 技术、安全与可靠性 —— 综合应用篇
网络·笔记·学习·信息安全·总线系统·i/o 技术·可靠性计算
聪明的笨猪猪10 小时前
Java Redis “核心应用” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
WTCLLB11 小时前
Acer软件下载
学习·软件保护卡