LoginSignup
2
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-28

はじめに

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

使用言語は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が入っている場合があることがわかり、そりゃないだろという感じでした。

参考サイト様

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7