背景
勉強がてらプログラミングでモノを作ってみたいと思い立ち、毎朝LINEで天気を通知してくれるトークルームを作ることにしました。参考にあるサイトを見ながら、作ったのでその時の手順を公開します。実際作ってみるとすごく簡単で、プログラミングできない人でも1時間くらいでできてしまいそうです。
欲しいもの
天気を確認するのがめんどくさいので毎朝7時にLINEに天気予報を通知してくれる。
無料で運用。
通知だけの機能で良い。返信など機能はいらない。
場所は東京で固定。
通知先も自分だけ。
構成
調べた結果、下記の構成でできそうだった。
必要要素
LINE Notify
メッセージアプリ「LINE」が提供するサービスで、使用すると簡単に無料でLINEにメッセージを送れたり、連携した外部のWebサービスからの通知をLINEで受け取ったりすることが出来ます。
GAS(Google App Scripts)
Googleが提供するサーバーサイド・スクリプト環境。 ほぼJavaScript。 実行する環境(サーバとか)がgoogleのアカウントがあれば無料で使える。
Weather Hack
天気情報を無料でAPI公開しているサービス
構築手順
STEP1 LINE Notifyを使えるようにする。
- いつも使用している個人のLINE IDで以下にログイン
https://notify-bot.line.me/ja/
STEP2 Google Apps Scriptの準備
STEP3 Google Apps Scriptにコード書く
- コードを書く。色々参考にして下記を記載。
// LINE Notifyで取得したアクセストークンをXXXXに置き換える var lineToken = "XXXXXXXXXXXXXXXXXXXXXXXX"; function weatherForecast() { // 天気APIから情報を取得。「CITY_ID」を、天気を取得したいcity idに置き換える.東京なので130010 var response = UrlFetchApp.fetch("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010"); //受け取ったJSONデータを解析して配列jsonに格納 var json=JSON.parse(response.getContentText()); //ログの表示 //Logger.log(json); // 最高気温と最低気温のデータがあるかチェック用に変数に格納 var maxTempertureisnull = json["forecasts"][0]["temperature"]["max"]; var minTempertureisnull = json["forecasts"][0]["temperature"]["min"]; /* メッセージ */ var strBody = json["location"]["city"] + "の天気"+ "\n"; //天候のデータを格納 var telop = json["forecasts"][0]["telop"] ; // 最高気温のデータがあれば摂氏で取得。無ければ---にする if(maxTempertureisnull != null){ var maxTemperture = json["forecasts"][0]["temperature"]["max"]["celsius"]; }else{ var maxTemperture = "---"; } // 最低気温のデータがあれば摂氏で取得。無ければ---にする if(minTempertureisnull != null){ var minTemperture = json["forecasts"][0]["temperature"]["min"]["celsius"]; }else{ var minTemperture = "---"; } strBody = strBody + "天候: "+ telop + "\n"; strBody = strBody + "最高気温: " + maxTemperture + "度" + "\n"; strBody = strBody + "最低気温: " + minTemperture + "度" ; sendToLine(strBody); } function sendToLine(text){ var token = lineToken; var options = { "method" : "post", "payload" : "message=" + text, "headers" : {"Authorization" : "Bearer "+ token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); }
- 取得時間によっては、最高気温と最低気温のデータがある場合とnullの場合がある。そのエラーハンドリングをしているが、もっと良い方法があると思う。なにかあればコメントください。
STEP4 定刻に動かすトリガーの設定
スプレッドシートの上部メニューの「編集」>「現在のプロジェクトのトリガー」をクリック
プロジェクトの保存をしてない場合、確認系のポップアップが出るのでOKしていく
「トリガーを追加」をクリック
トリガーの設定をする
実行する関数を選択で「weatherForcast」を選択
イベントのソースを選択で「時間主導型」を選択
時間ベースのトリガーのタイプを選択で「日付ベースのタイマー」を選択
時刻を選択で「午前7時 〜8時」を選択
保存をクリック
STEP5 テスト
- 時間が来る前に手動で実行する。 GAS のスクリプトエディタのプロジェクトの「実行」>「関数を実行」>「weatherForecast」をクリック
LINEに通知が来ることを確認
午前7時から8時にLINEに通知が来ることを確認
感想
GASがすごい便利だ。これが無料なんて。。
簡単にできて、かつ、有用なツールができて嬉しい。
GASとpython でもっと何か作りつつ向上させたい。
参考
https://qiita.com/iitenkida7/items/576a8226ba6584864d95