如何在通过 google contact People API 创建联系人时将个人资料照片添加到联系人?

How to add a profile photo to a contact as you create it via google contact People API?

Update/Solution

在通过人脉创建联系人时无法将照片添加到人物对象 API。但是您可以在使用 People.People.updateContactPhoto 后直接更新照片。 updateContactPhoto 限制每个用户每分钟 60 次查询。如果您的脚本需要更新超过 60 张联系人照片,那么您需要在代码中添加延迟,以免达到查询限制

问题:

我正在根据一组数据创建大量联系人列表,包括每个联系人的联系人照片。当我通过 people.createContact 创建联系人时,如果我有照片字段,它会显示“person.photos 是一个只读字段。”我怎样才能创建带有个人资料照片的联系人 link?

示例代码

const contact = {names:..., addresses:..., emailAddressess:..., phoneNumbers:..., 
  photos: {"url":..., "primary": true}
}

People.People.createContact(contact)

这给出了错误信息

更新 1: 目前这就是我正在做的并且它有效。现在的主要问题是我不想使用 Utilities.Sleep 函数。我循环了这个函数数百次,加起来很快。如果我在第 40 次或第 50 次联系时没有使用睡眠,它会抛出“遇到内部错误”。每次出错的联系人都不一样,因此错误与特定的人无关。我的假设是错误来自 运行 太多请求太快了,但是我怎么能 运行 不强迫它休眠呢?

function importPerson(person){
  const photoData = encodePhotoData(person.photos[0].url)
  delete person.photos

  const newContact = People.People.createContact(person)
  
  People.People.updateContactPhoto({ 
    photoBytes: photoData,
  },newContact.resourceName)

  //This stops it from throwing an error
  Utilities.sleep(1000)
}

您需要使用 people.updateContactPhoto 来更新联系人。您需要将照片的 url 转换为 base64 编码字符串中的原始照片字节。

示例代码:

  var resource = {
   names: [
     {
       givenName: "Sample1"
     }
   ],
   emailAddresses: [
     {
       value: "sample1@example.com"
     }
   ]
 };
  //create contact
  var response = People.People.createContact(resource);

  //Get raw photo bytes in base64-encoded string
  var url = "https://lh3.googleusercontent.com/-T_wVWLlmg7w/AAAAAAAAAAI/AAAAAAAABa8/00gzXvDBYqw/s100/photo.jpg"
  var photoBlob = UrlFetchApp.fetch(url);
  var base64EncodedBytes = Utilities.base64Encode(photoBlob.getBlob().getBytes()); 

  var photoResource = {
    photoBytes: base64EncodedBytes
  }
  //update photo
  People.People.updateContactPhoto(photoResource,response.resourceName)

输出:


(更新)

这是我尝试创建 100 个联系人的示例代码:

function testContact(){
  for(var i=0;i<100;i++){
      var resource = {
    names: [
      {
        givenName: "Sample1"
      }
    ],
    emailAddresses: [
      {
        value: "sample1@example.com"
      }
    ],
    photos:[
      {
        url: "https://lh3.googleusercontent.com/-T_wVWLlmg7w/AAAAAAAAAAI/AAAAAAAABa8/00gzXvDBYqw/s100/photo.jpg"
      }
    ]
  };
    Logger.log(i);
    importPerson(resource);
  }
}

function importPerson(person){
  const photoData = encodePhotoData(person.photos[0].url)
  delete person.photos

  const newContact = People.People.createContact(person)
  
  People.People.updateContactPhoto({ 
    photoBytes: photoData,
  },newContact.resourceName)

  //This stops it from throwing an error
  //Utilities.sleep(1000)
}