Fatsecret

Polar Sponsor
爱发电 赞助
.NET 9.0

FatSecret 营养 API 集成,支持食物搜索、营养查询、条码扫描、菜谱搜索及饮食日志记录。适用于用户需要...

FatSecret 营养 API. 完成与 FatSecret 的整合,用于食品数据查询和日记记录.

功能概述

FatSecret 营养 API. 完成与 FatSecret 的整合,用于食品数据查询和日记记录.是一项面向实际任务的技能,主要用于QQ 认证方法. 这一技能支持两种不同用途的认证方法 ca。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

核心要点

  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

FatSecret 营养 API

与 FatSecret 完整集成,支持食物数据查询及日记记录功能。

⚠️ 认证方式

本技能支持两种认证方式,适用于不同使用场景:

方式 适用场景 是否需要用户登录 能力范围
OAuth2(client_credentials) 只读访问 ❌ 否 食物搜索、条形码查询、食谱搜索
OAuth1(三段式) 完全访问权限 ✅ 是(一次性 PIN) 以上全部 + 日记记录

如何选择?

  • 仅需搜索食物? → 使用 OAuth2(更简单,无需用户登录)
  • 需向用户日记中记录食物? → 使用 OAuth1(需用户授权)

🚀 快速开始

1. 获取 API 凭据

  1. 访问 https://platform.fatsecret.com
  2. 注册一个应用
  3. 复制你的 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 [qty] [meal] 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 集成示例

⚠️ 安全说明

  1. 凭据本地存储于 ~/.config/fatsecret/ 目录中
  2. OAuth1 令牌不会过期,除非你主动撤销
  3. OAuth1 授予对 FatSecret 日记的完整访问权限(读 + 写)
  4. 安全卸载方式: 删除 ~/.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 实现

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习