LoginSignup
2
2

More than 3 years have passed since last update.

【GAS×LINEmessagingAPI】雨予報BOTを作ってみた!!!

Last updated at Posted at 2020-08-13

はじめに

私は留学をきっかけにプログラミングを学び始めた理系大学生です。
前回今日の予定や天気を教えてくれるチャットボットを作成したのですが、知り合いやinteeの講師の方から現在地から雨予報を教えてくれるものがあると便利というアドバイスをいただき、前回学んだ知識を応用したら実装できると思ったので作成しました。
プログラミング初心者なので、コメントでアドバイスなどありましたら、とても嬉しいです!!
前回の記事はこちら

API一覧

イメージ

LINEには位置情報を送信する機能があるので、位置情報から緯度経度を取得してそれを使ってYOLPにリクエストを送り、雨の情報を取得する。

手順

  1. 位置情報から緯度経度を取得する。
  2. それを使って前回書いたコードから雨予報を得る。
  3. 送信されたメッセージが位置情報でない場合の処理を書く。
  4. リッチメニューから位置情報を送れるようにする。

コード

メイン処理

// LINE developersのアクセストークン
var ACCESS_TOKEN = '';

function doPost(e) {
  // WebHookで受信した応答用Token
  var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
  // 位置情報から緯度経度を取得
  var lat = JSON.parse(e.postData.contents).events[0].message.latitude;
  var lon = JSON.parse(e.postData.contents).events[0].message.longitude;
  // 応答メッセージ用のAPI URL
  var url = 'https://api.line.me/v2/bot/message/reply';
  var text = '';
 // 位置情報かそれ以外かで処理を分ける
  if(JSON.parse(e.postData.contents).events[0].message.type === 'location'){
    text = main(lat, lon);
  }else{

  }
  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': text,
      }],
    }),
    });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

降雨量取得

function main(lat, lon){
  //YOLPのID
  var appId = '';
  var place = lon + "," + lat;
 //リクエストURL
  var url_yahoo = "https://map.yahooapis.jp/weather/V1/place?coordinates=" + place + "&output=json&appid=" + appId;
  var response_rain = UrlFetchApp.fetch(url_yahoo);
  var json_rain = JSON.parse(response_rain.getContentText());
  var scr = '';
  var text = "";
  //YOLPで1時間後まで雨量取得
  for(var i=1; i<7; i++){
    if(json_rain['Feature'][0]['Property']['WeatherList']['Weather'][i]['Rainfall'] > 0.00){
          var time = json_rain['Feature'][0]['Property']['WeatherList']['Weather'][i]['Date'];
          var rainfall_time = time.split('');
          scr += rainfall_time[8] + rainfall_time[9] + '' + rainfall_time[10] + rainfall_time[11] + '分に' + json_rain['Feature'][0]['Property']['WeatherList']['Weather'][i]['Rainfall'] + 'mm/h' + 'の雨が降るようです。' + '\n';
     }
  }
 //降る場合と降らない場合
  if(scr.length > 0){
 //見た目をよくする
        var scr1 = scr.slice(0, -1);
        text += scr1;
  }else{
        text += '1時間以内に雨は降らないようです。';
  }
  return text;
}

完成したもの

IMG_0022.PNG

まとめ

アドバイスをもらってそこから新しいものを生み出した経験は大きかったです。
この経験をまた次に生かしたいです。
また、今回作成したものでは雨の情報しか得られないので、他のAPIを探して機能を追加してより良いものにしていきたいです。
よければ皆さんも使ってみてください!!!
雨_QR.png
最後に、何かアドバイスがあればよろしくお願いします!

2
2
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
2