【GAS×LINEmessagingAPI】비 예보 BOT를 만들어 보았다! ! !

소개



저는 유학을 계기로 프로그래밍을 배우기 시작한 이계대학생입니다.
전회 오늘의 예정이나 날씨를 가르쳐 주는 챗봇을 작성했습니다만, 아는 사람이나 intee의 강사로부터 현재지로부터 비 예보를 가르쳐 주는 것이 있으면 편리하다고 하는 어드바이스를 받고, 전회 배운 지식을 응용하면 구현할 수 있다고 생각했기 때문에 작성했습니다.
프로그래밍 초보자이므로 코멘트에서 조언 등이 있으면 매우 기쁩니다! !
마지막 기사는 여기 .

API 목록


  • GoogleAppsScript
  • LINEMessagingAPI
  • YOLP 기상 정보 API

  • 이미지



    LINE에는 위치 정보를 전송하는 기능이 있으므로 위치 정보에서 위도 경도를 취득하고 그것을 사용하여 YOLP에 요청을 보내 비 정보를 취득한다.

    절차


  • 위치 정보로부터 위도 경도를 취득한다.
  • 그것을 사용해 전회 쓴 코드로부터 비 예보를 얻는다.
  • 송신 된 메시지가 위치 정보가 아닌 경우의 처리를 작성한다.
  • 리치 메뉴에서 위치 정보를 보낼 수 있습니다.

  • 코드



    메인 처리


    // 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;
    }
    

    완성된 것





    요약



    조언을 받고 거기에서 새로운 것을 만들어낸 경험은 컸다.
    이 경험을 또 다음에 살리고 싶습니다.
    또, 이번 작성한 것으로는 비의 정보 밖에 얻을 수 없기 때문에, 다른 API를 찾아 기능을 추가해 보다 좋은 것으로 해 가고 싶습니다.
    원한다면 여러분도 사용해보십시오! ! !

    마지막으로, 뭔가 조언이 있으면 잘 부탁드립니다!

    좋은 웹페이지 즐겨찾기