当我请求 google people api 时没有最后修改的时间戳

Posted

技术标签:

【中文标题】当我请求 google people api 时没有最后修改的时间戳【英文标题】:Get no last modified timestamp when I request google people api 【发布时间】:2021-04-03 21:37:11 【问题描述】:

我想将我的小工具从 google contact api 升级到 google people api。授权有效,我从peopeService 获得联系。 但是 person.Metadata 源项目数组只有一种项目类型“CONTACT”。我确实错过了 person.Metadata.Sources 中的“updateTime”。 代码截断:

PeopleResource.ConnectionsResource.ListRequest peopleRequest =
   peopleService.People.Connections.List("people/me");

if (pageToken != null)

   peopleRequest.PageToken = pageToken;


peopleRequest.RequestMaskIncludeField = 
   person.names,person.organizations,person.birthdays,person.biographies, 
   person.emailAddresses,person.Metadata,person.PhoneNumbers,person.Addresses,
   person.userDefined";
ListConnectionsResponse people = peopleRequest.Execute();

if (people != null && people.Connections != null && people.Connections.Count > 0)

   foreach (var person in people.Connections)
   
      ConvertGooglePerson2ContactItem(person);
   

   if (people.NextPageToken != null)
   
      GetAllContactItems(people.NextPageToken);
   

获取源数据:

if (person.Metadata!=null)
foreach (var item in person.Metadata.Sources)

...

调试会话的屏幕截图:

这可能是查询参数Link 的问题。但是我不知道如何设置这个查询参数。

-------- 于 21 年 1 月 6 日作为 cmets 的问题添加 --------

我试过这个 API:https://developers.google.com/people/api/rest/v1/people.connections/list

设置两个字段:personFields 和 requestMask.includeField:

400 Bad Request

  "error": 
    "code": 400,
    "message": "Please specify only one of requestMask or personFields.",
    "status": "INVALID_ARGUMENT"
  

仅personFields的结果请看问题。

只给出了personFields的元数据:

      "resourceName": "people/c623380167042605258",
      "etag": "%Eg4BAj0FBwk+Cz8MEEA3LhoEAQIFByIMcG9JRnpDRzBxS0U9",
      "metadata": 
        "sources": [
          
            "type": "CONTACT",
            "id": "8a6b0f5889920ca",
            "etag": "#poIFzCG0qKE=",
            "updateTime": "2021-01-04T22:44:04.913Z"
          
        ],
        "objectType": "PERSON"
      ,

可能是 API 问题?

如何获取联系人的最后修改时间?

【问题讨论】:

我不确定我是否完全理解这个问题。默认情况下,使用 people.connections.list 方法可以检索 updateTime。它位于 connections/metadata/sources/updateTime 的 JSON 响应中。 您可以查看this example,它使用 Try this API 功能来查看返回的updateTime 此外,person.metadata.source 枚举的类型不仅仅是 CONTACT。你可以看到这些here。 @Rafa Guillermo 我添加了调试会话的屏幕截图。 Metadata.Source 数组仅包含一种项目类型“CONTACT”。我希望这里有更多的条目,其中包括更新时间。这是 RequestMaskIncludeField 或其他请求参数的问题吗? 您在哪里为您的请求指定 personFields 掩码?您是否查看了 Try This API 功能以查看这是否可重现? 【参考方案1】:

用这个代码sn-p解决请求:

var updateTime = person.Metadata.Sources.FirstOrDefault().UpdateTime;

确保在您的项目中使用 Google.Apis.PeopleService.v1 Google API 客户端库。

【讨论】:

可以有多个来源,如果有多个来源,请确保找到最近的日期时间。

以上是关于当我请求 google people api 时没有最后修改的时间戳的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以从 google contact api v3 检索 account_id 以向 google people api 发出获取请求?

Google People API:请求具有无效的身份验证凭据 - 未设置授权承载标头

将Google People API与服务帐户配合使用

如何使用 google-api-ruby-client People API 传递 OAuth 令牌?

使用 google people API 访问 google 连接

使用 Google Script 和 People API 指定来源会覆盖同步令牌