FatSecret 营养 API 集成,支持食物搜索、营养查询、条码扫描、菜谱搜索及饮食日志记录。适用于用户需要...
FatSecret 营养 API. 完成与 FatSecret 的整合,用于食品数据查询和日记记录.
功能概述
FatSecret 营养 API. 完成与 FatSecret 的整合,用于食品数据查询和日记记录.是一项面向实际任务的技能,主要用于QQ 认证方法. 这一技能支持两种不同用途的认证方法 ca。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
FatSecret 营养 API
与 FatSecret 完整集成,支持食物数据查询及日记记录功能。
⚠️ 认证方式
本技能支持两种认证方式,适用于不同使用场景:
| 方式 | 适用场景 | 是否需要用户登录 | 能力范围 |
|---|---|---|---|
| OAuth2(client_credentials) | 只读访问 | ❌ 否 | 食物搜索、条形码查询、食谱搜索 |
| OAuth1(三段式) | 完全访问权限 | ✅ 是(一次性 PIN) | 以上全部 + 日记记录 |
如何选择?
- 仅需搜索食物? → 使用 OAuth2(更简单,无需用户登录)
- 需向用户日记中记录食物? → 使用 OAuth1(需用户授权)
🚀 快速开始
1. 获取 API 凭据
- 访问 https://platform.fatsecret.com
- 注册一个应用
- 复制你的 Consumer Key 和 Consumer Secret
2. 保存凭据
mkdir -p ~/.config/fatsecret
cat > ~/.config/fatsecret/config.json << EOF
{
"consumer_key": "YOUR_CONSUMER_KEY",
"consumer_secret": "YOUR_CONSUMER_SECRET"
}
EOF
3. 安装依赖
cd /path/to/fatsecret-skill python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
4a. 只读模式(OAuth2)——无需用户登录
# 搜索功能立即可用 ./scripts/fatsecret-cli.sh search "chicken breast"
4b. 日记记录模式(OAuth1)——一次性用户授权
# 运行认证流程 ./scripts/fatsecret-cli.sh auth # 按提示操作: # 1. 访问授权 URL # 2. 使用 FatSecret 账户登录 # 3. 授权该应用 # 4. 输入显示的 PIN 码 # 此后即可记录食物 ./scripts/fatsecret-cli.sh quick egg 3 Breakfast
📋 CLI 命令
| 命令 | 所需认证 | 说明 |
|---|---|---|
search |
OAuth2 | 搜索食物 |
barcode |
OAuth2 | 条形码查询 |
recipes |
OAuth2 | 搜索食谱 |
auth |
- | 运行 OAuth1 认证流程 |
log |
OAuth1 | 向日记添加食物(交互式) |
quick |
OAuth1 | 快速记录至日记 |
🤖 Agent 集成
适用于 OpenClaw Agents
from scripts.fatsecret_agent_helper import (
get_authentication_flow,
complete_authentication_flow,
save_user_credentials
)
# 检查认证状态
state = get_authentication_flow()
if state["status"] == "need_credentials":
# 提示用户输入 Consumer Key / Secret
# 使用 save_user_credentials(key, secret) 保存
pass
elif state["status"] == "need_authorization":
# 向用户展示授权 URL
url = state["authorization_url"]
# 用户访问该 URL,完成授权并获取 PIN
# 使用 complete_authentication_flow(pin) 完成认证
pass
elif state["status"] == "already_authenticated":
# 可直接调用日记相关功能
from scripts.fatsecret_diary_simple import quick_log
quick_log("egg", quantity=3, meal="Breakfast")
Agent 辅助函数
| 函数 | 说明 |
|---|---|
get_authentication_flow() |
检查认证状态,返回下一步操作 |
save_user_credentials(key, secret) |
保存 API 凭据 |
complete_authentication_flow(pin) |
使用 PIN 完成 OAuth1 认证 |
quick_log(food, qty, meal) |
向日记中记录食物 |
log_food(food_id, serving_id, grams_or_ml, meal, name) |
精确记录(指定份量单位) |
search_food(query, tokens) |
搜索食物 |
⚠️ 重要提示:grams_or_ml 参数说明
grams_or_ml 参数(FatSecret API 中称为 number_of_units)表示实际重量或体积值,而非倍数!
# ❌ 错误 —— 此处仅记录了 1.56 克(7 kcal)! log_food(food_id, serving_100g_id, 1.56, "Breakfast", "Cookies") # ✅ 正确 —— 此处记录了 156 克(741 kcal) log_food(food_id, serving_100g_id, 156, "Breakfast", "Cookies")
示例:
| 你希望记录的内容 | 份量类型 | grams_or_ml 值 |
|---|---|---|
| 156 克曲奇饼干 | "100g" 份量 | 156 |
| 200 毫升牛奶 | "100ml" 份量 | 200 |
| 3 个鸡蛋 | "1 large egg" 份量 | 3 |
| 2 片面包 | "1 slice" 份量 | 2 |
🔐 凭据存储
所有凭据和令牌均本地存储:
| 文件 | 内容 | 创建者 |
|---|---|---|
$CONFIG_DIR/config.json |
Consumer Key / Secret | 用户(手动) |
$CONFIG_DIR/oauth1_access_tokens.json |
OAuth1 访问令牌 | auth 命令 |
$CONFIG_DIR/token.json |
OAuth2 令牌(自动刷新) | OAuth2 客户端 |
其中 $CONFIG_DIR 默认为 ~/.config/fatsecret;若设置了环境变量 FATSECRET_CONFIG_DIR,则以该值为准。
撤销访问权限方法: 删除配置目录,并在 FatSecret 账户设置中撤销该应用的访问权限。
🐳 容器 / Docker 环境
在容器化环境(Docker、OpenClaw sandbox)中,~/.config/ 目录可能无法在重启后持久保留。请使用 FATSECRET_CONFIG_DIR 指向一个持久化卷:
# 设置环境变量指向持久化目录 export FATSECRET_CONFIG_DIR="/home/node/clawd/config/fatsecret" # 或在命令前加前缀 FATSECRET_CONFIG_DIR="/persistent/path" ./scripts/fatsecret-cli.sh auth
OpenClaw 示例 —— 添加到 shell 初始化脚本或 AGENTS.md 中:
export FATSECRET_CONFIG_DIR="/home/node/clawd/config/fatsecret"
🌐 代理配置(可选)
部分 FatSecret API 套餐要求 IP 白名单。如需使用代理,请配置如下:
# 环境变量方式
export FATSECRET_PROXY="socks5://127.0.0.1:1080"
# 或在 config.json 中配置
{
"consumer_key": "...",
"consumer_secret": "...",
"proxy": "socks5://127.0.0.1:1080"
}
若无需代理: 本技能可在无代理情况下正常运行。仅当 FatSecret 封禁了你的 IP 时才需要配置代理。
🌍 Open Food Facts(替代方案)
针对欧洲地区商品,可使用免费的 Open Food Facts API(无需认证):
from scripts.openfoodfacts_client import OpenFoodFactsClient
off = OpenFoodFactsClient(country="it")
products = off.search("barilla")
product = off.get_product("8076800105735") # 条形码
📁 文件结构
fatsecret/
├── SKILL.md # 本文档
├── README.md # GitHub / ClawHub 项目说明
├── requirements.txt # Python 依赖:requests、requests[socks]
├── scripts/
│ ├── fatsecret-cli.sh # 主 CLI 脚本(bash 包装器)
│ ├── fatsecret_auth.py # OAuth1 三段式认证
│ ├── fatsecret_agent_helper.py # Agent 辅助函数
│ ├── fatsecret_diary_simple.py # 日记记录(OAuth1)
│ ├── fatsecret_client.py # OAuth2 客户端(只读)
│ └── openfoodfacts_client.py # Open Food Facts 客户端
└── examples/
└── agent_usage_example.py # Agent 集成示例
⚠️ 安全说明
- 凭据本地存储于
~/.config/fatsecret/目录中 - OAuth1 令牌不会过期,除非你主动撤销
- OAuth1 授予对 FatSecret 日记的完整访问权限(读 + 写)
- 安全卸载方式: 删除
~/.config/fatsecret/并在 FatSecret 账户设置中撤销该应用权限
🔗 参考资料
- FatSecret API 文档:https://platform.fatsecret.com/docs
- OAuth1 指南:https://platform.fatsecret.com/docs/guides/authentication/oauth1/three-legged
- Open Food Facts API:https://wiki.openfoodfacts.org/API
更新日志
v1.0.1(2026-02-20)
- 修复 OAuth2 客户端 —— 当前统一使用 OAuth1 处理全部操作(包括食物搜索与日记记录)
- 统一认证流程:单一 OAuth1 流程同时支持读取与写入操作
- 移除已失效的 OAuth2 实现
热门AI工具
相关专题
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.6万人学习
共6课时 | 54.7万人学习
最新文章