package org.manalith.ircbot.plugin.google; import java.io.File; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.manalith.ircbot.common.stereotype.BotCommand; import org.manalith.ircbot.plugin.SimplePlugin; import org.springframework.stereotype.Component; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.DateTime; import com.google.api.services.calendar.Calendar; import com.google.api.services.calendar.CalendarScopes; import com.google.api.services.calendar.model.Event; @Component public class CalendarPlugin extends SimplePlugin { private static final SimpleDateFormat FORMAT = new SimpleDateFormat( "yyyy-MM-dd a hh:mm"); private String appName; private String accountId; private String p12path; private String calendarId; private final JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); @Override public String getName() { return "구글 달력 플러그인"; } @BotCommand({ "다음일정" }) public String getCalendar() throws Exception { GoogleCredential credentials = new GoogleCredential.Builder() .setTransport(GoogleNetHttpTransport.newTrustedTransport()) .setJsonFactory(jsonFactory) .setServiceAccountId(accountId) .setServiceAccountScopes( Arrays.asList(CalendarScopes.CALENDAR_READONLY)) .setServiceAccountPrivateKeyFromP12File(new File(p12path)) .build(); Calendar client = new Calendar.Builder( GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, credentials).setApplicationName(appName).build(); List<Event> events = client.events().list(calendarId).setMaxResults(1) .setTimeMin(new DateTime(new Date())).setOrderBy("startTime") .setSingleEvents(true).execute().getItems(); if (!events.isEmpty()) { Event event = events.get(0); return String.format( "%s : %s %s - %s", FORMAT.format(new Date(event.getStart().getDateTime() .getValue())), StringUtils.defaultIfBlank(event.getSummary(), ""), StringUtils.defaultIfBlank(event.getDescription(), ""), event.getCreator().getDisplayName()).replace("\n", ""); } return "표시할 내용이 없습니다."; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getAccountId() { return accountId; } public void setAccountId(String accountId) { this.accountId = accountId; } public String getP12path() { return p12path; } public void setP12path(String p12path) { this.p12path = p12path; } public String getCalendarId() { return calendarId; } public void setCalendarId(String calendarId) { this.calendarId = calendarId; } }