install
source · Clone the upstream repo
git clone https://github.com/wulaosiji/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/wulaosiji/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/feishu-wiki-orchestrator/feishu-md-parser" ~/.claude/skills/wulaosiji-skills-feishu-md-parser-7df217 && rm -rf "$T"
manifest:
feishu-wiki-orchestrator/feishu-md-parser/SKILL.mdsource content
Markdown 解析子技能
职责
将 Markdown 文件解析为飞书文档块格式,输出 JSON 文件。
输入
- Markdown 文件路径(命令行参数或配置文件)
输出
- 解析后的块数据output/blocks.json
- 解析元数据(块数量、表格数量等)output/metadata.json
工作流程
第一步:读取 Markdown 文件
从指定路径读取 Markdown 文件内容。
第二步:解析 Markdown 内容
- 解析标题(# - ######)
- 解析列表(无序、有序)
- 解析表格
- 解析代码块
- 解析引用块
- 解析粗体/斜体
- 解析分割线
第三步:清理内容
- 移除零宽字符(\u200b, \u200c, \u200d, \ufeff)
- 清理表格单元格内容
- 处理粗体标记
第四步:输出 JSON 文件
将解析结果保存到
output/blocks.json。
数据格式
blocks.json 格式
{ "blocks": [ { "block_type": 2, "text": { "elements": [{"text_run": {"content": "文本内容"}}], "style": {} } }, { "block_type": 31, "table": { "property": { "row_size": 3, "column_size": 2, "header_row": true }, "data": [ ["标题1", "标题2"], ["数据1", "数据2"], ["数据3", "数据4"] ] } } ], "metadata": { "total_blocks": 50, "table_count": 5, "heading_count": 10 } }
使用方式
命令行
python scripts/md_parser.py input.md output/blocks.json
作为子技能被调用
# 主技能只传递文件路径 result = call_skill("feishu-md-parser", { "input_file": "path/to/markdown.md", "output_dir": "workflow/step1_parse" }) # 返回: {"blocks_file": "workflow/step1_parse/blocks.json"}
与其他技能的协作
- 输出给
和feishu-doc-creatorfeishu-block-adder - 只传递文件路径,不传递内容
⚠️ 重要:Callout 块的特殊处理
问题说明
Callout(高亮块)的颜色字段必须直接放在
callout 对象下,不能嵌套在 style 中。
正确格式
{ "block_type": 19, "callout": { "elements": [{"text_run": {"content": "警告信息"}}], "emoji_id": "warning", // 直接在 callout 下 "background_color": 1, // 直接在 callout 下 "border_color": 1, // 直接在 callout 下 "text_color": 1 // 直接在 callout 下 } }
错误格式(不要使用)
{ "block_type": 19, "callout": { "elements": [{"text_run": {"content": "警告信息"}}], "style": { // ❌ 错误:不要嵌套在 style 中 "emoji_id": "warning", "background_color": 1, "border_color": 1 } } }
代码实现
在
md_parser.py 第 150-189 行使用 Python 展开操作符:
blocks.append({ "block_type": 19, "callout": { "elements": [{"text_run": {"content": callout_text}}], **style # 使用展开操作符,将样式字段直接展开到 callout 下 } })
验证方法
如果 API 返回的 callout 只有
emoji_id 而没有颜色字段,说明格式错误。详见 TROUBLESHOOTING.md。