无法使用Google日历Api阻止空间

时间:2017-02-17 09:40:02

标签: google-api google-calendar-api google-api-java-client google-admin-sdk service-accounts

这是我的java代码使用此代码我正在尝试创建具有房间的事件(使用资源Google Calendar API添加房间)事件创建成功完全与房间A.但是当我在Google日历中查看并尝试查看可用房间时那个房间可用。我希望它不应该显示或它应该显示与罢工可以任何人请告诉我这个问题的解决方案我在做错误是有许可问题请建议我。

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("account@gmail.com"),
             new EventAttendee().setEmail("anil@gmail.com"), new EventAttendee().
         setEmail("company.com_35353134363037362d333130@resource.calendar.google.com").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();

 }

2 个答案:

答案 0 :(得分:2)

您正在使用服务帐户。您需要记住的是,服务帐户不是您。服务帐户拥有自己的Google日历帐户主帐户是其主要日历。

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

这将向服务帐户主Google日历添加一个事件,您无法在网络上直观地看到该事件。

您是否尝试过在代码中执行events.list这应该会向您显示服务帐户Google日历上的事件。

如果您希望能够直观地看到这一点,我建议您在自己的个人Google日历帐户中创建日历,并通过与服务帐户电子邮件地址共享来授予您的服务帐户访问权限。

我的博文关于service accounts

答案 1 :(得分:0)

大家好,经过长时间搜索谷歌我找到了解决方案。

创建事件Google事件的步骤。

步骤1:设置以下范围以授权api。

  1. https://www.googleapis.com/auth/calendar.readonly
  2. https://www.googleapis.com/auth/calendar
  3. 步骤2:虽然授权要求管理和查看日历的权限,但使用必须允许它。 哪个会生成授权码。

    步骤3:按生成的授权码创建access_token

    第4步:将生成的access_token传递给疯狂的Google事件。

    用于创建Google事件的Java代码

    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();
    
    }
    

    这些步骤在使用Google日历api创建活动时为我阻止空间。

    我尝试过使用服务帐户的其他方式,在这种情况下,我们可以创建活动,但无法阻止空间。