Edamam API 教學:輕鬆掌握食物分析的技巧。分別用 python 及 nodeJs 作範例。

Molly M
9 min readFeb 2, 2023

--

發現竟然沒有任何中文使用者寫 Edamam API 的教學或介紹文章,於是這篇誕生。🎉🎉🎉

(標題風格有點不一樣是因為,chatgpt 告訴我這樣下標題會比較吸引人(真的嗎( •́ω•̩̥̀ ))

Edamam API

Edamam API 是一個強大的食物分析工具,它可以提供食物的詳細營養成分,包括卡路里、蛋白質、脂肪、碳水化合物、纖維等。這對於健身、養生、營養師、食物開發者等等都非常有用。

API 可以透過給定食物名稱、食材或食譜來得到相關資訊,例如:計算飲食營養攝入和營養值等。它也可以被用於開發飲食健康和營養應用程式,以幫助用戶了解飲食資訊,並管理健康和營養狀態。

本文將介紹如何使用 Edamam API,分別以 python 和 nodeJs 為例,教學如何使用這個 API。

✨ 使用方式 / 串接 API

step 1:到官方網站點 SignUp,輸入基本資料註冊帳號,申請 Edamam API 的 key,串接 API 都需要使用這組金鑰及個人 ID。(本篇以 Food Database API 為例)

然後進到帳號的 dashboard,可以看到已申請的 API,還沒申請就點右側的 Create Applications

在這裡點 View,就可以看到 Application ID 及 Application Keys。

step 2:我們來看看文檔,確認一下 API 請求格式,以及進行請求的步驟和需要的參數。

涵蓋的運用很廣,包含按照關鍵字或食物名稱搜尋食物、獲取特定食物的營養成分,包括:宏觀和微量營養素、過敏原標籤、生活方式和健康標籤、按給定營養量搜索 28 種營養素的食物、搜索特定品牌內的食品等。

Food 這隻 API 有二個步驟,第一步是解析然後第二步營養成分分析,分別為 GET 及 POST。

點開 documentation,只有 app_id 和 app_key 是必填,將第一步取得的 id 及 key 輸入進行測試。

執行 Try It Out,可以收到 Response Body 表示我們的 id 及 key 可以正常使用。

(也可以直接在瀏覽器的搜尋欄輸入 Request URL 網址)

欄位 ingr (為 Ingredients 縮寫),表示食材,輸入 apple 再 Try it out 試試會不會取得資料。

恩恩,看起來正常取得 apple 的資料了。

step 3:接著來看回傳資料的格式,並介紹如何解析資料。

回傳的資料會是與蘋果相關的營養資訊,並且包括烹調(加工)後的資訊。

text:我們傳入的食物 "apple"。

parsed:表示 apple 本身的營養資訊。

hints:跟 apple 有關的所有食物,或是各種品種的 apple。

Link:因為 json 只會顯示第一頁的資料,若要下一頁的資料則在 href 中。

// 有省略很多筆資料
{
text: "apple",
parsed: [
{
food: {
foodId: "food_a1gb9ubb72c7snbuxr3weagwv0dd",
label: "Apple",
knownAs: "apple",
nutrients: {
ENERC_KCAL: 52,
PROCNT: 0.26,
FAT: 0.17,
CHOCDF: 13.81,
FIBTG: 2.4
},
category: "Generic foods",
categoryLabel: "food",
image: "https://www.edamam.com/food-img/42c/42c006401027d35add93113548eeaae6.jpg"
}
}
],
hints: [
{
food: {
foodId: "food_a1gb9ubb72c7snbuxr3weagwv0dd",
label: "Empire Apple",
knownAs: "apple",
nutrients: {
ENERC_KCAL: 52,
PROCNT: 0.26,
FAT: 0.17,
CHOCDF: 13.81,
FIBTG: 2.4
},
category: "Generic foods",
categoryLabel: "food",
image: "https://www.edamam.com/food-img/42c/42c006401027d35add93113548eeaae6.jpg"
},
measures: []
},
...
{}
],
_links: {
next: {
title: "Next page",
href: "https://api.edamam.com/api/food-database/v2/parser?session=44&app_id=f034271b&app_key=c5580c5d26b082de15259b9ceee888b9&ingr=apple&nutrition-type=cooking"
}
}
}

✨範例 python、node js

# 使用 python 來請求 Edamam API 的範例:

import requests

app_id = 'your_app_id'
app_key = 'your_app_key'

def get_food_data(food):
url=f"https://api.edamam.com/api/food-database/v2/parser?app_id={app_id}&app_key={app_key}&ingr={food}"
response = requests.get(url)
data = response.json()
if "hints" not in data:
return "No data found for {}".format(food)

food_nutrients = data["parsed"][0]["food"]["nutrients"]
print(food_nutrients)

get_food_data('apple')

得到

{
'ENERC_KCAL': 52.0,
'PROCNT': 0.26,
'FAT': 0.17,
'CHOCDF': 13.81,
'FIBTG': 2.4
}

# 使用 Node.js 寫 Edamam API 的範例。

const request = require('request')

const app_id = 'app_id'
const app_key = 'app_key'

const axios = require("axios");

async function getFoodInfo(food) {
try {
const response = await axios.get(
`https://api.edamam.com/api/food-database/v2/parser?app_id=${app_id}&app_key=${app_key}&ingr=${food}&nutrition-type=cooking`
);
return response.data;
} catch (error) {
console.error(error);
}
}

getFoodInfo("apple").then((data) => {
console.log(data['parsed'])
});

得到

😴一些 FAQ 的翻譯

  • 收到 401 錯誤

請確保您使用您為此 API 創建的憑據;如果您使用的是正確的憑據,但仍然收到 401,則您可能已達到極限。檢查您的帳戶,看看是否屬於這種情況。

  • 收到錯誤 “Unauthorized app_id =${YOUR_APP_KEY}.This app_id is for another API."

這是 401 錯誤的可能原因之一。 Edamam 有多個 API,不能將一個 API 的憑據用於另一個 API。 對於您的應用程序為其創建的特定 API,請為您嘗試使用的 API 註冊一個應用程序。

  • 收到 403 錯誤

請確保提交的憑據中刪除任何符號,例如“$”“{}”。或是檢查是否對請求正文使用了正確的語法。

  • 收到 555 錯誤

555 錯誤的目的是確保始終提供準確的信息。 555 錯誤表示該食譜未通過營養質量檢查。 可能的原因是:份量太高或太低,無法識別的成分或無法分配重量的成分。

✨ 結論

其實這個 API 提供了很多資料,對食物分析的應用很有幫助,像是可以做成一個 APP 協助熱量計算、食物分析,甚至還可以針對特定飲食族群做食物推薦,會了上面的基本運用後都可以自行延伸後續的功能,做成自己要的應用程式。(下一篇會是以這個 API 為基礎的食物分析 linebot ,敬請期待🥸🥸)

--

--

Molly M
Molly M

Written by Molly M

Molly — Software Developer / 職稱是軟體研發工程師。 什麼都寫,專精於前端及APP (ง•̀_•́)ง ! ❤ 合作發案討論疑難雜症請洽: momolly1024@gmail.com