LoginSignup
3
3

More than 1 year has passed since last update.

GAS + LINE API + OpenWeatherMap で天気予報bot

Last updated at Posted at 2020-12-29

Qiitaでお母さんにLINEbotを作った記事を見つけ「JavaScriptならある程度分かるしこれならすぐできそう」と思い、天気予報Botを作りました。

Weather Forecast [GitHub]

weather-forecast.png

  • 天気予報の上には一応メッセージをつけています。

概要

  • GAS(Google Apps Script)を利用し、サーバーレスでLINE botを開発します。
  • 同じような記事はググればたくさん出てくるので、この記事では開発してて迷いどころになりそうな『LINE USER ID の取得方法』と『LINE APIの仕様に準拠したflexメッセージ』について書いていこうと思います。

事前準備

  • Google Apps Script を利用するため、勿論ですがGoogleアカウントが必要となります。
  • OpenWeatherMap、及びLINEMessagingAPIを利用するため各サービスへの事前登録が必要になります。
  • ローカル環境構築
    • ブラウザ上のエディタでコーディングするのはキツいですし何よりローカルでバージョン管理などもしたいと思います。環境構築に関しては、多くの方が記事にしているので「 clasp GAS 」でググれば沢山の情報が出てくるかと思いますので是非参考にしてください。
    • 尚、Node.jsで開発しているとnpm install {パッケージ名} --saveでバシバシ追加パッケージをインストールしていくと思いますが、GAS上では動かない物もありますし、逆に通常のNode.jsだと動かないオリジナルクラス(UrlFetchAppとか)がGASで動いたりするのでその辺の整合性を揃えるためにも以下のブログは参考になるかと思います。

参考記事:

  1. GAS でも npm のライブラリを使いたい
  2. gulp と mocha を使って UrlFetchApp のテストをする方法

get user id

 LINEBotには大きく分けて応答メッセージプッシュメッセージの二つが存在します。今回のBotはその仕様から後者のプッシュメッセージを利用します。その際問題になってくるのが、**『メッセージを送りたい相手のLINE User ID の把握』**です。これよくLINEの友達になる際に利用するものではなく、普段サービスを利用するだけだと、絶対に目にすることのないものです。今回お天気ボットを作るに当たって、予めUserIDを取得できるBotを別に作りました。

Get User ID Bot [GitHub]

get-userid.png

このbotに対して、なんでも良いのでメッセージを送ると[user_id, group_id, room_id]がそれぞれ返ってきます。図のように特にLINE Groupではない場合、"undefind"で返ってきます。

flex messageの送付

 line bot には様々なメッセージ形式が用意されており、それらを指定されたjsonフォーマットで準備する必要があります。

メッセージタイプ

今回はこの中から、自由にカスタマイズできるflexを利用しますが、これを一からデザインしてると本当に大変です。そこで自分はLINE Developers公式のFlex Message Simulatorを利用しました。ここである程度のテンプレからスタートし、あとは自分で少しjsonを整形することでなんとかイメージしているものを作り上げる感じです。

3
3
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
3
3