如何为Gmail用户获取头像?

13

我正在使用React和Gmail API创建一个基于电子邮件的应用程序。我正在加载一堆邮件,并希望显示发件人的头像。

我正在使用这个包来显示头像。我想要一个Google Id或一个图片url。还希望能够获取其他流行服务的图像,例如Outlook和Yahoo Mail。

其他人也问过同样的问题,但所有答案似乎都使用已经被废弃的Picasa API或即将被废弃的Google+ API。

编辑: 是的,react-avatar包声称可以根据提供的用户数据找到头像,但它只是用电子邮件查找Gravatar,而许多人没有Gravatar。


也许你可以使用 Firebase 认证? - NoobTW
1
@NoobTW 不用了,谢谢。我宁愿坚持使用老式的 Gmail API,特别是因为我们已经基于它构建了很多东西。另外,Firebase Auth 是否支持 Gmail API?我一直认为它只是用于登录。 - Kognise
这不是你想要的吗:https://developers.google.com/admin-sdk/directory/v1/reference/users/photos/get - Lance Whatley
1
@LanceWhatley 我相信该 API 仅限于搜索特定 G Suite 域的用户。 - cody
@cody 是的,我也这么认为。 - Kognise
它曾经可以通过Google+ API获得,但由于安全问题而被关闭 请参阅:https://www.blog.google/technology/safety-security/project-strobe/并没有匿名的方式。 - David Bray
4个回答

12
你想要做的事情无法通过GMAIL API或任何其他Google API实现。
您无法使用任何Google API端点获取与电子邮件地址相关联的图像或任何其他个人资料信息。请参见下面的说明。
获取发件人电子邮件的图像
Gmail API列出已发送和接收用户的电子邮件消息。 Gmail API基本上以MIME格式返回邮件服务器电子邮件消息响应,如果您检查,则不包含个人资料图像。它不会向您返回发件人或收件人的图像。
Google没有为开发人员提供端点来搜索gmail.com电子邮件地址并返回任何用户个人资料信息(包括图像),这将违反用户的隐私。用户必须授予您权限才能查看其图像,并且您没有每个发送电子邮件给您验证用户的gmail用户的权限。
gmail网站可能会对gmail电子邮件地址进行某种检查,并附加帐户图片。 Google可以访问所有GMAIL用户的配置文件数据,但Google无法提供相同的访问权限,因为这将违反用户的隐私。如果不是gmail帐户,则可能会检查Gravatar是否为此电子邮件地址设置了图像。同样,您无法使用其电子邮件地址请求Google用户的图像。
  • 您可以检查Gravatar,看是否已为该电子邮件设置了头像。
  • 如果经过身份验证的用户已将此用户添加为联系人,并为此用户添加了图片,则可能可以使用People api

过去,我曾建议用户将用户电子邮件地址的第一个字母作为图像,并使用该字母创建图像。您还可以使用问号,这实际上是当Gmail网站无法找到用户的电子邮件时执行的操作,可能是通过检查Gravatar实现的。

enter image description here

获取当前已认证用户的图像

您可以从people.get端点获取此信息,只需确保在对用户进行身份验证时请求了配置文件范围。

GET https://people.googleapis.com/v1/people/me

它返回一个包含用户个人资料信息的大型响应,其中一部分包含用户的图片

"photos": [
    {
      "url": "https://lh3.googleusercontent.com/a-/AAuE7mDuIWqXzrrp-65cIhXSD2HjCI8WYsWHR0fDx5_wQPY=s100", 
      "metadata": {
        "source": {
          "type": "PROFILE", 
          "id": "117200475532672775346"
        }, 
        "primary": true
      }
    }
  ], 

官方people api示例项目包含有关如何连接到api的信息。只需确保添加“profile”范围。

获取图片的代码应该类似于这样。

function getPicture() {
        gapi.client.people.people.get({
           'resourceName': 'people/me',
           'pageSize': 10,
           'personFields': 'photos',
         }).then(function(response) {
           var connections = response.result.connections;
           appendPre('Connections:');

           if (connections.length > 0) {
             for (i = 0; i < connections.length; i++) {
               var person = connections[i];
               if (person.url && person.url.length > 0) {
                 appendPre(person.names[0].url)
               } else {
                 appendPre("No display name found for connection.");
               }
             }
           } else {
             appendPre('No connections found.');
           }
         });
      }

3
我不想要当前用户的个人资料图片,我想根据某人的电子邮件地址获取个人资料图片。我正在显示一系列电子邮件,并希望显示它们的头像。 - Kognise
你尝试过使用Gravatar API吗?Google只会提供当前已认证用户的信息。 - Linda Lawton - DaImTo
正如我所说,无法获取随机用户的Gmail头像。 请阅读“获取电子邮件发件人图像”部分。 - Linda Lawton - DaImTo
这不完全是我想要的,但它似乎是唯一的解决方案。谢谢你的时间。 - Kognise
1
很不幸,当你处理用户隐私时,并不是所有事情都是可能的。即使那些听起来在当时似乎非常简单且绝佳的想法。 - Linda Lawton - DaImTo
显示剩余2条评论

5
目前被接受的答案并不完全正确,因为确实存在一种Google API可以公开Gmail头像-以及用户的名字和/或姓氏,只要用户已经进行了任何公开配置。尽管到目前为止我还未能找到实现此操作所需的API端点,但我确实发现了 avatarapi.com
正如他们网站上所述:
此API使用由Google提供的公共个人资料信息,通过公开暴露的Google数据源确定用户的名称和个人资料图片。
他们还有一个回退到Gravatar。我也很想知道他们使用的“Google数据源”位于哪里。

5
不起作用,我使用我的Gmail地址尝试了一下,但只得到了一个轮廓图像。 - FractalBob
1
今天用了4个不同的配置文件试了一下。今天部分地工作了。我的自己的gmail邮箱和wordpress备用邮箱都可以工作。我还管理一个Google Workspace。我尝试了5个电子邮件,其中3个可以工作,2个不行,即使它们都有图片。我不知道为什么,但你可以在起始页面上尝试一些电子邮件。 - Alexander Taubenkorb
我得到了更好的结果。他们声称现在在他们的数据库中有超过十亿条记录,我尝试了一些我的地址,其中一些已经注册了Gravatar,其他的则根本没有注册(除了它们所注册的邮件提供商,例如Yahoo)。我有很多地址 :-) 我猜大约80%-90%的地址被正确识别了。此外,我对这个API的速度感到惊讶!难怪这是一个付费服务(没有免费层 - 在进行100次API调用作为演示/测试之后,您开始按使用量计费)。 - Gwyneth Llewelyn

4

2

Gravatar

如果与该电子邮件地址相关联的用户已注册了 Gravatar,那么您可以轻松获取 Gravatar 头像。

首先需要获取电子邮件的 MD5 值,然后:

最初的回答

var email = "youremail@gmail.com",
    size = 80; 
yourImg.src = 'http://www.gravatar.com/avatar/' + MD5(email) + '.jpg?s=' + size;

https://jsfiddle.net/a4g8s5y2/1/


1
抱歉...我以为这只是关于Gravatars的事情。 - fedeghe
那个链接是一个有用的资源! - Pedro Ferreira
这个问题是在询问如何获取Google的个人资料图片,而不是Gravatar的个人资料图片。 - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接