【GAS】내일의 출장처에서 비가 내릴 것 같으면 통지한다
개요
Google 캘린더 일정에서 내일 출장 장소를 가져와서 날씨가 비가 오는 경우 Gmail에 알림 이메일을 보냅니다.
LINE이나 Slack에 보내고 싶은 분은 API 두드려 주세요.
우이
흐름
출처
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도 현청 소재지의 날씨로 속이고 있으므로 홋카이도라든지라면 맞지 않습니다.
참고 자료
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도 현청 소재지의 날씨로 속이고 있으므로 홋카이도라든지라면 맞지 않습니다.
참고 자료
업데이트
Reference
이 문제에 관하여(【GAS】내일의 출장처에서 비가 내릴 것 같으면 통지한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/golyat/items/27a85c0871a79e8d5b8f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【GAS】내일의 출장처에서 비가 내릴 것 같으면 통지한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/golyat/items/27a85c0871a79e8d5b8f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)