Files
John Qiu 712063071c refactor: 通用技能按类别拆分为独立目录
skills/ → skills-dev(9), skills-req(10), skills-ops(4),
skills-integration(8), skills-biz(4), skills-workflow(7)

generate-marketplace.py 改为自动扫描所有 skills-* 目录。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:31:58 +10:30

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"], {"状态": "已完成"})
```