当我请求 google people api

问题描述

我想将我的小工具从 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)
{
...
}

调试会话的屏幕截图:

Empty Metadata.Sources

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

-------- 于 21 年 1 月 6 日作为评论问题添加 --------

我已经尝试过这个 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 的结果只见问题。

仅提供了 person 的带有 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 问题?

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

解决方法

使用以下代码片段解决了请求:

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

请务必在您的项目中使用 Google.Apis.PeopleService.v1 Google API 客户端库。