有没有办法从 Google Contacts 联系人 ID 获取 Google People API 资源 ID?

2024-01-15

我们将用户的 contactId 存储在数据库中,并在用户从我们的应用程序请求时使用它来获取/编辑/删除联系人。现在 Google Contacts API 即将停用,我们需要使用资源 ID 调用 Google People API 来执行这些操作。

有没有办法从 Google Contacts 联系人 ID 获取 Google People API 资源 ID?

我找到了以下答案 https://stackoverflow.com/questions/46349746/is-there-any-way-that-i-can-retrieve-account-id-from-google-contact-api-v3-to-ma/46355535#46355535在 Stackoverflow 中:

联系人 API 和人员 API 是单独的 API,并不意味着 彼此互操作。

也就是说,逆向工程的方法是采用 Contacts API 联系人 ID,解析该十六进制值,将其转换为 十进制,并添加“c”前缀,这就成为 People API 人员资源 ID。

例如如果 Contacts API 联系人 ID 为 100,则 People API 人员 ID 为 c256。当您从 People API 获取联系人时 以这种方式,它将具有连接的个人资料信息,如果 展示。

我尝试了该解决方案并且它有效,但需要知道我们是否可以使用此转换无错误(即没有任何例外)将相应的资源 ID 填充到联系人 ID。


Answer:

虽然中提供了解决方法这个答案 https://stackoverflow.com/a/46355535似乎有效,我认为有一种更有记录的方法来查找 People APIresourceName基于contactId.

This contactId是的一部分人力资源 https://developers.google.com/people/api/rest/v1/people,只要连接来自CONTACTS.

更具体地说,可以在以下位置找到此信息作为资源的一部分:

{
  "resourceName": "people/c...",
  "metadata": {
    "sources": [
      {
        "type": "CONTACT",
        "id": "CONTACT_ID" // Converting to decimal and adding "people/c" results in resource name
      }
    ]
  }
}

因此,如果你有一个有效的数组contactId,就可以找到对应的resourceNames列出您的联系(请参阅people.connections.list https://developers.google.com/people/api/rest/v1/people.connections/list)并检查是否contactId匹配id在嵌套字段中并检索resourceName对于该连接(如果是这种情况)。

代码示例:

例如,使用 Apps 脚本,您可以检索以下映射:contactId and resourceName, 像这样:

function getResourceNamesFromContactIds(contactIds) { // contactIds: array with valid contactIds
  const resourceName = "people/me";
  const optionalArgs = {
    personFields: "metadata",
    sources: "READ_SOURCE_TYPE_CONTACT"
  }
  const connections = People.People.Connections.list(resourceName, optionalArgs)["connections"];
  const mapping = contactIds.map(contactId => {
    const foundConnection = connections.find(connection => {
      return contactId == connection["metadata"]["sources"][0]["id"];
    });
    if (foundConnection) {
      return {
        contactId: contactId,
        resourceName: foundConnection["resourceName"]
      }
    }
  }).filter(el => el);
  return mapping;  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法从 Google Contacts 联系人 ID 获取 Google People API 资源 ID? 的相关文章

随机推荐

  • 按键组合 json 数组,javascript

    我需要组合由两个 REST 服务提供的两个 json 数组 具有相同 id 的条目属于在一起 json1 id 1 name aaa id 5 name ccc id 3 name bbb json2 id 3 parameter1 x p
  • 将所有 pyspark 数据帧列连接成一个字符串列

    我有以下 pyspark 数据框 identification p1 p2 p3 p4 1 1 0 0 1 2 0 1 1 0 3 0 0 0 1 我想连接从 p1 到 p4 的所有列 以这种方式收集 1 和 0 的值 identifica
  • 从 SpaCy 中删除跨度中的单词?

    我正在用 Spacy 解析一个句子 如下所示 import spacy nlp spacy load en span nlp This is some text 我想知道是否有一种方法可以删除跨度中的单词 同时仍然保留剩余单词的格式 如句子
  • 跨平台、基于交互式文本的界面,具有命令完成功能

    有谁知道有一个 C 库可以提供基于文本的交互界面吗 我想创建一个应用程序的两个版本 基于控制台的程序 它将执行命令行上或在控制台上交互给出的任何操作 以及基于 GUI 的程序 Mac Cocoa 和 Windows MFC 两个版本将共享一
  • 我可以通过浏览器更改查看页面源代码部分的大小或字体吗?

    有一个小问题可能会时不时地让我烦恼 不知道是否还有其他人有同样的感觉 每次我使用任何浏览器查看页面源代码时 文本总是变得又丑又小 我的计算机的分辨率是1920x1080 特别是17英寸 这使得字母非常小并且很难看清 有没有办法从任何浏览器更
  • 创建可在各种页面上使用的可重用模板

    在我的 Angular 5 应用程序中 我需要在每个 HTML 页面上执行此操作 span nbsp item createdTime date medium span 并在页面末尾创建该模板
  • 如何在Android中正确使用camera2中新的createCaptureSession()?

    已弃用的createCaptureSession 方法在旧代码中的使用方式如下 cameraDevice createCaptureSession Arrays asList surface new CameraCaptureSession
  • 如何从浮动中删除字符?

    我目前有一个数据框 如下所示 Idnumber Ownership Date 1 100 2006 2 gt 50 2006 1 80 2007 3 NaN 2006 所有权列当前的类型为浮点型 我想要的是在 idnumber 上创建一个
  • 在 Android 运行时更改主题颜色 [重复]

    这个问题在这里已经有答案了 如果在应用程序中添加多个主题 则可以更改主题颜色 并且可以在运行时轻松切换 另一种方法是逐一更改 actiobar textview 等所有对象的颜色 这条路很长 需要很多代码 我发现的简单方法是更改 color
  • 使用 VueJs 使用 props 初始化应用程序组件

    我将 Vue Js 与 Vue Cli 结合使用 我想根据 源 参数加载 CSS 文件 该参数将传递到我的主应用程序组件的启动 我想在索引文件中像这样初始化我的组件 主要 js import Vue from vue import App
  • SQL Server max 中“每行字节数”到底是什么意思?容量规格

    See 最大容量规格 https msdn microsoft com en us library ms143432 aspx 因此 每行字节数 旁边是 8060 但稍后 每个 ntext 或 nvarchar max 列的字符数 旁边是
  • 如何创建通用工厂?

    我正在开发一个 Webmethod 集合的客户端 Silverlight 接口 我试图避免为每个网络方法编写任何自定义代码 所以我创建了一个ServiceCall
  • HttpContext.Current.Response.AddHeader() 未设置 Content-Type 标头

    我正在使用第三方软件从 html 文档渲染 PDF 我创建了一个小型测试项目并使用OnClick事件的
  • Lerna 指定运行顺序

    在我的 monorepo 中 我有 3 个包package1 package2 package3 每个包都包含一个名为的 npm 脚本build 但是 这些包并未链接在一起 IE 没有require 在任何链接到同级包的包中 从根文件夹中
  • 旋转和裁剪 UIImage

    想象一下我有一个 UIImage 我需要旋转然后在全局坐标系 不是 UIImage 坐标系 中裁剪它 所以结果图像将被裁剪and旋转 我怎样才能做到这一点 CGImageCreateWithImageInRect 将仅在图像相对坐标中裁剪图
  • 调整 ListView 列以适应 WinForms

    我面临列表视图列的调整大小问题 如果你锚 对接listview转普通winform比listview锚点或对接效果好 我的意思是 当 winform 最大化时 listview 将调整大小并适合 winform 但您在其上设计的列不会随 l
  • 复制对象数组,然后修改原始对象而不影响副本

    所以我一直在为这个看似微不足道的问题而绞尽脑汁 我不一定知道要搜索什么 我已经四处寻找解决方案 我需要制作二维数组的副本 该数组由对象 我创建的一个称为 Cell 的类 组成 但是一旦我制作了副本 我就会将该副本存储到哈希映射中 以供稍后参
  • WebSphere 响应缓冲

    我正在向WebSphere 的response getOutputStream 编写一个大型响应 数百Mb 看起来 Web Sphere 总是将整个输出流数据存储在一些内部内存缓冲区中 然后再将其提供给客户端 因此 我的服务器处理 生成数据
  • PHP print_r 仅显示数组而不是纯文本

    我再次寻求帮助 我找到了这个停用词脚本 我基本上从字符串中删除了所有常见单词
  • 有没有办法从 Google Contacts 联系人 ID 获取 Google People API 资源 ID?

    我们将用户的 contactId 存储在数据库中 并在用户从我们的应用程序请求时使用它来获取 编辑 删除联系人 现在 Google Contacts API 即将停用 我们需要使用资源 ID 调用 Google People API 来执行