【问题标题】:Why is Display Name is not Showing in Calendar Event Attendees?为什么显示名称未显示在日历活动参与者中?
【发布时间】:2017-02-06 18:36:58
【问题描述】:

我正在使用以下代码要点成功检索日历活动参与者:

require_once __DIR__ . '/vendor/autoload.php';
putenv("GOOGLE_APPLICATION_CREDENTIALS=" .  __DIR__ . '/mt-service-account.json');

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setApplicationName("APP NAME");
$client->setSubject("<APPROPRIATE_USER_EMAIL>");
$client->setScopes([
    'https://www.googleapis.com/auth/calendar'
]);

$calendarService = new Google_Service_Calendar($client);

$optParams = array(
    'singleEvents' => true,
    'orderBy'      => 'startTime'
);
$events = $calendarService->events->listEvents('<APPROPRIATE_CALENDAR_ID>', $optParams);

foreach ($events->getItems() as $event) {
  print_r($event->getAttendees());
}

但是,从响应中可以看出,没有返回显示名称。

Array
(
    [0] => Google_Service_Calendar_EventAttendee Object
        (
            [additionalGuests] => 
            [comment] => 
            [displayName] => 
            [email] => johnsmith@domain.com
            [id] => 
            [optional] => 
            [organizer] => 
            [resource] => 
            [responseStatus] => needsAction
            [self] => 
            [internal_gapi_mappings:protected] => Array
                (
                )

            [modelData:protected] => Array
                (
                )

            [processed:protected] => Array
                (
                )

        )
)

有问题的与会者是活动创建者的联系人,在创建活动时,联系人的姓名和电子邮件会出现在类型辅助字段中。

UPDATE NB 事件不是通过 API 创建的。它们是通过 Google 日历(即在浏览器中)创建的。通过在“添加与会者”字段中键入与会者的姓名来添加与会者(Google 类型助手找到了联系人)。目的是以编程方式(即使用 API)检索由 G Suite 日历用户创建的事件详细信息

【问题讨论】:

  • 4 年后,我也遇到了同样的问题。 @Jordan 你知道了吗?

标签: google-calendar-api


【解决方案1】:

我看不到您是如何创建有问题的活动的,但我的猜测是,当创建活动并且与会者添加了他们的显示名称时,他们的显示名称没有作为可选参数插入。

Events.insert

attendees[].displayName string 与会者的姓名(如果有)。可选的。可写

当通过 Google 日历网络视图创建事件时,您只需添加一个用户电子邮件地址。如果所述用户是 Gmail 帐户,则 Google 可以猜测显示名称。如果它不是 Gmail 帐户,那么 google 将无法知道您的用户名是什么,最终显示名称为 null。

attendees": [
    {
     "email": "lme@gmail.com",
     "displayName": "Linda Lawton",
     "organizer": true,
     "self": true,
     "responseStatus": "accepted"
    },
    {
     "email": "ll@meAtWork.com",
     "responseStatus": "needsAction"
    }

【讨论】:

  • @DalmTo 事件不是通过 API 创建的。它是通过 Google 日历(即在浏览器中)创建的。通过在“添加与会者”表单中键入与会者的姓名来添加与会者(谷歌类型协助找到了联系人)。我的目标是以编程方式(即使用 API)检索 G Suite 日历用户创建的事件详细信息
  • 显示名称仅在它是 gmail 帐户时通过网络视图添加,并且 google 有某种方式知道用户名是什么。如果用户组织者在他们的 google 联系人中说用户也可以通过这种方式获取它,这也可能有效。
  • @DalmTo 这看起来很奇怪,因为 Google 确实有办法知道用户的姓名。要重现此问题:1) 在 G Suite“联系人”视图中创建一个非 Google 联系人(例如,John Smith w/电子邮件 johnsmith@domain.com)2) 在 G Suite 日历网络视图中,在您的日历上创建一个事件,然后在与会者字段中,开始输入“John Smith”。您会看到 Google 将完成名称(因此向我暗示 Google 知道用户的姓名)
  • 我无权访问 G Suite,您必须对其进行测试,但基本上如果 API 未返回该值,则因为它在用户访问时未插入添加。 G Suite 是新的,可能无法完全集成到 Google 的所有产品中,例如日历。
  • @DalmTo 谢谢。这有点令人沮丧。我认为 G Suite 并不是那么新。这只是对 Google Apps for Your Domain 和 Googles Apps for Work 的重命名,自 2006 年以来一直存在。顺便说一句,我在 Twitter 上关注了你 :-)
猜你喜欢
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多