# @crvouga/mockingbird-service-edamam 中文文档

规范地址：https://npmcn.com/package/%40crvouga/mockingbird-service-edamam/

版本：3\.11\.0
npm 元数据更新时间：2026-11-11T02:08:36.785Z
中文译文更新时间：2026-11-11T06:30:21.061Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crvouga/mockingbird-service-edamam
原文对照：https://npmcn.com/package/%40crvouga/mockingbird-service-edamam/?lang=original
项目主页：https://github.com/crvouga/mockingbird/tree/main/packages/service/edamam#readme
源码仓库：https://github.com/crvouga/mockingbird

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.5 MB，18 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-09-22T23:53:42.339Z
- 最新版本发布：2026-11-11T02:08:36.159Z
- 近 30 天下载量：2876（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：41（近 12 个月 41 个）

## 中文简介

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

## 安装

```sh
npm install @crvouga/mockingbird-service-edamam
```

也可以使用：`pnpm add @crvouga/mockingbird-service-edamam`、`yarn add @crvouga/mockingbird-service-edamam`、`bun add @crvouga/mockingbird-service-edamam`

## README

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

> 本地模拟器。 真正的API合同. 部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

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

-   行动范围: [支助](https://github.com/crvouga/mockingbird/blob/main/packages/service/edamam/SUPPORT.md)
-   合同`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`。 。 。 .

## 安装

```bash
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` 永远不要叫出来.

```bash
npx mockingbird-edamam serve --port 8824
```

```ts
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/parser` | `ingr` 分为领先数量("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/v2` | `type` 需要; `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. |

部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

## 常见问题

### @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 和提交记录判断。

