채팅에서 Google 캘린더 사용하기

12525 단어 googleapiNode.js
기념해야 할 첫 투고(비망록)인데 이런 내용으로 좋을까…

1. 왜 만들었다…



일 사이에, 어쩐지 「채팅 앱으로 Google Calendar를 조작할 수 없을까」라고 말해진다.

1-1. 왜 REST API



GCM은 서투르고, 다만 Azure Function를 만지기 때문에 그 연장에.

1-2. 어떤 것을 만들려고 했는가?



텍스트를 자연 언어 분석 → Function으로 나누어 Google Calendar API 메서드를 실행
→ 채팅에 결과 표시

2. 거친 구성



2-1. Google APIs



먼저 API를 활성화하고 서비스 계정을 만들어 여기에서 사용할 privatekey를 만듭니다.



여기에서 Google Calendar API를 선택하고 활성화하면 기존 프로젝트와 새 프로젝트에서 API를 사용할 수 있습니다.



콘솔에서 인증 가능한 경우 OAuth 키 게시 → 기타를 선택하면 google-auth-library에서 사용할 client_secret.json을 게시 할 수 있습니다. 이번에는 콘솔에서 박는 것은 무리이므로 서비스 계정 작성에.
작성이 끝나면 자동으로 토큰 등이 기입되어 있는 json 파일이 다운로드되므로 privatekey.json에 명명.
업로드해 둡시다.

2-2. Azure Function



Web App 자체는 무엇이든 좋다. 필자, 프로그래밍 첫해에 Node.js의 기초 정도밖에 알 수 없는 상태.
Google Apis는 Firebase를 권장하지만 이번에는 Azure 샘플을 활용하기 위해 여기에.
향후 샘플 작성한다면 배포까지 간단한 GCM을 추천.

어쨌든, Example대로 만들려고하면 google-auth-library와 함께 인증해야합니다.
하지만 이것은 콘솔에서 토큰을 되풀이해야하며 상호 작용할 수 없다 (필자의 능력 부족일지도 모르지만) Function APP나 임베디드 된 어플리케이션을 위해 준비된 JWT를 사용.

NPM에서 제공하는 googleapis 모듈을 가져와 첫 번째 인증을.

Function의 index.js
let jwtClient = new google.auth.JWT(
  privatekey.client_email,
  null,
  SCOPES: ['https://www.googleapis.com/auth/calendar.readonly'],
  null
); 

jwtClient.authorize(function (err, tokens) {
  if(err) { 
    console.log("auth err: " + err);
    return;
  } else { 
    console.log("auth done"); 
    {APIsに用意されているメソッド)
  }
});    

JWT(Json Web Token)는, OAuth2등에서 준비한 프라이빗 키를 가지고 인증원과 교환을 실시하는 역할.
자세한 내용은 여기를 참조
· JWT (JSON Web Token)를 사용하여 인증 시도
· Using OAuth 2.0 for Server to Server Applications

그리고, 메소드는 APIs Explorer 로 지정하고 있는 값을 JSON 로 건네줄 수 있습니다.

Sample_Method.js
function listEvents(auth) {
  console.log("listing Events");
  var calendar = google.calendar('v3');

  calendar.events.list({
    auth: auth,
    calendarId: {カレンダーのID},
    timeMin: (new Date()).toISOString(),
    maxResults: 10,
    singleEvents: true,
    orderBy: 'startTime'
  }, function(err, response) {
    if (err) {
      console.log(err);
      return;
    } else {
      var events = response.items;
      if (events.length == 0) {
        console.log('No upcoming events found.');
      } else {
        async.each(events, (i, next) => {
          var event = i;
          var startTime = event.start.dateTime.slice(11,-6);
          var startMsec = new Date(event.start.dateTime).getTime();
          var endTime = event.end.dateTime.slice(11,-6);
          var endMsec = new Date(event.end.dateTime).getTime();
          var during = ((endMsec - startMsec)/60000) + " MIN";
          var start = event.start.dateTime || event.start.date;
          var eventId = event.id;
          console.log('%s (%s) - %s (%s)', startTime, during, event.summary, eventId);
        }, (err) => {
           if(err) throw err;
        });
      }
    }
  });
}

2-3. Google Calendar



· 오래된 UI



· 새로운 UI


캘린더 ID는 캘린더 설정에서 확인하세요.

권한은 calendar.events.list등은 열람까지로, insert등을 실시하기 위해서는 writer 이상의 권한이 필요합니다.


SCOPE도 readonly를 제거해야합니다. 여러 번 변경을 잊었기 때문에주의.

3. 감상



일부러 채팅으로 캘린더를 사용한다니, 좀처럼 없는구나라고 생각하면서, Google APIs의 공부가 되었다고는 생각했습니다. 이상.

좋은 웹페이지 즐겨찾기