發現竟然沒有任何中文使用者寫 Edamam API 的教學或介紹文章,於是這篇誕生。🎉🎉🎉
(標題風格有點不一樣是因為,chatgpt 告訴我這樣下標題會比較吸引人(真的嗎( •́ω•̩̥̀ ))
Edamam API
Edamam API 是一個強大的食物分析工具,它可以提供食物的詳細營養成分,包括卡路里、蛋白質、脂肪、碳水化合物、纖維等。這對於健身、養生、營養師、食物開發者等等都非常有用。
API 可以透過給定食物名稱、食材或食譜來得到相關資訊,例如:計算飲食營養攝入和營養值等。它也可以被用於開發飲食健康和營養應用程式,以幫助用戶了解飲食資訊,並管理健康和營養狀態。
本文將介紹如何使用 Edamam API,分別以 python 和 nodeJs 為例,教學如何使用這個 API。
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 ,敬請期待🥸🥸)