131 lines
3.2 KiB
Markdown
131 lines
3.2 KiB
Markdown
---
|
|
name: feishu-bitable
|
|
description: 飞书多维表格操作。用于记录增删改查、批量操作、筛选排序、数据同步。当需要操作飞书多维表格时使用。
|
|
---
|
|
|
|
# 飞书多维表格 (Bitable)
|
|
|
|
## URL 结构
|
|
|
|
```
|
|
https://xxx.feishu.cn/base/BascXXX?table=tblXXX&view=vewXXX
|
|
└── app_token └── table_id
|
|
```
|
|
|
|
## 核心操作
|
|
|
|
### 列出记录
|
|
|
|
```python
|
|
def list_records(app_token, table_id, filter_str=None, page_size=100):
|
|
url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records"
|
|
params = {"page_size": page_size}
|
|
if filter_str:
|
|
params["filter"] = filter_str
|
|
response = requests.get(url, headers=headers, params=params)
|
|
return response.json()["data"]["items"]
|
|
```
|
|
|
|
### 创建记录
|
|
|
|
```python
|
|
def create_record(app_token, table_id, fields):
|
|
url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records"
|
|
response = requests.post(url, headers=headers, json={"fields": fields})
|
|
return response.json()["data"]["record"]
|
|
|
|
# 示例
|
|
create_record("BascXXX", "tblXXX", {"任务名称": "完成开发", "状态": "进行中"})
|
|
```
|
|
|
|
### 批量创建 (最多 500 条)
|
|
|
|
```python
|
|
url = f".../records/batch_create"
|
|
requests.post(url, headers=headers, json={"records": [{"fields": {...}}, ...]})
|
|
```
|
|
|
|
### 更新记录
|
|
|
|
```python
|
|
def update_record(app_token, table_id, record_id, fields):
|
|
url = f".../records/{record_id}"
|
|
response = requests.put(url, headers=headers, json={"fields": fields})
|
|
return response.json()["data"]["record"]
|
|
```
|
|
|
|
### 删除记录
|
|
|
|
```python
|
|
def delete_record(app_token, table_id, record_id):
|
|
url = f".../records/{record_id}"
|
|
return requests.delete(url, headers=headers).json()
|
|
```
|
|
|
|
## 筛选条件
|
|
|
|
```python
|
|
# 等于
|
|
'CurrentValue.[状态]="进行中"'
|
|
|
|
# 包含
|
|
'CurrentValue.[标题].contains("任务")'
|
|
|
|
# 大于(数字/日期)
|
|
'CurrentValue.[优先级]>2'
|
|
|
|
# 组合
|
|
'AND(CurrentValue.[状态]="进行中", CurrentValue.[优先级]>2)'
|
|
'OR(CurrentValue.[状态]="完成", CurrentValue.[状态]="归档")'
|
|
|
|
# 空值
|
|
'CurrentValue.[截止日期]=BLANK()'
|
|
```
|
|
|
|
## 排序
|
|
|
|
```python
|
|
params = {
|
|
"sort": '[{"field_name":"优先级","desc":true}]'
|
|
}
|
|
```
|
|
|
|
## 字段类型
|
|
|
|
| 类型 | 值格式 |
|
|
|------|--------|
|
|
| 文本 | `"字符串"` |
|
|
| 数字 | `123` |
|
|
| 单选 | `"选项值"` |
|
|
| 多选 | `["选项1", "选项2"]` |
|
|
| 日期 | `1706400000000` (毫秒时间戳) |
|
|
| 人员 | `[{"id": "ou_xxx"}]` |
|
|
| 复选框 | `true/false` |
|
|
| 链接 | `{"link": "https://...", "text": "显示文本"}` |
|
|
|
|
## 完整工具类
|
|
|
|
见 `~/.claude/skills/feishu/feishu_bitable.py`
|
|
|
|
```python
|
|
from feishu_bitable import FeishuBitable
|
|
|
|
bitable = FeishuBitable()
|
|
records = bitable.list_records("BascXXX", "tblXXX")
|
|
bitable.create_record("BascXXX", "tblXXX", {"名称": "测试"})
|
|
bitable.batch_create("BascXXX", "tblXXX", [{"名称": "1"}, {"名称": "2"}])
|
|
```
|
|
|
|
## 常见场景
|
|
|
|
```python
|
|
# 获取待处理任务
|
|
tasks = bitable.list_records("BascXXX", "tblXXX",
|
|
filter_str='CurrentValue.[状态]="待处理"')
|
|
|
|
# 批量更新状态
|
|
for task in tasks:
|
|
bitable.update_record("BascXXX", "tblXXX",
|
|
task["record_id"], {"状态": "已完成"})
|
|
```
|