※2024/4/30
LINEリッチメニューからGoogleスプレッドシートへの書き込み方法を追記しました。
傘忘れてないですか?
私は小売業の本社でテナントさんの管理をしております。
わが社の店舗は一番東の店舗から一番西の店舗まで直線距離にして約350km。
当然、道はまっすぐではないので...
本社から店舗へ行くのに往復200km、300kmなんて当たり前。
こっちは雨が降っていないのに店舗についたら雨ふってる...みたいなのがよくあります。
そんな時に、現地の天気をさくっと知りたいと思い、現地の天気を教えてくれるLINE Botを作りました!さらに、私は天気痛からくる頭痛を記録しています。この機能も追加しようと思います。

完成品はこちら
使用ツール
・Make
・Googleスプレッドシート
・LINE Developers
・OpenWeatherMap API
・CANVA
最終構造
作成開始
天気情報のAPIキー取得
日本語のAPIもあるのですが、地域コードが決まっており限定されてしまうなと思ったので、緯度・経度で設定できるOpenWeatherMapを使用することにしました。
無料でも1分間に60回使用できるということで十分です。
APIキーの取得もメールアドレスを登録すると20分ぐらいで使用できるようになります。
全て英語なので慣れないと中々大変ですが、コードに使用する言語は世界共通。
英語がわからなくてもいろいろとHelp要素が多いのでわかりやすいかと思いました。

APIから天気情報を呼び出す
取得したAPIキーからノーコードでプロトタイプできるMake
で作成していきます。
下記が、天気情報を呼び出すAPI。
https://pro.openweathermap.org/data/2.5/forecast/climate?lat={lat}&lon={lon}&appid={API key}
APIを呼び出すにはlat
(緯度)とlon
(経度)で設定するので、まずは緯度と経度を調べなければなりません。ですが、緯度と経度をいちいち調べるのも大変なので、OpenWeatherMapの中にあらかじめ用意されているGeocoding API
を使用しました。
http://api.openweathermap.org/geo/1.0/direct?q={city name},{state code},{country code}&limit={limit}&appid={API key}
まずはcity name
から呼び出し緯度・経度を返すように設定します


疑問 = どのぐらいcity name
は設定されているのか
検証結果 = 主な市町村はcity name
からその場所の緯度と経度が導けました!
若干ずれる都市名もありましたが、調べてみると日本の座標だけでも1400地点近くあるそうです。
呼び出された緯度・経度を元に天気情報を呼び出すHTTPモジュールのパラメータに設定し返ってきた情報をLINEに送ります。
LINEへの返信も、見やすい表示方法に
気温が25.00と小数点以下が表示されてしまうのでTEXT and binary functions
のsubstring
で表記を2桁になるように設定しました。

ここで気になることが・・・
英語のAPIなのでLINEから送るTEXTを英語でやっていたのですが、いちいち英語はめんどくさい!
ということで、私が行きそうな場所の英語変換Googleスプレッドシートを作成し、LINEから送られてきた日本語地名テキストを英語のcity name
に変換するGoogle Sheetsモジュールを挟み込みました。

うまく天気情報をLINEに返信できました!
ただこれでは単なる天気情報を返すだけになってしまってもったいないなと思ったので改良を!
改良)リプライメッセージを分ける
「天気痛」の持ち主の私は雨が降っているところへ行くには注意が必要です!
そこで!
雨が降っている時は違うメッセージを返そう!と条件分岐を設定しました。
参考にした記事はこちら
※記事ではSSSAPIを使用していましたが私はGoogle Sheetsモジュールで設定してみました。
まず天気情報
から返される値の固定18項目を、雨が降っていない=0・降っている=1
を分けるスプレッドシートを作成し、TOOLS
からRouter
、Set up a filter
で条件分岐を設定しました。


天気の情報は同じ内容をLINEに送りますが、雨が降っている時は一緒に画像を送る設定にしました。画像はCanvaで作成。傘と薬を絶対忘れずにという思いを込めて!

機能追加)ボタンを押したらメモを転記する
頭痛持ちである私はアプリで頭痛メモをつけているのですが、アプリを開いて薬を飲んだ時間を書き込まなくてはならず結構めんどくさいし、よく忘れる。
こちらもさくっと頭痛メモをLINEでとれるようにしたい!と
LINEのリッチメニューを作成し、薬を飲んだ時はボタンを押したらスプレッドシートに薬を飲んだメモをかきだし記録できるようにしました。

2024/4/30 追記)リッチメニューからGoogleスプレッドシートへの書き込み
リッチメニューの設定方法は、LINEヤフーのマニュアルを参照してください。
上記で行った雨が降っている=1、雨が降っていない=0の条件分岐と同様に、LINEから送られてきたメッセージが地名なのか、薬なのかでRouter条件分岐を設定します。
日本語を英語に変換するスプレッドシートのC列に、地名=1、薬=0を追加し、Router設定で、1ならば天気情報へ、0ならばスプレッドシートに記録する設定にします。
スプレッドシートへの書き込みはGoogle Sheetsモジュール
のAdd a Row
を使用、Value
部分にスプレッドシートのA列に記録時間、B列にメッセージを記録する設定にします。
苦労した点:スプレッドシートに転記される時刻がUTC?GMT?で記入されてしまう
解決策:Values
設定時にDate and time
でformatDate
を指定し、timezone
をAsia/Toky
で設定したら日本時間で記録できました。

最終)天気情報+メモ機能
LINEから送られてきたのが地名ならば天気情報をLINEに返す、
薬ボタンを押したらスプレッドシートに記録し、LINEで記録しましたとメッセージを返す。
2つの機能を搭載しました。

最後に
作成途中で知ったのですが、Makeには天気モジュールがあり、どうやらOpenWeatherを使用しているらしく、試しにやってみたのですが同じ値が返ってきました。でも少々返ってくる値が少ない?
私が必要とする項目は一緒なのでそれでもよかったのですが、天気モジュールはcity name
で指定するので、悩んだあげく天気モジュールは使いませんでした。
LINEにリプライが返ってくるまでの時間の短縮を考慮すると天気モジュールを使用した方がいいかもしれない?今後検証してみようと思います!
更なる改良点(案)
OpenweatherMapにはレスポンスに天気icon
も設定されているのですがMakeではうまく表示できませんでした。(要検証!)
また、今回は雨が降っている、降っていないで分けましたが、もっと細かく分岐をして天気によって自身の設定アイコンを表示にしたりメッセージを変えたりしても面白いし、さらにメモ機能も用途に合わせたり、その時の天気も記載できるようにすると今後の頭痛対策にも役立つかなと思ったので改めて改善・挑戦しようと思います!
こんな機能あったらいいかもというアイデアがありましたら是非教えてください。
最後までお読みいただきありがとうございます!