python 飞书API调用——电子表格操作

为了将爬出来的数据写入到飞书的电子表格里,这里就需要用到飞书提供的api了

Step 1 创建应用

打开飞书工作台,右上角创建应用,来到飞书开放平台,创建自己的应用,随便设置一下应用名字和描述就行。
在这里插入图片描述

Step 2 设置应用及发布

要给自己的应用配置一下权限
这里我懒得纠结,于是把云文档的所有权限都开了
在这里插入图片描述
==一定记得要发布!!!!==自己创建的飞书应用只有发布了之后这个API 才能生效

Step 3 调用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"] 

Step 4 设置飞书文件权限

将飞书的权限设成获得链接可编辑
在这里插入图片描述

Step 5 接入飞书表格

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"])  #输出来判断写入是否成功

(持续更新中。。。待添加更多操作示例)

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
【案例】 【案例】Python飞书机器⼈编辑表格 飞书机器⼈编辑表格 #!/usr/bin/env python # -*- coding: utf-8 -*- from .config import * import requests import json class Bot: def __init__(self, app): self.app = app # app为机器⼈ self.table = None # 共享⽂档的table_id self.sheet = None # 共享⽂档的sheet_id self.token = self.get_token() self.header = { "Authorization": self.token, "Content-Type": "application/json; charset=utf-8" } def get_token(self): """获取应⽤token""" url = url_api['url_token'] headers = {"Content-Type": "text/plain"} r = requests.post(url, headers=headers, json=self.app) return "Bearer " + json.loads(r.text)['tenant_access_token'] def use(self, table, sheet): self.table = table self.sheet = sheet return self def add_data(self, sheet_range="", values=[]): """增加数据,原始数据下移""" data = { "valueRange": { "range": self.sheet + sheet_range, "values": values } } r = requests.post(urls['插⼊数据'] % self.table, headers=self.header, json=data) return r.text def del_data(self, major=0, start_index=1, end_index=1): """删除数据""" data = { "dimension": { "sheetId": self.sheet, "majorDimension": ['ROWS', 'COLUMNS'][major], "startIndex": start_index, "endIndex": end_index } } r = requests.delete(urls['删除数据'] % self.table, headers=self.header, json=data) return r.text def union_cell(self, sheet_range, major=0): """合并单元格""" url = urls['合并单元格'] % self.table data = { "range": self.sheet + sheet_range, "mergeType": ['MERGE_ALL', 'MERGE_ROWS', 'MERGE_COLUMNS'][major] } r = requests.post(url, headers=self.header, json=data) return r.text def split_cell(self, sheet_range): """拆分单元格""" data = { "range": self.sheet + sheet_range } r = requests.post(urls['拆分单元格'] % self.table, headers=self.header, json=data) return r.text def set_style(self, sheet_range, kind): def set_style(self, sheet_range, kind): """设置单元格格式""" data = { "appendStyle": { "range": self.sheet + sheet_range, "style": self.style_list(kind) } } r = requests.put(urls['设置单元格格式'] % self.table, headers=self.header, json=data) return r.text def phone_to_open_id(self, mobile
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值