【GAS】내일의 출장처에서 비가 내릴 것 같으면 통지한다

개요



Google 캘린더 일정에서 내일 출장 장소를 가져와서 날씨가 비가 오는 경우 Gmail에 알림 이메일을 보냅니다.
LINE이나 Slack에 보내고 싶은 분은 API 두드려 주세요.

우이


  • Google 캘린더에 약속 및 위치 추가
  • 1일전에 예정된 장소가 비면 메일이 온다


  • 흐름


  • 캘린더에서 내일 일정 얻기
  • 그 장소를 꺼내
  • 참고 자료 2의 URL을 두드려 날씨 정보를 얻는다
  • 비오는 경우 메일 보내기

  • 출처


    function sendEmailForWeather() {
      const today = new Date();
      //dayLater が1なら明日、2なら明後日、3以降はお天気データが無いので無理です
      const dayLater = 1;
      //ミリ秒変換による次の日の取得 
      const date = new Date(today.getTime() + dayLater * 24 * 60 * 60 * 1000);
      //明日の予定の取得
      const events = getEventsByDate(date);
    
      events.map(function(e) {
        //CityIDの取得(細かくすると面倒臭かったのでその県の県庁所在地のCityIDを取得)
        const cityId = getCityIdByLocation(e.getLocation())
        if(cityId != null){
          const obj = JSON.parse(UrlFetchApp.fetch('http://weather.livedoor.com/forecast/webservice/json/v1?city=' + cityId));
          const weather = obj.forecasts[dayLater].image.title;
          if(weather.indexOf("") >= 0) {
            const body = "" + e.getTitle() + "\n" + date + "\n" + e.getLocation() + "\n" + weather;
            GmailApp.sendEmail('xxx@Eメール.アドレス', '予定の場所で天気が悪そうです', body);
          }
        } 
      })
    
      function getEventsByDate(date) {
        const calendarId = "カレンダーID";
        const calendar = CalendarApp.getCalendarById(calendarId);
        return calendar.getEventsForDay(date);
      }
      //CityIDの取得はいい方法ありそうだが、調べるのもっ面倒なので県の最初の2文字をkeyとして県庁所在地のCityIDをvalueとした
      function getCityIdByLocation(Location) {
        const cityId = {"北海":016010,"青森":020010,"岩手":030010,"宮城":040010,"秋田":050010,"山形":060010,"福島":070010,"東京":130010,"神奈":140010,"埼玉":110010,"千葉":120010,"茨城":080010,"栃木":090010,"群馬":100010,"山梨":190010,"新潟":150010,"長野":200010,"富山":160010,"石川":170010,"福井":180010,"愛知":230010,"岐阜":210010,"静岡":220010,"三重":240010,"大阪":270000,"兵庫":280010,"京都":260010,"滋賀":250010,"奈良":290010,"和歌":300010,"鳥取":310010,"島根":320010,"岡山":330010,"広島":340010,"山口":350020,"徳島":360010,"香川":370000,"愛媛":380010,"高知":390010,"福岡":400010,"大分":440010,"長崎":420010,"佐賀":410010,"熊本":430010,"宮崎":450010,"鹿児":460010,"沖縄":471010};
        return cityId[Location.slice(0,2)];
      }
    }
    
    

    후기



    2일 후의 날씨밖에 라이브 도어로는 잡을 수 없기 때문에 1주일 후의 날씨를 원하시는 분은 그러한 서비스 찾아보세요. CityID도 현청 소재지의 날씨로 속이고 있으므로 홋카이도라든지라면 맞지 않습니다.

    참고 자료


  • 【Google Apps Script】날씨 예보를 Web API로 취득하는 방법
  • 날씨 웹 서비스 사양 - Weather Hacks - livedoor 날씨 정보
  • livedoor Weather Hacks API로 날씨 데이터의 JSON을 취득하기 위한 1차 세분구(city 태그)의 지역 id 일람 정리
  • Class Calendar | Apps Script | Google Developers
  • Date - JavaScript | MDN

  • 업데이트

    좋은 웹페이지 즐겨찾기