@crvouga/mockingbird-service-edamam

中文文档
3.11.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 2876

Edamam API的模拟者称:食品数据库分析、营养成分和图像分析、营养分析、食谱搜索v2、餐具选择和购物清单.

中文使用文档
文档目录7 节
  1. 安装
  2. 使用量
  3. 路线
  4. 管理员(超过标准合同)
  5. 命名空间
  6. 故意不模拟
  7. API 密码

@crvouga/mockingbird-service-edamm (中文(简体) )

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

国家模拟器 爱德玛 API 我们的应用程序呼叫, 从内置食物和食谱回答 体格:食物数据库v2分解器(文字和刚果爱国者联盟)、营养和图像识别、营养 分析(nutrition-data, (中文(简体) ), nutrition-details), Recipe Search v2(使用过滤器和 _cont 呼叫,由URI,由id, 餐饮计划员v1 select,和购物列表 v2. 营养 记录、条码扫描、照片记录、食谱搜索、膳食计划和杂货清单,然后进入 测试没有 Edamam 键、配额或网络.

  • 行动范围: 支助
  • 合同openapi.yaml由Edamam的 API Docs和我们的消费者亲笔撰写: metrics/adapters/outbound/edamam-nutrition.adapter.ts, (中文(简体) ), meal-planning/adapters/outbound/edamam-meal-planning.adapter.ts,和 Python 聊天 服务 tools/nutrition/client.py。 。 。 .

安装

npm install -D @crvouga/mockingbird-service-edamam

仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务 npx mockingbird-edamam serve, (中文(简体) ), createServer 从 ./server (节点),或 createRuntime 与 任何获取服务器.

使用量

两个后端适配器硬码 https://api.edamam.com (封口:用于 EDAMAM_BASE_URL 编号 : EDAMAM_MEAL_BASE_URL还有Python客户端 EDAMAM_BASE_URL) (中文(简体) ). 钥匙可以是 任何数值 (EDAMAM_FOOD_APP_ID/KEY 或者说 EDAMAM_APP_ID/KEY, (中文(简体) ), EDAMAM_MEAL_APP_ID/KEY,Python语 客户端 edamam_* 设置);没有它们,我们的适配器报告 unavailable 永远不要叫出来.

npx mockingbird-edamam serve --port 8824
import { createServer } from "@crvouga/mockingbird-service-edamam/server"

// Test setup: the emulator. The application gets EDAMAM_BASE_URL = server.url.
const server = await createServer()
const baseUrl = server.url

// Application code: the Food Database request it sends to api.edamam.com.
const query = new URLSearchParams({
  app_id: "a",
  app_key: "k",
  ingr: "2 large eggs",
  "nutrition-type": "logging",
})
const response = await fetch(`${baseUrl}/api/food-database/v2/parser?${query}`)
const parsed = await response.json()
// → {text, parsed: [{food: {foodId: "food_egg", label: "Egg", nutrients: {ENERC_KCAL: 143, …}},
//     quantity: 2, measure: {uri: "…#Measure_large", label: "Large", weight: 50}}], hints: […]}
await server.close()

路线

每个电话都要接 app_id 财务报告和审定财务报表 app_key 作为查询参数(餐具和购物列表) 还接受 Authorization: Basic app_id:app_key我们的适配器发送.

路线行为
GET /api/food-database/v2/parseringr 分为领先数量("2","1/2","a","2"),是衡量食物("cup","大","slice","g","oz")和最相配的食物− parsed[]每个食物都分享一个字 hints[] 与 measures。过滤器 : categoryLabel (单位:千美元)food 减了饭吃, category, (中文(简体) ), health (可重复), calories (每100克), nutrients[CODE] (每100克,见下文). upc 查一包食品(不为人知的刚果爱国者联盟404).
POST /api/food-database/v2/nutrients{ingredients: [{quantity, measureURI, foodId}]} → calories, (中文(简体) ), totalWeight, (中文(简体) ), totalNutrients, (中文(简体) ), totalDaily, (中文(简体) ), dietLabels, (中文(简体) ), healthLabels, (中文(简体) ), ingredients[].parsed[];未知的食物或计量为422.
POST /api/food-database/nutrients-from-image?beta=true{image: data URL or http URL} → {parsed: {food, quantity, measure}, recipe: {label, calories, totalNutrients}},确定每个图像(或用 PUT /__admin/vision) (中文(简体) ).
GET /api/nutrition-data?ingr=1个成份线;不可分解为422个.
POST /api/nutrition-details{ingr: [...], title?, yield?};无行为422,任何不可通解的行为555.
GET /api/recipes/v2type 需要; q, (中文(简体) ), health, (中文(简体) ), diet, (中文(简体) ), mealType, (中文(简体) ), dishType, (中文(简体) ), cuisineType, (中文(简体) ), excluded (可重复), calories 财务报告和审定财务报表 nutrients[CODE] 按服务人数计算, time, (中文(简体) ), random, (中文(简体) ), imageSize每页20; _links.next.href 携带 _cont。 。 。 .
GET /api/recipes/v2/by-uri不超过20岁 uri 参数; 未知的URI被跳过.
GET /api/recipes/v2/{id}一种食谱(即 _links.self 目标.
POST /api/meal-planner/v1/{app_id}/select{size, plan: {accept, fit, exclude, sections: {Breakfast: {…}, …}}} → {status: OK | INCOMPLETE, selection: [{sections: {<name>: {assigned, _links}}}]}每个部分都有一个满足它和计划的配方 accept 上游数(health, (中文(简体) ), meal, (中文(简体) ), dish它的每个服务 fit,以及 exclude; 无法填充的部分没有 assigned 状态为 INCOMPLETE没有章节的计划是400.
POST /api/shopping-list/v2{entries: [{quantity, measure?: Measure_serving, item: recipe uri}]} · 以克计的每种食物总成份(克)Measure_serving 以食谱的产量衡量; ?shopping-cart=true&beta=true 添加 _links.shopping-cart。 。 。 .

错误:食物数据库和营养分析答案 {status: "error", error, message}· ; 食谱搜索、餐饮规划和购物清单答案 [{errorCode, message, params}]。 。 。 .

企业 (单位:千美元)DEFAULT_FOODS, (中文(简体) ), DEFAULT_RECIPES:每100克养分和计量量的18种食物 (包括一顿饭,与刚果爱国者联盟的两件包装产品) 850000000012 财务报告和审定财务报表 850000000036一个 刚果爱国者联盟 850000000029 没有营养数据)和8个食谱 从它们,所以食谱总数, 每个服务价值和购物清单与食品数据库一致.

管理员(超过标准合同)

路线效果
GET 编号 : POST /__admin/foods列出食物,或添加({foodId, label, nutrients, measures: [{uri, label, weight}], upc?, brand?, category?, categoryLabel?, healthLabels?}) (中文(简体) ).
GET 编号 : POST /__admin/recipes列出食谱,或增加一种({id, label, yield, ingredients: [{foodId, quantity, measure, text}], mealType?, dishType?, cuisineType?, dietLabels?, healthLabels?, cautions?, totalTime?}) (中文(简体) ).
PUT /__admin/vision{foodId, quantity?, measure?} 标出图像识别返回的内容; {notFound: true} 不承认什么; null 恢复默认值.
GET/PUT /__admin/settings{apps?: [{appId, appKey}], requireAccountUser?}。 。 。 .

错误预设( E)POST /__admin/faults {"preset": "<name>", "count"?: n}: rate_limited (429个), payment_required (402), (中文(简体) ), unauthorized (401个), server_error (500个), parser_schema_drift, (中文(简体) ), recipe_quality (555), (中文(简体) ), vision_not_found, (中文(简体) ), meal_plan_incomplete, (中文(简体) ), meal_plan_timeout, (中文(简体) ), slow (12s,过去10秒), connection_drop。 。 。 .

命名空间

x-mockingbird-namespace页:1 /__admin/ns/<name> 基准 URL 前缀( 营养适配器的工作) 和连接路径的 Python 客户端; 适餐器用 new URL(endpoint, base),将前缀删除,或者通过应用程序 id: PUT /__admin/credentials {"credentials": {"<app_id>": "<namespace>"}}。 。 。 .

故意不模拟

  • Edamam的NLP和数据库:解析器理解领先数量、已知计量和 食品名称;真实的食物和食谱内容需要记录.
  • 解析器 nutrients[CODE] 是一个 最好猜,不是甲骨文验证 (供应商只说 食物数据库可以"通过给定的营养量来搜索食物";查询语法, a的错误 变形范围以及任何计划限制都从未被观察到现场直播). 模拟器读取 nutrients[PROCNT]=20+, (中文(简体) ), =5 (最多)和 =5-15 (包括)像 calories,反对 每100克粮食 nutrients,还有生的 + 解码到一个空间 仍然意味着"或更多". 几个代码,一个重复代码和 health 编号 : calories 编号 : category 编号 : categoryLabel 所有人必须 抓取; 无匹配 200 与 hints: [] 财务报告和审定财务报表 parsed: []。无价值的食物 代码不匹配 。 任何像养分代码形状的代码都被接受,但内置体 只携带 ENERC_KCAL, (中文(简体) ), PROCNT, (中文(简体) ), FAT, (中文(简体) ), CHOCDF, (中文(简体) ), FIBTG 财务报告和审定财务报表 SUGAR,因此代码,例如 NA 或者说 FE 只匹配种子食物 POST /__admin/foods 载人而行者, 而不是供应商的答复)。 区域或代码不正确 400 bad_request编辑 upc 搜索忽略 过滤器( 用于) calories。 。 。 .
  • 食品数据库自动完成、品牌搜索和 nutrients 修饰符; Recipe 搜索用户 食谱(type=user, (中文(简体) ), field= 投影和除URL以外的图像.
  • 餐饮计划 fit 除了日间卡片检查, mark 重量,筑巢 子节,以及购物卡的取出页面.

API 密码

导出仁爱说明
EdamamAPI类进程模拟器 : fetch(request), (中文(简体) ), reset(), (中文(简体) ), addFood(food), (中文(简体) ), addRecipe(seed), (中文(简体) ), recipes()选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), foods, (中文(简体) ), recipes, (中文(简体) ), settings。 。 。 .
createRuntime函数全面服务合同的仿真器(保健、管理员、命名空间、证书、预设)。 选项 : foods, (中文(简体) ), recipes, (中文(简体) ), settings, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog, (中文(简体) ), sqlite。 。 。 .
EDAMAM_PRESETS对象每个命名的断层预设.
EDAMAM_NAMESPACE字符串服务名称, "edamam"。 。 。 .
ACCOUNT_USER_HEADER字符串edamam-account-user。 。 。 .
DEFAULT_FOODS, (中文(简体) ), DEFAULT_RECIPES数组内生之体.
MEASURE_URI, (中文(简体) ), RECIPE_URI, (中文(简体) ), NUTRIENTS数值Edamam的计量和配方URI前缀,以及营养素代码服务.
buildRecipe函数食谱中从种子和食物体中取出食谱V2形状.
parseLine函数成分线解析器.
perServing函数一个食谱的每个服务值 一个营养编码.
appIdCredential函数这个 app_id 请求包含( 如何绘制命名空间的证书映射) .
foodError, (中文(简体) ), recipeErrors函数构建每个 API 家族的错误响应 .
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds数值OpenAPI合同及其操作代号.
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT (单位:千美元)./server(中文(简体) )节点服务过来 node:http; 数据 serve CLI目标(--app, (中文(简体) ), --require-account-user; 港号8824.

部分 嘲笑鸟。 。 。 .

版本与发布记录

@crvouga/mockingbird-service-edamam 共发布 41 个版本,首次发布于 2026/09/23;过去 12 个月发布了 41 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.11.0latest2026/11/11今天
3.10.82026/11/038 天前
3.10.72026/11/038 天前
3.10.62026/11/038 天前
3.10.52026/11/038 天前
3.10.42026/11/038 天前

关于 @crvouga/mockingbird-service-edamam 的常见问题

@crvouga/mockingbird-service-edamam 是什么?

Edamam API的模拟者称:食品数据库分析、营养成分和图像分析、营养分析、食谱搜索v2、餐具选择和购物清单.

如何安装 @crvouga/mockingbird-service-edamam?

在项目目录运行 npm install @crvouga/mockingbird-service-edamam,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-edamam,可以用 npx mockingbird-edamam 直接运行。

@crvouga/mockingbird-service-edamam 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crvouga/mockingbird-service-edamam 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crvouga/mockingbird-service-edamam 可以商用吗?

@crvouga/mockingbird-service-edamam 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-edamam 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-edamam 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,876 次,日均约 96 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-edamam 还在维护吗?

最新版本 3.11.0 发布于 2026/11/11(今天);至今共发布 41 个版本,其中过去 12 个月发布了 41 个;首次发布于 2026/09/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。