본문 바로가기
개발/Spring

스프링 부트에서 구글 API 연동 (2) Calendar API 사용하기

by Kingbbode 2016. 6. 22.



 이전 글에 이어 Spring Boot Application에서 Calendar API 사용하는 내용입니다.


 이 전 글 Spring Boot Application에서 구글 Calendar API 연동 (1) 내용은 대부분의 구글 API에서 필요로하는 구글 Oauth 인증에 대한 내용이였고 다음은 Calendar 서비스를 생성하는 과정 입니다. 


 이전 글 에서 생성한 Util에 Calendar 서비스를 생성하는 메소드를 작성하였습니다.


1
2
3
4
5
6
7
8
9
10
11
public static com.google.api.services.calendar.Calendar getCalendarService() {
        try {
            Credential credential = authorize();
            return new com.google.api.services.calendar.Calendar.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY, credential)
                    .setApplicationName(APPLICATION_NAME)
                    .build();
        }catch(Exception e){
            return null;
        }
    }
cs


 Dependency로 추가하였던 Calendar 라이브러리와 위 과정의 구글 인증 객체인 credential을 사용하여 Canlendar 서비스를 생성합니다.


 이제 생성된 Canlendar 서비스를 사용해보겠습니다. google api에서 제공해주는 Calendar 서비스는 API 호출을 쉽게 도와주는 서비스입니다. API Reference를 통해 사용할 수 있는 기능을 확인할 수 있습니다.

 

 이 서비스를 통해 Oauth 로그인한 계정에서 접근 가능한 달력을 가져올 수 있습니다. 조회를 원하는 달력의 고유 id를 이용하여 조회가 가능합니다. 




 조회를 원하는 달력의 환경설정을 들어가면 캘린더ID를 확인할 수 있습니다. 이 값을 서비스의 키 값으로 조회를 할 수 있습니다. 저는 Calendar 서비스의 events.list를 사용하여 현재 시간으로부터 특정 시간까지 해당 달력의 모든 일정을  가져오려고 합니다. list에 key 값으로 사용될 캘린더 ID를 입력합니다.


1
2
3
4
5
6
7
Events events = service.events().list(MeetingRoomId)
                        .setMaxResults(100)
                        .setTimeMin(now)
                        .setTimeMax(max)
                        .setOrderBy("startTime")
                        .setSingleEvents(true)
                        .execute();     
cs


 

 API 라이브러리의 서비스는 쿼리 작성을 하듯이 사용할 수 있는 옵션을 메소드로 사용할 수 있게 도와줍니다. 현재 시간으로붙터 max 시간까지의 해당 달력 일정을 조회하게 됩니다. 

 여기서 주의할 점은 여기에서 사용하는 시간 객체 DateTime은 구글에서 제공하는 DateTime 객체 입니다. joda의 DateTime이라고 생각하면 안됩니다 서로 간의 컨버트도 되지 않아 Date 객체를 중각 객체로 사용하여 컨버팅을 할 수 있습니다.

 쿼리를 만들고 execute를 실행하면 구글 API 서버로 요청이 가고 응답이 오게 됩니다.


1
2
3
4
5
6
7
8
 List<Event> items = events.getItems();
 if (items.size() == 0) {
      return "모든 시간 비어있습니다.";
 } else {
    for (int i = 0; i < items.size(); i++) {
        ...
    }
 }
cs


 list를 요청했다면 Events를 Response로 반환하게 됩니다. Events 객체는 getItems를 통해 List<Event> 객체를 볼 수 있습니다. 각 API의 API Referance를 보고 원하는 기능을 만드시기 바랍니다!



댓글