如何为Gmail用户获取头像?

时间:2019-02-07 18:12:14

标签: javascript google-api gmail gmail-api avatar

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

我正在使用this package来显示化身。我想要一个Google ID或图片网址。能够获取其他流行服务(例如Outlook和Yahoo邮件)的图像也将是一件好事。

其他人也问过同样的问题,但所有答案似乎都使​​用了Picasa API(已弃用)或Google+ API(已弃用)。

编辑:是的,react-avatar软件包声称可以根据提供的用户数据找到化身,但对电子邮件所做的只是找到一个Gravatar,而很多人却没有这样做没有。

5 个答案:

答案 0 :(得分:7)

您无法通过GMAIL API或任何其他Google API进行操作

您不能使用Google电子邮件地址并通过任何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的信息。只需确保添加“配置文件”范围

获取图片的代码应该是这样的。

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.');
           }
         });
      }

答案 1 :(得分:4)

我认为google未经允许不得与任何人共享该信息。 您必须为每个用户创建一个个人资料,并且当用户通过Google oauth在您的平台中注册时,只需拍摄一次个人资料图片 查看此信息 https://developers.google.com/actions/identity/google-sign-in-oauth

答案 2 :(得分:2)

当前接受的答案并不完全正确,因为绝对有一个Google API可以公开Gmail头像-以及用户的姓氏和/或姓氏,只要用户公开配置了任何内容。

尽管到目前为止,我仍然无法找到可用于实现此目标的实际API端点,但我确实遇到了avatarapi.com

如其网站上所述:

  

此API使用Google通过公开的Google数据源提供的公开个人资料信息来确定用户的姓名和个人资料图片。

他们有Gravatar的后备。我也很想知道他们使用的这个“ Google数据源”在哪里。

答案 3 :(得分:0)

您需要先获取电子邮件的md5,然后

const Coordinates = L.Control.extend({
    onAdd: map => {
      const container = L.DomUtil.create("div");
      map.addEventListener("mousemove", e => {
          container.innerHTML = `
          <h2>Latitude is 
            ${e.latlng.lat.toFixed(4)} <br> 
            and Longitude is  ${e.latlng.lng.toFixed(4)}
            </h2>
          `;
     });
     return container;
   }
});
map.addControl(new Coordinates({ position: "bottomleft" }));

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

答案 4 :(得分:0)

如果您想使用用户的图片创建头像,则可以使用“ pipl.com”中的API(人物搜索)。参见https://pipl.com/api/。您可以搜索特定的电子邮件地址。

在“社交”和“商业”定价模型中,结果都包含一个图像数组。您可以使用免费的试用帐户(30个查询)对其进行测试。

考虑一下,在前30个免费查询之后,您需要创建一个付费帐户;价格信息可在其网页上找到。