LoginSignup
6
1

More than 1 year has passed since last update.

RESAS APIからちょっと知りたい数値をLINE Botで見るためにNode-REDを活用してつくる

Posted at

エリアマーケティングで、対象のエリアのちょっとした数値をレポートに反映したいため、元のデータ(RESAS API)から探し出すのはちょっと面倒なので、LINE Botで指定の数値を教えてくれる仕組みをNode-REDも活用し制作。

結論

GIF.jpg

RESAS APIから指定のエリアの「将来人口推計」を教えてくれるものです。RESASAPIで登録された市区町村を入力すると、登録された将来人口推計を返します。(登録されている市区町村がない場合は「わかりません」を返す)

使ったもの

サービス

Heroku
Node-RED
LINE Developers
RESAS API
※RESAS APIを利用の際にはAPIキーの取得(無料)が必要

1.取得したデータ

スクショ⑦.jpg

ここの「cityname」を入力すると、「value」(将来人口推計)を返すようにします。

2.フロー構成

スクショ①.jpg

先頭(左端)はhttp inノード、末尾(右端)は、インストールした ReplyMessageノードです。

1つめ:http in

スクショ②.jpg

LINEサーバーからのWebhookを受け付けるノードです。

2つめ:function(検索ワードを保持)

スクショ③.jpg

次以降のノードでmsg.payloadに入っているLINEメッセージが失われてしまうので、一時的にmsg.lineに退避させています。

3つめ:function(RESAS APIキーで鍵開け)

スクショ④.jpg

RESAS API指定のリクエストヘッダー(X-API-KEY)と取得したAPIキー(画像は一部マスキング)を反映

4つめ:http request(RESAS APIにアクセス)

スクショ⑤.jpg

メソッド:GET
出力形式:JSONオブジェクト

5つめ:function(検索ワードがあったら将来人口を返す)

スクショ⑥.jpg

都市名は配列になっているので、その配列の中身を検索するfindIndexという関数を使って、LINEのメッセージと配列内の都市名が一致するか確認し、一致すればその配列位置(インデックス)を取り出します。そのインデックスを用いて、推定人口が示されているvalueをとってきます。該当の都市名がない場合は、「わかりません」を返します。

※ちなみに、将来人口推計(value)ではなく、人口増減率(ratio)を取り出したい!場合は15行目の「value」を「ratio」に変更することで取り出せます。

6つめ:ReplyMessage(LINEで返信)

スクショ⑧.jpg

LINE DevelopersでMessaging APIチャネルを作成し、「チャネルアクセストークン」と「チャネルシークレット」をそれぞれ取得してきてここに入れます。

3.LINE DevelopersでWebhook URLを作成

スクショ⑨.jpg

HerokuのURLに/webhookというパスを追加したものがエンドポイントとなります。
LINEとの連携において必要な情報はこのWebhook URLのほかにはシークレットとアクセストークンであり、あとはLINE公式アカウントマネージャーで、「応答設定」が以下のようになっているか確認するだけです。

スクショ➉.jpg

6
1
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
6
1