为了将爬出来的数据写入到飞书的电子表格里,这里就需要用到飞书提供的api了
打开飞书工作台,右上角创建应用,来到飞书开放平台,创建自己的应用,随便设置一下应用名字和描述就行。
要给自己的应用配置一下权限
这里我懒得纠结,于是把云文档的所有权限都开了
==一定记得要发布!!!!==自己创建的飞书应用只有发布了之后这个API 才能生效
找到自己创建应用里的应用凭证就可以调用api了,返回的tat就是代表着身份的token
url= "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
#应用凭证里的 app id 和 app secret
post_data = {"app_id": "cli_**********", "app_secret": ******************}
r = requests.post(url, data=post_data)
tat = r.json()["tenant_access_token"]
url:“https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/sheet名称/请求”
“range”:"{sheet名}!{单元格范围}
这里的sheet名一定是飞书文档地址中,sheet=****,这里的名称,而不是自己给sheet命名的名称,一般是个串乱七八糟的六位字符
下面简单介绍部分常用功能
向范围之前增加相应数据的行和相应的数据
这里的输入是value,格式类似矩阵,向range里放入value中的这一个矩阵
#飞书文档的储存地址结构:https://企业地址/sheets/shtcnjGdHzBm7Qa85UXQYk9OPxh?sheet=402cb1 #一般来说sh开头为文档地址,sheet=后跟工作簿地址,这两块是代码需要引用的参数
import json
url = "https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/shtcnxuRDo9QJDBCeowEAQqUIvd/values" #写入的sh开头的文档地址,其他不变
header = {"Content-Type": "application/json", "Authorization": "Bearer " + str(tat)} #请求头
post_data = {"valueRange": {"range": "402cb1!C3:N8" ,"values": [[ "Hello", 1],[ "World", 1]]}} #在402cb1这个工作簿内的单元格C3到N8写入内容为helloworld等内容
r2 = requests.put(url, data=json.dumps(post_data), headers=header) #请求写入
print( r2.json()["msg"]) #输出来判断写入是否成功
可输入的数据类型可以参考飞书官方的开发文档
比如输入公式,官方给出的格式是
{
“type”: “formula”,
“text”: “=A1”
}
因此只需要将post_data变为
#写入公式
post_data = {"valueRange": {"range": "PSGHlz!I2:I2" ,"values": [[{"type":"formula","text":"=IFERROR((E2-E9)/E9,0)"}]]}}
==注意!==上一种插入数据实际上只是写入,只对指定范围的数据进行覆盖
想要真正的插入数据就需要先插入行列
官方请求体示例如下:
{
“dimension”:{
“sheetId”:“string”,
“majorDimension”:“ROWS”,
“startIndex”:0,
“endIndex”:0
},
“inheritStyle”:“BEFORE”
}
具体请求流程同插入数据,把url中的value
改成insert_dimension_range
不同功能的url最后一部分都不一样,具体参考[飞书开发文档(请求部分http url)](https://open.feishu.cn/document/ukTMukTMukTM/uIjMzUjLyIzM14iMyMTN)
示例:在第一行后插入一行
url = "https://open.feishu.cn/open- apis/sheets/v2/spreadsheets/shtcnl9XOiwOCVWEtjHuXKeT3zd/insert_dimension_range" #写入的sh开头的文档地址,其他不变
header = {"Content-Type": "application/json", "Authorization": "Bearer " + str(tat)} #请求头
post_data ={
"dimension":{
"sheetId":"PSGHlz",
"majorDimension":"ROWS",#可选COLUMNS
"startIndex":1,
"endIndex":2
},
"inheritStyle":"AFTER"#可选BEFORE
}
r2 = requests.post(url, data=json.dumps(post_data), headers=header) #请求写入
print( r2.json()["msg"]) #输出来判断写入是否成功
(持续更新中。。。待添加更多操作示例)