4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【楽天レシピAPI】ドカ食いを止めたくてLINE Botに泣きついてみた

Last updated at Posted at 2023-10-29

今日もごはんがおいしい

病めるときも健やかなるときも、ごはんがおいしい。

でも、たまに「おいしかったけど、なんだか空腹がおさまらないな」というときがある。
これって「新型栄養失調」予備軍かも。カロリーは足りているが、栄養素が足りていない状態を指すそう。これはまずい。まだまだ健康に、おいしくごはんを食べたい。
LINE Bot でなにかつくれないだろうか。

ドカ食いを止めてほしい

イメージとしては、お抱えのパーソナル栄養士さんとか、そんな感じのものがほしい。
欲望のままにどら焼きにかぶりつく私に「お待ちなさい」と声をかけてほしい。いろいろと妄想は膨らむが、今回は以下を目指すこととする。

【目標】
 ■ 例えば「甘いもの」が食べたいとき、真に体が欲している栄養素を知りたい
 ■ その栄養素が含まれているレシピを探しやすくしたい

技術・環境

LINE Bot(LINE Developers)
Node-RED(FlowForge)
楽天レシピカテゴリ一覧API (version:2017-04-26)

爆誕

うちの栄養士、紹介しますね。
リッチメニュー(画面下部のイラストのボタン)を押すことで「今なにを食べたいか」をメッセージとして送信すると、必要な栄養素とおすすめレシピを教えてくれます。

この、無口だけど欲しい言葉をくれる感じと、のんびり屋さんなところ、嫌いじゃない。
改善の余地あり

つくりかた

【流れ】
 ■ LINE Developers で リッチメニュー をつくる
 ■ Node-REDで 楽天レシピカテゴリAPI を呼出して値を取得、ユーザに渡す

■ LINE Developers で リッチメニュー をつくる

素晴らしき先人のお知恵を借りて作成しました。記事の最後に掲載しております。

テンプレートを選択して、画像を埋めていくだけの簡単作業でした。
ただ「アクション」という、「ユーザがボタンを押したらどうする」の設定をする必要があります。今回は、各ボタンを押したら、それ毎に「あまい」といったテキストを保持するようにしました。
richmenu.png

■ Node-REDで 楽天レシピカテゴリAPI を呼出して値を取得、ユーザに渡す

フローのイメージとJSONコードは以下のとおりです。
タコ足配線だっていいじゃないか、初心者だもの。
Node-REDflow.png

APIキー、チャネルアクセストークン、チャネルアクセスシークレットといったものは個人毎のものですので「xxx」などに置き換えています。

[{"id":"145e154b65a37fca","type":"tab","label":"LINEBot_1027③_qiita用","disabled":false,"info":"","env":[]},{"id":"5692ce4c79b64c1a","type":"Webhook","z":"145e154b65a37fca","name":"","url":"/webhook","x":100,"y":200,"wires":[["65ca826467a06ed5"]]},{"id":"87c2ceb81abe5419","type":"ReplyMessage","z":"145e154b65a37fca","name":"","replyMessage":"","x":1080,"y":300,"wires":[]},{"id":"65ca826467a06ed5","type":"switch","z":"145e154b65a37fca","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"あまい","vt":"str"},{"t":"eq","v":"しょっぱい","vt":"str"},{"t":"eq","v":"すっぱい","vt":"str"},{"t":"eq","v":"からい","vt":"str"},{"t":"eq","v":"あげもの","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":6,"x":290,"y":200,"wires":[["793c9a29c700b7ef"],["8dcc2dd51f2f7894"],["bd84cee48ccdae7a"],["9c68ae78e39ff6f1"],["9fdfa14eeedcb5bc"],["27ce70a0b0872fdd"]]},{"id":"793c9a29c700b7ef","type":"http request","z":"145e154b65a37fca","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20170426?applicationId=xxxxxxxxxxxxxxxxxxx","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":570,"y":80,"wires":[["0d92e26768daab73"]]},{"id":"0d92e26768daab73","type":"function","z":"145e154b65a37fca","name":"あまい","func":"//あまい:肉\nmsg.payload = \"タンパク質不足かも?「肉、魚、卵」がおすすめ⇒\" + msg.payload.result.large[1].categoryUrl;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":80,"wires":[["87c2ceb81abe5419"]]},{"id":"8dcc2dd51f2f7894","type":"http request","z":"145e154b65a37fca","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20170426?applicationId=xxxxxxxxxxxxxxxxxxx","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":570,"y":180,"wires":[["3e403d56537c06a0"]]},{"id":"bd84cee48ccdae7a","type":"http request","z":"145e154b65a37fca","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20170426?applicationId=xxxxxxxxxxxxxxxxxxx","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":570,"y":280,"wires":[["91bea675a115a1ec"]]},{"id":"9c68ae78e39ff6f1","type":"http request","z":"145e154b65a37fca","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20170426?applicationId=xxxxxxxxxxxxxxxxxxx","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":570,"y":380,"wires":[["5e80d3632c7bb2e9"]]},{"id":"9fdfa14eeedcb5bc","type":"http request","z":"145e154b65a37fca","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20170426?applicationId=xxxxxxxxxxxxxxxxxxx","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":570,"y":480,"wires":[["d0073324fb050118"]]},{"id":"3e403d56537c06a0","type":"function","z":"145e154b65a37fca","name":"しょっぱい","func":"//しょっぱい:貝\nmsg.payload = \"ミネラル不足かも?「貝、海藻、大豆」がおすすめ⇒\" + msg.payload.result.medium[23].categoryUrl;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":180,"wires":[["87c2ceb81abe5419"]]},{"id":"91bea675a115a1ec","type":"function","z":"145e154b65a37fca","name":"すっぱい","func":"//すっぱい:豆類\nmsg.payload = \"クエン酸・ミネラル不足かも?「豆類、梅干し、海藻」がおすすめ⇒\" + msg.payload.result.medium[359].categoryUrl;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":280,"wires":[["87c2ceb81abe5419"]]},{"id":"5e80d3632c7bb2e9","type":"function","z":"145e154b65a37fca","name":"からい","func":"//からい:野菜\nmsg.payload = \"タンパク質・抗酸化ビタミン不足かも?「緑黄色野菜、肉類、魚介類、」がおすすめ⇒\" + msg.payload.result.large[14].categoryUrl;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":380,"wires":[["87c2ceb81abe5419"]]},{"id":"d0073324fb050118","type":"function","z":"145e154b65a37fca","name":"あげもの","func":"//あげもの:ほうれん草\nmsg.payload = \"カリウム不足かも?「納豆、ほうれん草、アボカド」がおすすめ⇒\" + msg.payload.result.medium[350].categoryUrl;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":480,"wires":[["87c2ceb81abe5419"]]},{"id":"27ce70a0b0872fdd","type":"template","z":"145e154b65a37fca","name":"ほか","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"「新型栄養失調」で不足している栄養素を調べて、ぴったりのレシピを探そう!\nhttps://recipe.rakuten.co.jp/","output":"str","x":550,"y":580,"wires":[["87c2ceb81abe5419"]]}]
  • 「/webhook」ノードを設定し、ユーザからのリッチメニューメッセージを受取る
  • 「switch」ノードにて、メッセージの内容を判定し、後続ノートに引継ぐ
  • 各「http request」ノードにて、「楽天レシピカテゴリAPI」情報を取得する(※1)
  • 各「function」ノードにて、取得した情報とテキスト情報を編集する(※1)(※2)
  • 「template」ノードにて、固定メッセージを設定する
  • 「ReplyMessage」ノードにて、ユーザにメッセージを渡す

(※1)ソースコード工夫して1ノードにしたかったが時間切れ
(※2)ランダムでレシピを提案するようにしたかったが時間切れ。カテゴリトップを表示する仕様。

おわりに

無骨ながら優しい、マイ栄養士をつくることができた
今後は衝動食いの前に、彼(彼女)に質問することにします。

以前の Qiita APIに記事に同じく、LINE Bot もまったくの初心者だったけれど、なんやかんや動くものができました。アイデア次第で、面白いものを比較的簡単に形にできる手段だなと感じました。次回挑戦する際は今回できなかったことに加えて、イケボでメッセージを読み上げてくれるように進化させたいです(オタクの悪いところ出ちゃってる)。

最後までお読みいただき、ありがとうございました!

参考

リッチメニュー画像の作り方から設定方法まで徹底解説
(https://line-sm.com/blog/howtomakerich-menus/)

楽天レシピカテゴリ一覧API (version:2017-04-26)
(https://webservice.rakuten.co.jp/documentation/recipe-category-list)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?