エリアマーケティングで、対象のエリアのちょっとした数値をレポートに反映したいため、元のデータ(RESAS API)から探し出すのはちょっと面倒なので、LINE Botで指定の数値を教えてくれる仕組みをNode-REDも活用し制作。
結論
RESAS APIから指定のエリアの「将来人口推計」を教えてくれるものです。RESASAPIで登録された市区町村を入力すると、登録された将来人口推計を返します。(登録されている市区町村がない場合は「わかりません」を返す)
使ったもの
サービス
Heroku
Node-RED
LINE Developers
RESAS API
※RESAS APIを利用の際にはAPIキーの取得(無料)が必要
1.取得したデータ
ここの「cityname」を入力すると、「value」(将来人口推計)を返すようにします。
2.フロー構成
先頭(左端)はhttp inノード、末尾(右端)は、インストールした ReplyMessageノードです。
1つめ:http in
LINEサーバーからのWebhookを受け付けるノードです。
2つめ:function(検索ワードを保持)
次以降のノードでmsg.payloadに入っているLINEメッセージが失われてしまうので、一時的にmsg.lineに退避させています。
3つめ:function(RESAS APIキーで鍵開け)
RESAS API指定のリクエストヘッダー(X-API-KEY)と取得したAPIキー(画像は一部マスキング)を反映
4つめ:http request(RESAS APIにアクセス)
メソッド:GET
出力形式:JSONオブジェクト
5つめ:function(検索ワードがあったら将来人口を返す)
都市名は配列になっているので、その配列の中身を検索するfindIndexという関数を使って、LINEのメッセージと配列内の都市名が一致するか確認し、一致すればその配列位置(インデックス)を取り出します。そのインデックスを用いて、推定人口が示されているvalueをとってきます。該当の都市名がない場合は、「わかりません」を返します。
※ちなみに、将来人口推計(value)ではなく、人口増減率(ratio)を取り出したい!場合は15行目の「value」を「ratio」に変更することで取り出せます。
6つめ:ReplyMessage(LINEで返信)
LINE DevelopersでMessaging APIチャネルを作成し、「チャネルアクセストークン」と「チャネルシークレット」をそれぞれ取得してきてここに入れます。
3.LINE DevelopersでWebhook URLを作成
HerokuのURLに/webhookというパスを追加したものがエンドポイントとなります。
LINEとの連携において必要な情報はこのWebhook URLのほかにはシークレットとアクセストークンであり、あとはLINE公式アカウントマネージャーで、「応答設定」が以下のようになっているか確認するだけです。