개발자의 끄적끄적

[API] 구글 캘린더 API 사용법 [펌] 본문

개발

[API] 구글 캘린더 API 사용법 [펌]

효벨 2020. 3. 20. 01:00
728x90
반응형

[API] 구글 캘린더 API 사용법 [펌]

 

1.Google Console에서 API키 얻기

Google Console 사이트

1) 캘린더 라이브러리

라이브러리를 누릅니다.

calendar를 검색하고

사용설정을 합니다.

사용자 인증 정보로 갑니다.

사용자 인증 정보 만들기에서API 키를 만듭니다.

키 제한을 할 수 있습니다.

calendar만 사용할수 있게 제한을 할 수 있습니다.

2.캘린더에서 ID 얻기

Google Calendar 사이트

1) 캘린더

원하는 캘린더에설정 및 공유를 들어갑니다.

캘린더 엑세스 권한을 설정합니다.

캘린더 ID를 얻었습니다 🎉🎉🎉

https://www.googleapis.com/calendar/v3/calendars/${calendarID}/events?orderBy=startTime&singleEvents=true&timeMax=${maxTime}&timeMin=${minTime}&key=${googleKey}

${calendarID}는 찾은 calendarID 를 입력해 줍니다.
${googleKey}는 googleKey를 입력해 줍니다.
${minTime}검색할 최소 날짜를 입력해 줍니다.
${maxTime}검색할 최대 날짜를 입력해 줍니다.

시간은 RFC3339 룰을 사용합니다.

minTime를 2019-05-23T00:00:00Z
maxTime 2019-05-25T00:00:00Z

를 해보겠습니다.

calendarID 입력
googleKey 입력
최소 ~ 최대 일정 입력
~(결과값 간단히 보기)
캘린더 조회

3.Lambda 코드

1) Code

const https = require('https');
const util = require('util');

exports.handler = (event, context, callback) => {
  var todayDate = new Date();
  // var yesterdayDate = new Date(todayDate.getTime() - 1000*60*60*24);
  // var tomorrowDate = new Date(todayDate.getTime() + 1000*60*60*24);
  // var twoDayAgoDate = new Date(todayDate.getTime() + 1000*60*60*24*2);

  var calendarID = "";
  var googleKey = "";
  requestAPI({
    "method": "GET",
    "port": 443,
    "hostname": "www.googleapis.com",
    "path": `/calendar/v3/calendars/${calendarID}/events?orderBy=startTime&singleEvents=true&timeMax=${maxRFC3339(todayDate)}&timeMin=${minRFC3339(todayDate)}&key=${googleKey}`,
    "content": "",
  }, function(data) {
    var data = JSON.parse(data);
    console.log(data);
  }, function(e) {
    console.log(e);
  });

  const response = {
    statusCode: 200,
    headers: {"Access-Control-Allow-Origin": "*"},
    body: "Success"
  };
  callback(null, response);
};

// 통신 API
function requestAPI(request, callback, errorCallback) {
  const options = {
      method: (request["method"] || "GET"),
      hostname: (request["hostname"] || ""),
      port: (request["port"] || 443),
      headers: (request["headers"] || {"Content-Type": "application/json"}),
      path: (request["path"] || "")
  };
  const req = https.request(options, (res) => {
    res.setEncoding('utf8');
    var body = '';
    res.on('data', (chunk) => {
      body = body + chunk;
    });
    res.on('end',function() {
      if (res.statusCode == 200 || res.statusCode == '200') {
        callback(body);
      } else {
        errorCallback(`statusCode Error: ${res.statusCode}`);
      }
    });
  });
  req.on('error', function (e) {
      errorCallback(e.responseText)
  });
  req.write(util.format("%j", (request["content"] || "")));
  req.end();
}

// 시간
function minRFC3339(date) {
  var year = date.getFullYear();
  var month = (date.getMonth() + 1 < 10) ? `0${date.getMonth() + 1}` : `${date.getMonth() + 1}`;
  var day  = (date.getDate() < 10) ? `0${date.getDate()}` : `${date.getDate()}`;
  return `${year}-${month}-${day}T00:00:00Z`;
}

// 시간
function maxRFC3339(date) {
  var year = date.getFullYear();
  var month = (date.getMonth() + 1 < 10) ? `0${date.getMonth() + 1}` : `${date.getMonth() + 1}`;
  var day  = (date.getDate() < 10) ? `0${date.getDate()}` : `${date.getDate()}`;
  return `${year}-${month}-${day}T23:59:59Z`;
}

 

출처 : https://docfriends.github.io/DevStrory/2019-05-24/google-calendar/

반응형
Comments