飞书开发学习笔记(三)-利用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获取电子表格中的工作表,修改某一单元格值已经成功。

相关推荐
索然无味io1 分钟前
跨站请求伪造之基本介绍
前端·笔记·学习·web安全·网络安全·php
kikikidult5 分钟前
Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败(已成功)>
笔记·学习
終不似少年遊*12 分钟前
美国加州房价数据分析02
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
thesky12345614 分钟前
活着就好20241225
学习·算法
胡西风_foxww15 分钟前
【es6复习笔记】集合Set(13)
前端·笔记·es6·set·集合
hnmpf18 分钟前
flask-admin modelview 中重写get_query函数
后端·python·flask
灵槐梦28 分钟前
【速成51单片机】2.点亮LED
c语言·开发语言·经验分享·笔记·单片机·51单片机
天天要nx29 分钟前
D105【python 接口自动化学习】- pytest进阶参数化用法
python·pytest
是十一月末39 分钟前
Opencv实现图片和视频的加噪、平滑处理
人工智能·python·opencv·计算机视觉·音视频
周盛欢1 小时前
云服务器yum无法解析mirrorlist.centos.org
开发语言·python