天気予報を取得してLINEに通知を送る


はじめに

学校でちょっとかじった程度のプログラム初心者です。
このご時世プログラムくらい書けるようになっておくべきだろう、という軽い動機で勉強してみることにしました。
まずはじめに、指南ページに載っていた題材に手を出してみました。

使用言語はGoogleAppsScriptです。
よく調べずに選びましたが、開発環境を整えなくてもすぐ作業に取りかかれるところ、
自動実行の設定が簡単なところなどが決め手になりました。

構成

livedoor天気のWeb API(json形式)を取得
http://weather.livedoor.com/weather_hacks/webservice

必要なお天気情報を取り出しテキストを整形
 今日明日の天気と最高/最低気温

LINE Notifyにテキストを送る

コード

main
//LineNotifyにメッセージを送信
function sendHttpPost(message){
  var token = "--LineNotify token--";
  var options =
   {
     "method"  : "post",
     "payload" : "message=" + message,
     "headers" : {"Authorization" : "Bearer "+ token}

   };

   UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}

//メインルーチン
function whetherMailDay() {
  //livedoor天気からjson形式のWEBAPIをリクエスト
  var response = UrlFetchApp.fetch("--json URL--");
  var json=JSON.parse(response.getContentText());

  //jsonから日時を取り出してdateに格納
  //日時の表示形式をYYYY-MM-DDからMM/DDに変換
  var date = new Array(2);
  for (var x = 0; x < 2; x++){
    date[x] = json["forecasts"][x]["date"];
    date[x] = date[x].slice(5);
    date[x] = date[x].replace( /-/g , "/" ) ;
  }

  //気温がnullの場合--に変換
  var maxMin = ["max","min"];
  var Temp = new Array(2);
  for(var i = 0; i < 2; i++){
    Temp[i] = new Array(2)
    for(var j = 0; j < 2; j++){
      if(json["forecasts"][i]["temperature"][maxMin[j]] == null){
        Temp[i][j] = "--";
      }else{
        Temp[i][j] = json["forecasts"][i]["temperature"][maxMin[j]]["celsius"];
      }
    }  
  }

  //送信用文字列の作成
  var strBody = "天気予報";
  for(var i = 0;i < 2;i++){
    strBody = strBody + "\n" + date[i] + " : " + json["forecasts"][i]["telop"]
            + "\n" + "最低気温 : " + Temp[i][1] + "℃  最高気温 : " + Temp[i][0] + "";
  };

  sendHttpPost(strBody);
}

実行結果

天気予報
mm/dd : 雨
最低気温 : --℃ 最高気温 : XX℃
mm/dd : 晴
最低気温 : XX℃ 最高気温 : XX℃

わかったこと

  • JSON形式の読み込み方
  • LineNotifyへのテキストデータの送り方

課題

  • 別の天気予報APIから降水確率を取得
    • 可能ならXML形式の読み込みに挑戦したい
  • livedoor天気のAPI内にある天気アイコンをLINEに表示させる
    • LineNotifyを通して画像を表示させるには

おわりに

コード的にはほとんどコピペで済むようなものでしたが、APIの中身を理解するのに時間を費やしてしまいました。
天気予報APIを取得する時刻によって、気温にnullが入っている場合があることがわかり、そりゃないだろという感じでした。

参考サイト様