【问题标题】:get google calendar id from an email address从电子邮件地址获取谷歌日历 ID
【发布时间】:2020-08-07 23:55:30
【问题描述】:

我正在使用 服务帐户 service@entreprise.tn 在 Google 日历上插入一个新活动。

我无法指定eventorganizercreator。 我的代码是:

            Organizer organizer = new Organizer().setEmail("user1@entreprise.tn").setSelf(true);
            Creator creator = new Creator().setEmail("user1@entreprise.tn").setSelf(true);

            Calendar service = Calendar_Utils.getCalendarService();
            Event event = new Event()
                         .setSummary("Google Calendar API")
                         .setOrganizer(organizer)
                         .setCreator(creator);

            DateTime startDateTime = new DateTime("2020-04-24T09:00:00.000Z");
            EventDateTime start = new EventDateTime()
                                  .setDateTime(startDateTime)
                                  .setTimeZone("Africa/Tunis");
            event.setStart(start);

            DateTime endDateTime = new DateTime("2020-04-24T10:30:00.000Z");
            EventDateTime end = new EventDateTime()
                                .setDateTime(endDateTime)
                                .setTimeZone("Africa/Tunis");
            event.setEnd(end);

            String calendarId = "primary";
            event = service.events().insert(calendarId, event).execute();
            System.out.printf("Event created: %s\n", event.getHtmlLink() + " - " + event.getOrganizer() + " - " + event.getCreator());

因此,新事件被插入,但组织者和创建者 service@entreprise.tn 而不是 user1@entreprise.tn

您能告诉我如何更改我的代码以将组织者设置为user1@entreprise.tn

非常感谢。

【问题讨论】:

  • 嗨,你有什么比接受的更好的解决方案吗?我真的需要知道。提前致谢

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


【解决方案1】:

当您使用服务帐户创建事件时,您需要 impersonate 代表其创建事件的用户

在 Java 中,你可以这样做:

    GoogleCredential getCredentials = new GoogleCredential.Builder()
     .setTransport(HTTP_TRANSPORT)
     .setJsonFactory(JSON_FACTORY)
     .setServiceAccountId(serviceAccount)
     .setServiceAccountPrivateKeyFromP12File(pk12)
     .setServiceAccountScopes(SCOPES)
     .setServiceAccountUser("user1@entreprise.tn") 
     .build();

【讨论】:

  • 您好@ziganotschka 先生,非常感谢您的回复。但是如果有很多用户,我会怎么做。我有一个用户列表,然后我会循环该列表:对于每个用户,我都会为该用户创建一个事件,该用户必须是组织者
  • 不幸的是,在这种情况下,您需要在每次迭代中为每个模拟用户构建新的服务帐户凭据。如果您在每次迭代期间调用凭据生成器将用户作为参数传递给它,则应该不是问题。
  • 感谢先生的回复,我正在与大约 500 个用户一起工作,我认为这将很难管理。如果您不介意,在这种情况下您是否需要另一种解决方案来管理大量用户?非常感谢先生..
  • 很抱歉不得不告诉你这一点,但正如你在documentation - creatororganizer 中看到的那样,它们是只读的,所以你不能手动设置它们。唯一的方法是冒充您希望成为活动创建者或组织者的用户。
  • 感谢先生的回复。好的,所以我去模拟用户。
【解决方案2】:

执行events.patch 并更新Event 上的组织者字段,默认情况下,组织者属性设置为创建事件的人员或服务帐户。

假冒

如果服务帐户已设置为 gsuie 域的全域委派,您可以模拟该域中的一个用户,组织者将是被模拟的用户。

【讨论】:

  • 非常感谢 @DalmTo 先生,我有一个用户列表,对于每个用户,例如用户 1,我去创建必须是组织者的联合国活动,因此必须更改组织者为每个用户。
猜你喜欢
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多