매일 아침 Slack에 날씨와 일정을 알리는 Google Apps Script

최근 Google Apps Script에 빠지기 시작했기 때문에 기록.

개요


  • 밤이 되면 다음날 Google 캘린더 일정을 Slack에 보냅니다
  • 아침이 되면 그날의 날씨를 Slack으로 통지

  • 라는 기능을 Google Apps Script를 사용하여 구현했습니다.

    기본적으로
    外部API → Google Apps Script → Slack Incoming Webhook
    

    같은 구성으로하고 있습니다.
    여기에 Google Apps Script를 작성하고 실행하면 날씨, 캘린더 등의 정보를 Slack에 전달할 수 있습니다.

    Google Apps Script란?



    Google Apps Script는 Google에서 제공하는 서버측 스크립팅 환경입니다.
    기본적으로 Chrome에서 스크립트를 작성하기만 하면 됩니다.

    이미 좋은 qiita가 가득 찼습니다만, 도입에는 이하의 기사를 참고로 했습니다.
    Google Apps Script 시작

    스니펫



    날씨를 Slack에 알립니다.



    코드.gs
    function getWeatherPostSlack() {
    
        var response = UrlFetchApp.fetch("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010");
    
        var json=JSON.parse(response.getContentText());
    
        Logger.log(json["title"]);
        Logger.log(json["description"]);
        Logger.log(json["forecasts"]);  
    
        var data={
            "text":json["description"]["publicTime"]+json["description"]["text"],
            "username": json["title"],
            "icon_emoji" : ":sunny:"
        }
    
        var options =
        {
            "method" : "POST",
            'contentType': 'application/json',
            'payload' : JSON.stringify(data)
        };
        // SlackのIncoming WebhookのURLを取得して入力
        UrlFetchApp.fetch("https://hooks.slack.com/services/***/***/***", options);
    }
    

    ↓Slack에 이렇게 느낄 수 있습니다.


    Google 캘린더 내일 일정을 Slack에 알립니다.



    코드.gs
    function getCalendarPostSlack() {
    
        var dt = new Date();
        dt.setDate(dt.getDate() + 1);//明日にset
    
        //カレンダーURL、もしくはメールアドレスを取得して入力。
        var myCal=CalendarApp.getCalendarById('*****@group.calendar.google.com');
        var events=myCal.getEventsForDay(dt);
    
        var strBody = "";
    
        // イベントごとにループ
        for(var i_e=0;i_e<events.length;i_e++){
            var strTitle=events[i_e].getTitle();
            var strStart=_HHmm(events[i_e].getStartTime());
            var strEnd=_HHmm(events[i_e].getEndTime());
            strBody=strBody + "`"+strStart + ' - ' + strEnd +"`"+" "+strTitle+ '\n'; //ここはSlackで送りたい文章に合わせて調整
        }
    
        var data={
            "text":strBody,
            "username": "明日の予定",
            "icon_emoji" : ":tokyo_tower:"
        }
    
        var options =
        {
            "method" : "POST",
            'contentType': 'application/json',
            'payload' : JSON.stringify(data)
        };
    
        // SlackのIncoming WebhookのURLを取得して入力
        UrlFetchApp.fetch("https://hooks.slack.com/services/***/***/***", options);
    }
    
    function _HHmm(str){
        return Utilities.formatDate(str, 'JST', 'HH:mm');
    }
    

    ↓Slack에 이렇게 느낄 수 있습니다.



    (추기)
    2018년 4월 현재 Slack의 기본 기능으로 Google 캘린더에서 일정을 알리는 기능이 있습니다.
    다만, 「내일의 예정을 정리해 전날에 통지한다」기능이 존재하지 않기 때문에, 이번 작성했습니다.

    날씨 API 정보



    여러 가지가 있지만 livedoor API를 이용.

    아래와 같은 URL로부터 도쿄도의 날씨 정보를 Json 형식으로 취득합니다.

    API에 대한 참고.
    ht tp // // 헉-아피 s. bgs포 t. jp/2013/03/우바바피. HTML
    htps : //가 되어-t. 이 m/가 s-아피-우아테 r/

    Google Calendar API 정보



    캘린더별 URL에서 정보를 얻을 수 있습니다.

    자신의 캘린더의 URL 취득 등, 이하를 참고로 했습니다. 감사.
    htps : //가 되어-t. 이 m / 가 s- ㅇ
    h tp // w w. 오 ぇ 아 pscri pt.んふぉ / 2017-12-31 / ㄴ r_게 t_안 d_레기s r. HTML

    Slack의 Incoming Webhook URL을 얻는 방법



    Slack의 Webhook URL 획득 절차
    이해하기 쉽습니다.

    제 경우에는 Curl로 보내는 테스트 을 해서 사용하기 시작했습니다.

    실행 시간을 설정하는 방법



    Google Apps Script는 스크립트 실행 시간을 쉽게 지정할 수 있습니다.
    한밤중에 상사에게 Slack을 던지는 봇을 순식간에 만들 수 있군요.

    왼쪽 상단의 시계 표시를 누릅니다.



    시간 설정용 창이 나오므로 원하는 시간으로 설정합니다.


    애초에 webhook은?





    Webhook은 API의 컨셉 중 하나 같다. 요점은 API입니다.
    일반적인 API는 여기에서 API를 호출하여 정보를 받는 반면 Webhook은 서버 측에서 원하는 URL을 호출하는 메커니즘입니다.

    구그라면 야구 감독과 워밍업중인 투수의 예가 나왔습니다.
  • 감독이 전화로 듣는다 (보통 API).
  • 투수의 워밍업이 끝나면 감독에게 전화가 간다 (Webhook)

  • 같은 느낌 같네요.

    Baseball managers could really use webhooks. As the game progresses, they often want to change pitchers. To do this requires the new pitcher to first warm up in the bullpen, which is usually over 300 feet from the team's dugout. television, you'll often see the manager pick up a phone in the dugout. He's making a call to the bullpen to check on the new pitcher.

    “Is he warmed up yet?”
    “Not yet”
    Then he hangs up the phone. In a few minutes he’ll have to call again. Programmers would call this polling and it’s process-intensive for both sides. A webhook lets you say, “call me when he’s warmed up.”

    htps : // 센 dg 리 d. 코 m / b ぉ g / ぇ b 호오 k vs - 아피 ぁ ts - ぢふぇ 렌 세 /

    마지막으로



    잘못된 곳 등이 있으면 지적하십시오.

    좋은 웹페이지 즐겨찾기