【GAS】天気予報をslackに通知する

どんな感じのものかは↓のtweetのスレッドを見てもらえばイメージできると思う。

季節の変わり目ということもあり、日々の気温が気になる。

そうだ、slackに天気や気温を日々通知するようにしよう!と思い立ち、いくつかのサイトを見ながら天気予報をslackに通知するようにしてみた。

// 今日の天気をslackに通知
function weatherForecastToday() {
  var dateType = 0;
  weatherForecast(dateType);
}

// 明日の天気をslackに通知
function weatherForecastTomorrow() {
  var dateType = 1;
  weatherForecast(dateType);
}

function weatherForecast(dateType) {

  var response = UrlFetchApp.fetch("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010"); //URL+cityID
  var json = JSON.parse(response.getContentText());

  var publicTime = json.publicTime //発表時間

  // dateTypeに応じて、今日か明日の天気予報データを取得する
  if(dateType === 0) {
    var forecastData = json.forecasts[0];
  }else{
    var forecastData = json.forecasts[1]; 
  }  
  var date = forecastData.date; // 予報の日付
  var telop = telopMessage(forecastData.telop); //天気(例: 晴れ)

  //気温: 取れないときがあるので制御する
  if(forecastData.temperature.min !== null) {
    var tempMin = forecastData.temperature.min.celsius; // 最低気温
  } else {
    var tempMin = "- "
  }

  if(forecastData.temperature.max !== null) {
    var tempMax = forecastData.temperature.max.celsius; // 最高気温
  } else {
    var tempMax = "- "
  }
  
  if(dateType === 0){
    var dateMessage = ":red_circle: 今日の天気\n"
  }else{
    var dateMessage = ":large_blue_circle: 明日の天気\n"
  }

  // メッセージ文を作成してslackに送信
  var messageBody =  dateMessage + date + "の天気: " + telop + "\n最低気温: " + tempMin + "℃" + " 最高気温: " + tempMax + "℃" + "\n\n発表時間:" + publicTime;
  sendSlackMessage(messageBody);
}

//天気の文字列を見て、絵文字を追加する
function telopMessage(telop) {
  switch (telop) {
    case "晴時々曇":
      return telop = ":sunny:→:cloud: " + telop;
      break;
    case "曇り":
      return telop = ":cloud: " + telop;
      break;
    case "曇時々雨":
      return telop = ":cloud:→:rain_cloud: " + telop;
      break;
    case "晴れ":
      return telop = ":sunny: " + telop;
      break;
    default:
      return telop;
  }
}

function sendSlackMessage(message) {

  var postUrl = 'https://hooks.slack.com/***********'; 
  // postUrl の設定はここを参照した https://qiita.com/chihiro/items/c7b11abc78f5d806c3a8
  var username = '天気bot';  // 通知時に表示されるユーザー名
  var icon = ':mostly_sunny:';  // 通知時に表示されるアイコン
  var jsonData =
  {
     "username" : username,
     "icon_emoji": icon,
     "text" : message
  };
  var payload = JSON.stringify(jsonData);
  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };
  UrlFetchApp.fetch(postUrl, options);
}


最初は 今日の天気を通知する関数と、明日の天気を通知する関数のそれぞれでほぼ同じコードを書いていたのでどちらからも利用できるように別の関数に切り出すなどにチャレンジしてみた。

あとは
– 今日の天気を起床する時間帯に通知
– 明日の天気を就寝前の時間帯に通知
するようにトリガーで設定した。

これで前日との気温差に敏感になって、服装選びも失敗しにくいはずだ。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください