Как получить аватар для пользователя gmail? - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю почтовое приложение в React с Gmail API.Я загружаю кучу сообщений и хочу отображать аватары отправителей.

Я использую этот пакет для отображения аватаров.Я хотел бы иметь либо Google Id, либо ссылку на изображение.Было бы также неплохо получить изображения для других популярных служб, таких как почта Outlook и Yahoo.

Другие люди задавали этот же вопрос, но все ответы, похоже, используют API Picasa (которыйустарел) или API Google+ (который будет устаревшим).

РЕДАКТИРОВАТЬ: Да, пакет react-avatar утверждает, что может найти аватар на основе предоставленных пользовательских данных, но все этоделает с электронной почтой поиск Gravatar, которого нет у многих людей.

Ответы [ 5 ]

0 голосов
/ 15 августа 2019

В настоящее время принятый ответ не совсем корректен, поскольку абсолютно существует API Google, который предоставляет аватары Gmail, а также имя и / или фамилию пользователя, если пользователь настраивал их публично.

Хотя до сих пор я не смог найти фактическую конечную точку API, которую вы можете использовать для достижения этой цели, я наткнулся на avatarapi.com .

Как указано на их веб-сайте:

Этот API-интерфейс использует информацию общего профиля, предоставленную Google, через общедоступный источник данных Google, чтобы определить имя и изображение профиля пользователя.

У них есть запасной вариант:Gravatar.Я также хотел бы узнать, где находится этот «источник данных Google», который они используют.

0 голосов
/ 16 февраля 2019

Если вы хотите создать аватар с изображением пользователя, вы можете использовать API из "pipl.com" (поиск людей).См. https://pipl.com/api/.. Можно выполнить поиск определенного адреса электронной почты.

В модели ценообразования "социальные" и "деловые" результат содержит массив изображений.Вы можете проверить это с помощью бесплатного пробного аккаунта (30 запросов).

рассмотрите, после первых 30 бесплатных запросов вам необходимо создать платную учетную запись;Информация о ценах доступна на их веб-странице.

0 голосов
/ 15 февраля 2019

Сначала нужно получить 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/

0 голосов
/ 15 февраля 2019

Я не думаю, что Google делится этой информацией с кем-либо без разрешения.Вы должны создать профиль для каждого пользователя и получить изображение профиля только один раз, когда пользователь регистрируется в вашей платформе через Google. Oauth Проверьте эту информацию https://developers.google.com/actions/identity/google-sign-in-oauth

0 голосов
/ 12 февраля 2019

То, что вы хотите сделать, невозможно с помощью API GMAIL или любого другого API Google

Вы не можете взять адрес электронной почты Google и выполнить поиск изображения или любого другого личного профиля.информация, связанная с этим адресом электронной почты через любую конечную точку API Google.Объяснение ниже.

Получить изображение отправителя электронного письма

API Gmail перечисляет сообщения электронной почты, которые были отправлены пользователю и пользователем.API gmail в основном возвращает ответ на сообщение электронной почты почтового сервера в формате 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.');
           }
         });
      }
...