转换食谱
概述
将现有食谱转换为 Cooklang 格式,来源包括:
- URL - 使用 CookCLI 从食谱网站导入
- 纯文本 - 手动解析粘贴的食谱
- 其他格式 - JSON、YAML、Markdown 食谱
使用此技能的场景:
- 将食谱从网站保存下来
- 将手写食谱数字化
- 从其他食谱格式转换
流程
第一步:识别来源
询问:“您想转换什么?”
- URL - 要导入的网站链接
- 粘贴的文本 - 从别处复制的食谱
- 文件 - 现有其他格式的文件
第二步:导入或解析
对于 URL(使用 CookCLI):
cook import "https://example.com/recipe"
如果 CookCLI 导入失败(不支持的网站),回退到手动转换。
对于粘贴的文本或不支持的网站:
- 提取标题
- 识别份量/产出
- 解析食材列表(查找数量、单位)
- 将说明分解为步骤
- 记录提到的烹饪时间
- 识别所需设备
第三步:生成 Cooklang
创建格式正确的 .cook 文件:
- 元数据 - 包含提取信息的 YAML 前置元数据
- 食材 - 使用
@标记并带有正确的数量格式 - 厨具 - 使用
#标记设备 - 计时器 - 提取时间并用
~标记 - 步骤 - 每个步骤一个段落
第四步:填补空缺
提示缺失信息:
- “食谱没有指定份量。这是多少人份?”
- “没有提到烹饪时间。大约需要多长时间?”
第五步:审阅和保存
展示转换后的食谱并询问:
- “这个转换看起来准确吗?”
- “我应该把它保存到哪里?”
示例
用户: “转换 https://example.com/banana-bread”
执行:
cook import "https://example.com/banana-bread"
如果成功,输出保存。如果不成功,进行手动转换:
用户: “转换这个食谱: 香蕉面包 1 条 3 根熟香蕉,1/3 杯融化黄油,3/4 杯糖,1 个鸡蛋,1 茶匙香草精,1 茶匙小苏打,一小撮盐,1.5 杯面粉 预热烤箱至 350°F。将香蕉捣碎,加入黄油、糖、鸡蛋、香草精混合。加入干性材料。倒入面包模具。烘烤 60 分钟。”
生成的:
---
title: 香蕉面包
servings: 8
time: 1 小时 15 分钟
prep time: 15 分钟
cook time: 60 分钟
source: (添加原始来源(如果已知))
tags: [烘焙, 早餐, 甜点]
calories: 280 kcal
carbohydrates: 52 g
protein: 4 g
fat: 7 g
fiber: 2 g
---
将 #烤箱{} 预热至 350°F。
在 #大搅拌碗{} 中,将 @熟香蕉{3} 捣碎至顺滑。
加入 @融化黄油{1/3%杯}、@糖{3/4%杯}、@鸡蛋{1} 和 @香草精{1%茶匙} 混合。
加入 @小苏打{1%茶匙}、@盐{1%小撮} 和 @通用面粉{1.5%杯}。搅拌至刚好混合。
将面糊倒入抹油的 #面包模具{} 中。
烘烤 ~烤箱{60%分钟},或直到插入中心的牙签干净取出。
切片前冷却。
参考
CookCLI 导入
# 基本导入
cook import "https://example.com/recipe"
# 使用特定名称保存
cook import "https://example.com/recipe" -o "我的食谱.cook"
支持的网站: CookCLI 使用 recipe-scrapers 库。大多数主流食谱网站都可以。如果导入失败,请使用手动转换。
手动转换模式
要识别的食材模式:
- “3 个大鸡蛋” →
@大鸡蛋{3} - “1 杯面粉” →
@面粉{1%杯} - “盐适量” →
@盐 - “2-3 瓣大蒜” →
@大蒜{2-3%瓣} - “1/2 茶匙香草精” →
@香草精{1/2%茶匙}
时间模式:
- “烘烤 30 分钟” →
~烤箱{30%分钟} - “焖煮 1 小时” →
~{1%小时} - “静置 10-15 分钟” →
~{10-15%分钟}
设备模式:
- “大碗” →
#大搅拌碗{} - “9x13 模具” →
#9x13 烤盘{} - “在煎锅中” →
#煎锅{}
元数据提取
查找这些常见字段:
- 标题: 食谱名称,通常是标题
- 份量: “4 人份”、“做 12 个”、“产出 2 杯”
- 时间: “总时间:45 分钟”、“准备时间 15 分钟,烹饪时间 30 分钟”
- 来源: 原始 URL 或“改编自...”
- 作者: 食谱创作者(如果署名)
营养价值(每份)— 如果存在则始终提取:
calories— kcalcarbohydrates— g(碳水化合物)protein— g(蛋白质)fat— g(脂肪)fiber— g(膳食纤维)sugar— g(糖)saturated_fat— g(饱和脂肪酸)sodium— mg(钠/盐)
对于通过 JS 渲染营养信息的网站(例如 lidl-kochen.de),始终获取 /print/ URL 变体 — 它会返回包含所有值的静态 PDF。
Cooklang 语法提醒
- 使用
---的 YAML 前置元数据(绝不能使用>>) - 多词食材:
@研磨黑胡椒粉{} - 带单位的数量:
{500%g}而不是{500g} - 步骤之间用空行分隔