仕事で毎日気にすること
こんにちは!商業施設の常駐管理をしているIT素人です。
毎日商業施設にいて気になることと言えば、第一にお客さんの来館客数です。
土日祝は賑わって、平日は落ち着くなんてことはカレンダー上は当然。一方で「今日は人が多いけど思い当たる節がないなあ」or「日曜でイベントもしているのに昨年を割っている!?」なんてことも多々あります。なぜだろう??
そんな時に最初に思いついたこと。LINE
で聞いて二つ返事で情報が返ってきたら素敵!
使用ツール
- Google Spreadsheets
- Make
- LINE Developers
- OpenWeatherMap API
ゴール設定
- ターゲット: 同じ職場で働く仲間
- ゴール設定: 客数増減に関わりそうな主要素を、LINEで即座にダイレクトにつかむことができる状態
【今回呼び出したい要素】
- 職場周辺エリアの現在の天候
- 職場周辺エリアのイベント情報
- 職場周辺エリアの小学校休み情報
今回はプロトタイプということで2024年の夏休み限定仕様です。
完成したプロトタイプ 今日の数字なんで?
全体像
-
LINE
と様々なWEBサイトを接続させるLINE Developers
のMessage API
を利用します - 今回
LINE Bot
はMake
で動かします - 天気情報を呼び出すためには
OpenWeatherMap API
を使用しました - イベントや夏休みの期間情報は
GoogleSpreadsheets
に集約し、フィルタにより入力した地域ごとの情報が返ってくるように組み込みました - 地域は職場を中心に3分割し、3つの地域ごとの分岐を作成しました
天気情報を呼び出す
OpenWeatherMap API
の選定理由
- 濃い密度で都市座標が存在。呼び出す都市座標を細かく設定可能
- 天気状態に加えて、気圧、湿度、風速等細かい情報を取得可能
- メールアドレスの登録で即座に無料でAPIキーの取得が可能
【天気情報APIの呼び出しの流れ】
APIキー
を取得し、都市名から座標すなわち緯度、経度を取得します。
1 . 最初に座標を取得するためのAPI(Geocoding API
)を使用し、任意の都市について緯度と経度を取得
座標を呼び出すためのAPIコード
http://api.openweathermap.org/geo/1.0/direct?q={city name}&limit={limit}&appid={API key}
2 . 次に都市の現在の天気情報を取得するため、1で取得した緯度(lat
)と経度(lon
)を用いたAPIを使用
指定した座標の天気情報を呼び出すためのAPIコード
`https://pro.openweathermap.org/data/2.5/forecast/climate?lat={lat}&lon={lon}&appid={API key}`
イベントと学校休み情報を抽出する
LINE Bot
からの応答で二つ目にイベント、三つ目に夏休み情報を返すように設定していきます。
イベント情報をWEBサイトから抽出できたら、最新の情報をきれいに見せることができると思ったのですが、今回は関連するイベント情報を自力でまとめ、取捨選択したうえでGoogleSpreadsheets
にリストアップしました。
【要検証ポイント①】
使用したGoogleSpreadsheets
はGet Range Values
で適切か
天気情報を置換する
OpenWeatherMap API
は英語で記述されています。数値以外のパラメータを返す時は、日本語に置換したいと考えました。
そこでさらに、返された3桁の天気コードから日本語へ置換する手順を挟みます。
赤枠のGoogleSpreadsheets
で置換を行います。
天気コードはOpenWeatherMap API
内でリストが公開されているため、それを基にシート内で再リスト化しました。
応答を設定する
必要な情報の呼び出しと抽出、置換までの動きが完成しました。
入力に対するLINE Bot
からの応答を作成していきます。
ここは多少時間を要したところで、天気情報APIから返される数値は、デフォルトでは3桁での表記になっていたり、時間表記も英語かつ秒単位まで表示されてしまいます。
職場の仲間に向けてわかりやすい表記にするため、Text and binary functions
のオプションを使用しました。
時間表記をわかりやすく(年月日)するためにはformatDate
を使用し、天気数値単位を2桁表記にするためにはsubstring
の機能を使用しました。
何度も実験して、一目でわかる形にまで 自分の中で及第点がとれる形に 成形しました。
返された値を使用して、Text
内でメッセージを組み立てていきます。
メッセージを分割するためにAdd item
で次のText
内でイベント、休みの情報を入力していきます。
フィルタを設定する
今回は3つの地域についての情報を、入力されたメッセージテキストに合わせて返すため、3つに分岐する形をとりました。
テキストによるフィルタを作成することで、入力された地域に合わせた条件分岐をするように設定しました。
赤枠のRouter
で条件分岐を行います。また規定外のメッセージテキストが入力された場合には、無効のメッセージを返すように設定しています。
要検証ポイント
作成の過程で、2点満足していない点があります。
基本的な要素のような気もしますが、合理的な方法があるはずのため改善していきたいです。
【要検証ポイント①】使用したGoogleSpreadsheets
はGet Range Values
で適切か
⇒ いろいろ試してみたのですが、Get Range Values
で数値を取得する際に思うようにいかずGoogleSpreadsheets
のほうをmakeの設定に合わせるという手法でパワープレーになってしまいました。
Raw
からの値のみ返ってくるため、すべてひとつひとつの値をひたすら羅列しています。。
【要検証ポイント②】フィルタの条件設定は適切か
⇒ 複数フィルタをかける際にうまく機能せず、こちらもパワープレーとなっております。
Add OR rule
でひたすらフィルタをかけるテキストを個別設定しています。。
初めてプロトタイプを作成してみて
make
の機能を理解しつつ進めるのはなかなかに試行錯誤の連続でしたが、「こんなこともできるのでは?」って勝手にアイデアだけが膨らんでいくのは楽しかったです!
プロトタイプの実用性としては、自力で集めて成形したデータを基にしているため正確性などに不安が残る出来ですが、アイデアを形にするという視点では及第点だったかなという自己評価です。
今回は自分で抽出した数値データ単体を基にしているため、期間限定でしか使えない仕様でしたが、リアルタイムな情報を返すことができたら非常に有用だと感じました!