8

이 코드를 사용하는 자바 코드입니다. 방 (리소스 Google 캘린더 API를 사용하여 방이 추가됨) 이벤트가 방 A로 완전히 생성 된 이벤트입니다. 그러나 체크인 할 때 Google 캘린더를 사용하여 방을 사용할 수 있는지 확인하십시오. 나는 그것이 표시되지 않아야하거나 파업으로 보여 주어야한다고 기대할 수 있습니다. 어느 한 사람이이 문제에 대한 해결책을 말해 줄 수 있습니까? 나는 실수를하고 있습니다.Google 캘린더를 사용하여 회의실을 차단할 수 없습니다. Api

public class CalendarQuickstart { 

private static final String APPLICATION_NAME = "API Quickstart"; 


private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), 
    ".credentials/calendar-java-quickstart"); 


private static FileDataStoreFactory DATA_STORE_FACTORY; 


private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 


private static HttpTransport HTTP_TRANSPORT; 

private static final List <String> SCOPES = Arrays.asList(CalendarScopes.CALENDAR); 

static { 
    try { 
     HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
     DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
     System.exit(1); 
    } 
} 



public static Credential authorize() throws IOException { 
    // Load client secrets. 
    /*InputStream in = CalendarQuickstart.class.getResourceAsStream("/client_secret.json"); 
     GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 

     // Build flow and trigger user authorization request. 
     GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, 
       clientSecrets, SCOPES).setDataStoreFactory(DATA_STORE_FACTORY).setAccessType("offline").build(); 
     Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); 
     System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
     return credential;*/ 
    Credential credential = GoogleCredential.fromStream(CalendarQuickstart.class.getResourceAsStream("/client_secret.json")) 
     .createScoped(SCOPES); 
    return credential; 
} 

public static com.google.api.services.calendar.Calendar getCalendarService() throws IOException { 
    Credential credential = authorize(); 
    return new com.google.api.services.calendar.Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
     .setApplicationName(APPLICATION_NAME).build(); 
} 

public static void createEvent() throws IOException { 
    Event event = new Event().setSummary("Google I/O 2015") 
     .setDescription("A chance to hear more about Google's developer products."); 

    DateTime startDateTime = new DateTime("2017-02-27T22:00:00+05:30"); 

    EventDateTime start = new EventDateTime().setDateTime(startDateTime).setTimeZone("Asia/Kolkata"); 
    event.setStart(start); 

    DateTime endDateTime = new DateTime("2017-02-27T23:00:00+05:30"); 
    EventDateTime end = new EventDateTime().setDateTime(endDateTime).setTimeZone("Asia/Kolkata"); 
    event.setEnd(end); 



    EventAttendee[] attendees = new EventAttendee[] { 
     new EventAttendee().setEmail("[email protected]"), 
      new EventAttendee().setEmail("[email protected]"), new EventAttendee(). 
     setEmail("[email protected]m").setResponseStatus("accepted") 
    }; 
    event.setAttendees(Arrays.asList(attendees)); 



    EventReminder[] reminderOverrides = new EventReminder[] { 
     new EventReminder().setMethod("email").setMinutes(24 * 60), 
      new EventReminder().setMethod("popup").setMinutes(10), 
    }; 
    Event.Reminders reminders = new Event.Reminders().setUseDefault(false) 
     .setOverrides(Arrays.asList(reminderOverrides)); 
    event.setReminders(reminders); 

    String calendarId = "primary"; 
    event = getCalendarService().events().insert(calendarId, event).execute(); 
    System.out.printf("Event created: %s\n", event.getId()); 

} 

public static void updateEvent() throws IOException { 


    Event event = getCalendarService().events().get("primary", "3k90eohao76bk3vlgs8k5is6h0").execute(); 


    event.setSummary("Appointment at Somewhere"); 

    // Update the event 
    Event updatedEvent = getCalendarService().events().update("primary", event.getId(), event).execute(); 

    System.out.println(updatedEvent.getUpdated()); 
} 

public static void main(String[] args) throws IOException { 
    com.google.api.services.calendar.Calendar service = getCalendarService(); 


    DateTime now = new DateTime(System.currentTimeMillis()); 
    Events events = service.events().list("primary").setMaxResults(10).setTimeMin(now).setOrderBy("startTime") 
     .setSingleEvents(true).execute(); 


    List <Event> items = events.getItems(); 
    if (items.size() == 0) { 
     System.out.println("No upcoming events found."); 
    } else { 
     System.out.println("\nUpcoming events"); 
     for (Event event: items) { 
      DateTime start = event.getStart().getDateTime(); 
      if (start == null) { 
       start = event.getStart().getDate(); 
      } 
      System.out.printf("%s (%s)\n", event.getSummary(), start); 
     } 
    } 

    createEvent(); 

} 
+0

서비스 계정 또는 Oauth2와 같은 종류의 Java를 oauth2와 같이 사용하고 계십니까? – DaImTo

+0

예 서비스 계정 @DalmTo –

+0

@DalmTo 어떤 해결책이든지 제안 해주세요. 해결 방법은 없는지 제안 해주세요. 그것은 오랜 시간부터 –

답변

0

안녕 모두 구글에서 긴 검색 후 나는 해결책을 발견.

이벤트 google 이벤트를 만드는 단계입니다.

1 단계 : 다음의 범위를 설정하여 api를 인증하십시오.

  • https://www.googleapis.com/auth/calendar
  • https://www.googleapis.com/auth/calendar.readonly
    1. 2 단계 : 권한을 부여가 관리 할 수있는 권한과보기 달력을 요구하지만, 그것을 허용하는 사용합니다. 이며 인증 코드가 생성됩니다.

      은 3 단계 : 생성 된 인증 코드

      4 단계로 access_token은 만들기 : 구글 이벤트를 craete하는 access_token이 발생 전달합니다.

      자바 코드 구글 이벤트

      public static com.google.api.services.calendar.Calendar getCalendarService() { 
      
           GoogleCredential credential = new GoogleCredential().setAccessToken(access_token); 
      
           return new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build(); 
      
      } 
      

      구글 캘린더 API를 사용하여 이벤트를 생성하는 동안 다음 단계 나를 위해 블록 공간을 작업을 만들 수 있습니다.

      나는 서비스 계정을 사용하여 다른 방법으로 시도했지만 이벤트를 만들 수는 있지만 방을 차단할 수는 없습니다.

    2

    서비스 계정을 사용하고 있습니다. 기억해야 할 것은 서비스 계정이 당신이 아니라는 것입니다. 서비스 계정에는 자체 Google 캘린더 계정이 있습니다. 기본 계정은 기본 캘린더입니다.

    String calendarId = "primary"; 
    event = getCalendarService().events().insert(calendarId, event).execute(); 
    

    이것은 웹에서 시각적으로 볼 수없는 서비스 계정 기본 Google 캘린더에 이벤트를 추가하는 것입니다.

    코드에서 events.list을 (를) 해봤습니까? 그러면 서비스 계정의 Google 캘린더에 이벤트가 표시됩니다.

    시각적으로 볼 수 있도록하려면 개인 Google 캘린더 계정으로 캘린더를 만들고 서비스 계정 이메일 계정과 공유하여 서비스 계정 액세스 권한을 부여하는 것이 좋습니다.

    내 블로그 게시물에 대한 service accounts

    +0

    우리가 서비스 계정을 만들 때 서비스 계정의 이름과 서비스 계정의 역할을 묻는 메시지를 남겨주세요. @DalmTo –

    +0

    언제 까지나 나는 그것이 중요하다고 생각하지 않습니다. – DaImTo

    +0

    @DalmTo 같은 일을 나는 방 A로 만든 이벤트를하고있다.하지만 같은 시간에 다른 이벤트를 만들려고 할 때 방을 보여 주어야한다. 표시되지 않아야하거나 방과 충돌해야한다. –