株式会社アクシスのアドベントカレンダー16日目の記事です。
GASとAPIで簡単なボットを作ったのでそれを記事にさせて頂きます![]()
突然ですが、アクシスの福岡オフィスは地下にあります。
地下だと当然窓がありません。
外が雨だろうが何だろうがわかりません。
退勤するとき雨が降っていたら傘を取りにもどることもあります。
外の天気が知りたい。。。
調べるのはめんどくさい。。。
ボットをつくりましょう![]()
つくったもの#
・天気の情報を取得しSlackの特定のチャンネルへ投稿するbot
雨が降ってきた時![]()

前提#
・Slackのアカウントがあること
・Googleのアカウントがあること
・Yahoo!のアカウントがあること
使うものとか#
・Google Apps Script###
略称GAS、Googleが提供しているスクリプト言語。
開発環境不要で無料でGooogleのアプリの連携サービスなどが使用できる。
・Yahoo! Open Local Platform###
略称YOLP、Yahoo! JAPANが提供している地図・地域情報のAPI・SDKです。
基本無料で利用できます。今回は気象情報APIを利用します。
https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/weather.html
SlackのIncoming WebHook###
SlackのApp。外部ソースからの情報を簡単にワークスペースのチャンネルに共有することができます。
Slack での Incoming Webhook の利用
手順...#
1.Yahoo! Open Local Platformの登録##
こちらから登録
https://e.developer.yahoo.co.jp/register
登録できたらClient ID が発行されます。
2.Incoming Webhook の設定##
Slackのワークスペースから
設定を管理 > 以下をカスタマイズをクリック
ブラウザが開いたら
サイドメニューから App管理をクリック
Incoming Webhook を検索して
「Slackに追加」をクリック
チャンネルへの投稿 のセレクトボックスから投稿したいチャンネルを選んで
「Incoming Webhook インテグレーションの追加」をクリック
表示された Webhook URL を後で使用します。
3.Google Apps Scriptでコーディング##
グーグルドライブで右クリック
Google Apps Script を選択するとあたらしいファイルが作成されます。
さっきの Client ID と Webhook URL を組み込んでコーディングします。
雨が降ってきたタイミングでチャットを投げるのではなく
10分ごとに降水量を取得してその比較で告知する実装にしています。
function weatherFunction() {
  
  //yolpのAPPID
  var appId = "ここにClient ID";
  // 緯度,経度
  var coordinates = "130.664719" + "," + "33.52813";   // 福岡
  // データ形式
  var output = "json";
  // 10分前の日時
  var date     = new Date();
  var formatDate = Utilities.formatDate(date,'JST','yyyyMMddHHmm');
  
  //YOLPをコール
  var url = "https://map.yahooapis.jp/weather/V1/place?coordinates=" + coordinates
            + "&past=" + 1
            + "&output=" + output
            + "&appid=" + appId 
            + "&date="  + formatDate
            + "&interval=10";
  var response = UrlFetchApp.fetch(url);
  let js = JSON.parse(response.getContentText());
  //YOLPの結果から分前10分前の降水量、と現在の降水量を取得
  var pastRain = js["Feature"][0]["Property"]["WeatherList"]["Weather"][0]["Rainfall"];
  var nowRain = js["Feature"][0]["Property"]["WeatherList"]["Weather"][1]["Rainfall"];
  
  var isPastRain = (pastRain > 0);
  var isNowRain  = (nowRain > 0);
 
  var message = "";
  var icon = "";
 
  // 雨が降ってきた時 
  if(!isPastRain && isNowRain){
   message = "雨が降ってきました!!!!!";
   icon = ":umbrella:"
  }
  //雨が止んだ時
  if(isPastRain && !isNowRain){
   message = "雨が止みました!!!!!";
   icon = ":sunny:"
  }
    
  if(message.length > 0){
    // チャット送信
    sendMessage(message, icon);
  }
}
function sendMessage(message, icon) {
  var postUrl =   'ここに Webhook URL' //'Incoming WebHooksで発行されたURL';
  var username = 'おてんきくん';  // 通知時に表示されるユーザー名
  var jsonData =
  {
     "username" : username,
     "icon_emoji": icon,
     "text" : message
  };
  var payload = JSON.stringify(jsonData);
  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload,
    "muteHttpExceptions" : true
  };
  UrlFetchApp.fetch(postUrl, options);
}
4.トリガーの設定##
Google Apps Script の メニューの 時計のアイコンをクリックします。![]()

右下のトリガーを追加をクリック
ポップアップが開くので以下のように10分ごとに動くように設定します。
出来上がり![]()
感想とか##
緯度、経度はAPIが対応している緯度、経度を記載する必要があります。
今回それがわかっていなくて、はじめデータの取得ができなくてかなり悩みました![]()
下の参考の都市IDリンクに対応した緯度経度の記載があるファイルがあります。
GASとAPIでもっといろいろできることふやしていきたい![]()
参考##
[人気の天気APIをまとめてみた]
(https://qiita.com/cnakano/items/ff3fd90f685f4ca363cc)
Slackの雨通知botを爆速で作る【メッ●●】
都市ID



