可以透過 QRCode 加入營養成份 LINE bot。
Update: 謝謝大家熱烈試用「營養成份 bot」, 因為測試帳號已達 50 人的上限,所以將遷移到新的無人數上限的「營養成份 2 bot」,請點選新的「營養成份 bot」邀請連結 https://line.me/R/ti/p/%40hoz2085q
歡迎分享新連結給可能需要的朋友,讓大家隨手查營養,吃得更健康。 (目前的 bot 仍然可以使用,但不再更新維護)
食物,運動,與身體平衡
最近在看代謝型態飲食全書,裡面提到吃下的東西
與運動
,與體內的平衡和慢性病的產生有相當密切的關係。要讓身體重新回復到平衡的健康狀態,需要選擇適合自己的食物(營養素的比例)並搭配適當運動(有氧 + 無氧)與充足睡眠。
其中我們所選擇的一天三餐與餐間的飲食習慣
,則是潛移默化地影響我們的健康。
當我們持續吃不好的食物或錯誤的營養素比例,則讓體內的系統處在有的養分過多,有的養分不足的持續不平衡的狀態。這些不平衡讓各種體內各種系統無法正常工作。例如一餐吃進過多的精製糖份可能造成血液中的糖份快速升高,胰臟必須快速分泌大量胰島素來協助細胞消化糖份,當這樣不平衡的狀態維持久了,就會造成胰臟的過度負擔。當體內的代謝開始失常時,我們可以先觀察到一些亞健康症狀,累積久了就成了各種慢性病。因此選擇適合自己的食物
是相當重要的。
Bot 怎麼做成的
要選擇適合自己的食物
時,我除了先做了測驗了解個人飲食中三大營養素 (碳水化合物
、蛋白質
、脂肪
) 的參考比例,也想知道每樣吃下的東西大致的營養成份。
我想到如果有各種食材的營養成份資料,就可以做成聊天機器人或 App 以供隨時查詢。我搜尋了一下,發現政府資料開放平台上有公開的「食品營養成分資料集」,提供 csv, json, xml 等格式下載。
下載開啟資料後,發現原始的 JSON 格式還是蠻.... 有趣的。
下載的 JSON 格式資料長這樣:
[{"食品分類":"魚貝類"},{"資料類別":"樣品基本資料"},{"整合編號":"J11101"},{"樣品名稱":"鮸魚"},{"俗名":"鮸仔,敏魚,鮸,敏仔魚"},{"樣品英文名稱":"Brown croaker; Mi-iuy croaker"}
... 對於這種 JSON 存法只能... 呵呵。
重新下載了 csv 檔,這次看到的格式總算正常了點,但解開後的 csv 檔案有接近 50MB 大小。寫了個腳本過濾掉不需要的資料,並轉換成需要的格式後,輸出總共不到 500KB,這樣的大小就算放到 App 裡也還合適。
這次使用bottender框架來連接到 LINE1。由於 LINE 需要 HTTPS 連線,開發的過程中使用了ngrok來讓 LINE 可以連到開發中的電腦,免去另外架設公開網站的麻煩。
此外還使用了Fuse.js這個模糊搜尋函式庫,在搜尋的時候只要打部份內容,就可以搜出相關的條目。
整個 bot 的軟體架構如下
開發中遇到的小坑
- developer channel or free channel
剛開始申請用 developer channel ,因為所有 API 都可以使用,開發起來會比較順暢。但稍後就遇到了 Bot 只能加 50 人好友的限制。
- Push Message vs Reply Message
developer channel 可以用 Push Message API (也就是 bottender 範例中接的 sendText)。free channel 的話不能使用 Push Message API (context.sendText),只能用 Reply Message API。也就是不能推送訊息,但可以回覆使用者訊息(至多五筆)。查了一下文件2,雖然需要稍微改變一點寫法 (context.reply),但還算容易解決。
現在上線讓大家使用的已是改用 Reply Message API 的版本。
我可以加這個 Bot 嗎?
可以透過掃描 QRCode 加入營養成份 LINE bot。
或點選以下連結
因為使用免費的 Host,不能保證 bot 永遠在線,若第一次沒回應,可以稍等半分鐘後再試。
會不會 Open Source
目前程式還沒有好好整理,尚不打算開源。