見出し画像

【Google Apps Script】プログラミング初心者がLINE Notifyで天気お知らせBOTを作ってみた

今回はGoogle Apps ScriptとLINE Notifyを使って天気をお知らせしてくれるBOTを作ってみたので、備忘録として残します。
プログラミング初心者でも簡単に作ることができました。

作ったもの

今回作った天気お知らせBOTの機能は以下のようにしました。
・毎朝その日の天気予報を教えてくれる(天気、最高気温)
・夜に次の日の天気予報を教えてくれる(天気、最高気温、最低気温)

作った経緯

朝起きた時にテレビを見ないことが多いので、LINEでその日の天気予報と明日の天気を教えてくれるBOTを作ってみました。
また、プログラミングの修行のため、先人たちのコードの写経と自分なりの機能をつけて練習してみました。

プログラミング初心者でも簡単にはじめられるGoogle Apps Script

Google Apps Script(GAS)とはGoogleが提供するプログラミング言語でGoogleマップやGmailなどのGoogle関連のサービスと連携したり、独自のWebアプリを開発することができます。
GASはWeb開発に欠かせないJavascriptをベースにしていて、環境構築も無料で提供してくれるので、プログラミング初心者でもはじめやすいプログラム言語です。
Webアプリを作りたいけど、環境構築が面倒くさくてなかなかはじめるやる気が出ないな〜という方におすすめかもしれません!
詳しく知りたい方は以下を参考にしてみてください。

作り方

1. Google Apps Scriptを使用できるようにする(※Googleアカウントを持っていない人は事前に作成します)
2. LINE Notifyの設定をする
3. スクリプトエディタにコードを作成する
4. 通知設定をする

Google Apps Scriptを使用できるようにする

Google Apps Scriptを使用できるようにしていきます。
chromeの拡張機能に「Google Apps Script」を入れるか、Googleスプレッドシートでシートを新規追加し、メニュー > ツール > スクリプトエディタから使用することができます。

これでGoogle Apps Scriptが使用できる状態になりました。
プロジェクト名やファイル名は好きな名前を設定してください。

LINE Notifyの設定をする

LINE Notifyにアクセスし、自分のLINEアカウントでログインします。
ログインしたらマイページに移動し、トークンを発行ボタンをクリックしてください。

クリックするとトークン名通知の送信先(LINEのトークルーム)を入力するポップアップが表示されるので、設定してください。
今回はトークン名を「天気お知らせ」、トークルームを「天気お知らせBOT」にしました。
トークン名と送信先を入力できたら発行するボタンをクリックしてください。表示されたトークンをコピーしておいてください。(メモ帳などに保存しておく)
※トークンは二度と表示されないので注意!

最後にLINE Notifyを先ほど設定したトークルームに招待してください。
これでLINE Notifyの設定が完了しました!

スクリプトエディタにコードを作成する

今回はlivedoor天気予報が提供しているお天気WebサービスのAPIを利用し、全国各地の天気予報をJSONデータで取得しています。
APIについては以下の記事を参考に。

先ほど作成したスクリプトエディタに以下のコードを貼り付けます。

// 指定した地域のJSONをうけとる
// city=の後に取得したい地域のidを入れる(例:東京:130010)
var response = UrlFetchApp.fetch("http://weather.livedoor.com/forecast/webservice/json/v1?city=016010");
var json = JSON.parse(response.getContentText());

// 時間帯によってメッセージを変える
function timeChecker() {
 var nowHour = new Date().getHours();
 // 午前中の場合、その日の天気予報を受け取る
 // 午後の場合は、次の日の天気予報を受け取る
 if (nowHour <= 12) {
   var message = getForecastInfo(0);
 } else {
   var message = getForecastInfo(1);
 }
 sendHttpPost(message);
}

// お知らせのメッセージを作成
function getForecastInfo(day) {
 var area = json["location"]["city"];
 var today = json["forecasts"][day];
 var forecast = today["dateLabel"] + "(" + today["date"] + ')' 
              + "の" + area + "の天気は" + today["telop"] + "です";
 var highest= "最高気温は" + today["temperature"]["max"]["celsius"] + "℃";
 // 明日の天気の場合は最低気温を追加
 if (day == 1) {
   var lowest= "最低気温は" + today["temperature"]["min"]["celsius"] + "℃";
   var message = forecast + "\uDBC0\uDC5E" + "\n" + highest + "\n" + lowest;
 } else {
   var message = forecast + "\uDBC0\uDC84" + "\n" + highest;
 }
 return message;
}

// LINEに投稿
function sendHttpPost(message) {
 // アクセストークンを設定
 var token = ["先ほどコピーしたLINEトークンをここに入れてください"];
 var options = {
   "method"  : "post",
   "payload" : "message=" + "\uDBC0\uDC77" + "\n" + message,
   "headers" : {"Authorization" : "Bearer " + token}
 };
 UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}

以下の部分の「city=」の後は取得したい地域のidを入れます。
今回は札幌のidを入れました。(東京の場合は130010)
取得したい地域のidは定義表を参考にしてみてください。

var response = UrlFetchApp.fetch("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010");
var json = JSON.parse(response.getContentText());​
UrlFetchApp.fetch(URL):API(URL)にリクエストを送る
レスポンス.getContentText:レスポンスからテキストデータを取り出す
JSON.parse:jsonデータを解析

次に先ほどコピーしたLINEトークンを以下の箇所に入れます。

var token = ["先ほどコピーしたLINEトークンをここに入れてください"];

また、通知されるメッセージを変えたい場合は以下を変更してみてください。

// お知らせのメッセージを作成
function getForecastInfo(day) {
 var area = json["location"]["city"];
 var today = json["forecasts"][day];
 var forecast = today["dateLabel"] + "(" + today["date"] + ')' 
              + "の" + area + "の天気は" + today["telop"] + "です";
 var highest= "最高気温は" + today["temperature"]["max"]["celsius"] + "℃";
 // 明日の天気の場合は最低気温を追加
 if (day == 1) {
   var lowest= "最低気温は" + today["temperature"]["min"]["celsius"] + "℃";
   var message = forecast + "\uDBC0\uDC5E" + "\n" + highest + "\n" + lowest;
 } else {
   var message = forecast + "\uDBC0\uDC84" + "\n" + highest;
 }
 return message;
}

コードの中の「\uDBC0\uDC5E」← これはLINEの絵文字を表示させるためのものです。
LINEの絵文字に関しては以下の記事を参考にしました。

スクリプトの編集が終わったら、メニュー > ファイル > 保存でファイルを保存します。

通知設定をする

通知がしっかり送信されるかテストをしていきます。
メニュー > 実行 > 関数を実行 で「timeChecker」を選択し実行します。
LINEに通知されれば成功です!
通知が確認できたら、指定の時間に通知されるようにトリガーを設定します。

メニュー > 編集 > 現在のプロジェクトのトリガー をクリックします。
トリガーを追加」をクリックし、以下の項目を設定します。
・実行する関数(timeChecker
・時間ベースのトリガーのタイプ(今回は毎日通知させたいので日付ベースのタイマー
・時間を選択(通知したい時間
設定したら保存ボタンをクリックします。

また夜にも通知させたいのでもうひとつトリガーを追加します。
この時間設定も自分が通知したい時間に設定してください。

これですべての設定が完了しました!
以下のように天気予報が通知されます。

さいごに

今回お天気お知らせBOTを作り、なかなか実用的なものが作ることができました。また、プログラム初心者でも簡単にサービスが作ることができるGoogle Apps Scriptの便利さと手軽さに感動しました。
今回書いたコードはきれいではなく、間違っている部分もあると思いますが、これからどんどんサービスを作り、きれいなコードを書けるように修行していきたいと思います。
最後まで読んでいただきありがとうございました。

参考
https://www.smilevision.co.jp/blog/tsukutte10/

この記事が気に入ったらサポートをしてみませんか?