如何使用 Google Apps 脚本获取 Gmail 用户的个人资料图片?

Posted

技术标签:

【中文标题】如何使用 Google Apps 脚本获取 Gmail 用户的个人资料图片?【英文标题】:How to get a Gmail user's profile picture using Google Apps Script? 【发布时间】:2021-11-01 12:29:04 【问题描述】:

我想在我们的域工作区中更新用户的电子邮件签名。我想使用用户的个人资料图片作为电子邮件签名的一部分。但是,我无法在电子邮件签名中呈现它。

一旦我查询了目标用户,到目前为止我所做的如下:

    使用AdminDirectory.Users.Photos.get(email_address) 函数获取头像属性。使用这些属性创建一个编码图像 URL 以在 html img src 属性中显示它。所以,<img src="data:$userPhoto.mimeType;base64,$userPhoto.photoData">。但是没有显示头像。

    使用了getThumbnailPhotoUrl() 函数,但即使设置了个人资料图片,它也会呈现默认占位符图像。

我还为用于更新域中目标用户的服务凭据添加了范围:“https://www.googleapis.com/auth/admin.directory.user”。

还有其他方法可以做到吗?

【问题讨论】:

api 的响应是什么? 【参考方案1】:

users.photos.get 应该会返回以下响应:


  "kind": "admin#directory#user#photo",
  "id": "112573616946026931368",
  "etag": "\"-vDsmNkFadksL3sdO9_llNHf95VVWFrsahpYPMFRU6U/X6ZsLw-qrvYjOu4FN-GLlBCL-ts\"",
  "primaryEmail": "EMAIL",
  "mimeType": "image/jpeg",
  "height": 96,
  "width": 96,
  "photoData": "photoDataString"

其中photoData定义如下:

字符串(字节格式)

用户照片上传的网络安全 Base64 格式的数据,以字节为单位。这意味着:

斜线 (/) 字符替换为下划线 (_) 字符。 加号 (+) 字符将替换为连字符 (-) 字符。 等号 (=) 字符将替换为星号 (*)。 对于填充,使用句点 (.) 字符代替使用等号 (=) 进行填充的 RFC-4648 baseURL 定义。这样做是为了简化 URL 解析。 无论上传的照片大小如何,API 都会将其缩小到 96x96 像素。 一个 base64 编码的字符串。

现在,您可以将照片 blob 检索到例如将其存储在您的云端硬盘中,如下所示:

function saveUserPhoto() 
  var data = "photoDataString"
  var bytes = Utilities.base64DecodeWebSafe(data)
  var blob = Utilities.newBlob(bytes, "image/png", "userPhoto");
  DriveApp.createFile(blob);

【讨论】:

以上是关于如何使用 Google Apps 脚本获取 Gmail 用户的个人资料图片?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google Apps 脚本获取 Gmail 用户的个人资料图片?

Google Apps 脚本 - 如何解析响应

获取 Google Apps 脚本中最后插入行的标识

如何通过使用数组从 Google 表格中提取数据并格式化来优化 Apps 脚本代码?

如何将 JSON 文件转换为使用 Google Apps 脚本分隔的新行?

如何在 Google Apps 脚本中使用 Cheerio 提取 HTML 表格数据?