Подтвердить что ты не робот

Получение общего пользовательского изображения google/gmail

Я пишу приложение на основе электронной почты, используя gmail-api, и мне нужно получить общедоступные изображения пользователей для адреса электронной почты, исходящего из Google. Я видел, что другие приложения делают это, но я не могу найти способ надежно получить эти данные.

Дополнительная информация:

  • Я использую oauth2 для входа пользователя в систему - и у меня нет проблем с запросом на какие-либо разрешения.
  • Я попытался получить изображение с помощью google + api, но для этого требуется идентификатор пользователя, и я не знаю, как получить userId для адреса электронной почты (gmail-api не дает его, afaik).
  • Я пробовал использовать API контактов, но он дает только изображения для контактов пользователя, а клиенты электронной почты могут отображать изображения от других пользователей.

Спасибо!

Edit:

Я знаю, что могу получить нужные изображения из google plus, если у меня есть другой пользовательский идентификатор пользователя. однако, я не могу найти способ получить идентификатор пользователя на основе адреса электронной почты.

4b9b3361

Ответ 1

Очень легко

http://picasaweb.google.com/data/entry/api/user/<hereYourUserIdOrYourEmail>?alt=json

просто есть небольшая проблема.

Вы можете получить только фотографию своего профиля Google+, но не прямо из своего Gmail.

ОБНОВИТЬ:

Этот API устарел и будет закрыт в январе 2019 года. Перейдите на API библиотеки Google Photos как можно скорее, чтобы избежать сбоев в работе вашего приложения.

Информация здесь

Руководство по миграции

Ответ 2

ОБНОВИТЬ:

Этот API устарел и будет закрыт в январе 2019 года. Перейдите на API библиотеки Google Photos как можно скорее, чтобы избежать сбоев в работе вашего приложения.

Информация здесь

Основываясь на ответе @jose920405, я написал этот бесплатный публичный API-сервис под названием Pikmail API. Вот некоторые преимущества.

  • Аутентификация не требуется.
  • Это абсолютно бесплатно и с открытым исходным кодом.
  • Это написано на Kotlin.
  • Вам не нужно писать какую-то оболочку для отображения ответа.

Вот сообщение в блоге о том, как Pikmail API работает внутри компании.

Использование:

Html

<img src="https://pikmail.herokuapp.com/[email protected]?size=50" alt="Profile Picture">

Profile Picture

Java Android

Picasso.with(context).load("https://pikmail.herokuapp.com/[email protected]?size=50").into(imageView);

Не стесняйтесь вносить с собой запросы на извлечение, открывать ошибки или запрашивать новые функции здесь.

Примечание. Эта служба основана на независимой библиотеке Pikmail, которую можно использовать в качестве зависимости Gradle в ваших проектах Java (серверах или приложениях Android).

Ответ 3

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

https://www.googleapis.com/plus/v1/people/me?access_token=YOUR_ACCESS_TOKEN_HERE

Если есть ошибка/недопустимый токен /etc, это вернет кучу информации о пользователе как JSON. В эти данные входит URI для изображения профиля пользователя.

EDIT:

Чтобы получить изображение профиля для пользователя на основе адреса электронной почты, сначала найдите пользователя

https://www.google.com/m8/feeds/contacts/default/thin?q=EMAIL_ADDRESS_HERE

Затем вы можете получить правильный идентификатор пользователя для этого пользователя из возвращенного JSON и использовать его для получения изображения профиля.

Ответ 4

Может быть, слишком поздно ответить на вопрос, но лучший способ, который я нашел, - сначала использовать http://picasaweb.google.com/data/entry/api/user/? alt= json

из JSON Response вы получите раздел автора, который uri: $t: https: picasaweb.google.com/0000000000000

теперь номерами в конце является ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ, который можно использовать для извлечения профиля пользователя с помощью этого API

https: www.googleapis.com/plus/v1/people/userId

Пример: https: www.googleapis.com/plus/v1/people/0000000000000

Ответ 5

простой javascript для извлечения общего профиля из Google:

<html>
<body>


<script type="text/javascript">
function getPhoto() {

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myArr = JSON.parse(this.responseText);
        try { 
            profilePic = myArr["feed"]["entry"][0]["media$group"]["media$thumbnail"][0]["url"]; 
            document.getElementById("demo").innerHTML="<img src='" + profilePic + "' width='160px' height='160px'>"
            }
        catch(err) { }

        }
    }
xmlhttp.open("GET", "https://picasaweb.google.com/data/feed/api/user/<EMAIL>?kind=album&alt=json", true);
xmlhttp.send();
}

</script>

<div id="demo" onclick="javascript:getPhoto();">click here to load photo</div>

</body>
</html>

Ответ 6

Я несколько дней ударился об это головой, так как ни один из ответов, похоже, больше не работал. Что сработало и выглядит более устойчивым к будущим изменениям (использует jQuery):

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
function image_attach(GA){
        user=GA.currentUser.get();
        url = user.getBasicProfile().getImageUrl();
        $('#thumbnail').attr('src', url);
}

function google_init() {
    gapi.load('auth2', function() {
            GA = gapi.auth2.init({
                    'client_id': '{YOUR_GOOGLE_CLIENT_ID}',
                    'fetch_basic_profile': true,
            });
            GA.then(function () {
                if (GA.isSignedIn.get()) {
                    image_attach(GA)
                }
                else {
                    GA.signIn().then( function() {
                        image_attach(GA)
                })}
            })
        });
}
</script>

Ответ 7

Вы можете использовать API профиля google app

вот пример кода для доступа к профилю pic

function getProfilePic(userName){
  userName = '[email protected]'; 
  var scope = 'https://www.google.com/m8/feeds/';
  var fetchArgs = googleOAuth_('Profile', scope);
  fetchArgs.method = 'GET';
  var domain = UserManager.getDomain();
  var url = 'https://www.google.com/m8/feeds/photos/profile/'+domain+'/'+userName+'?v=3';
  var rawData = UrlFetchApp.fetch(url, fetchArgs).getContentText();

 //here you get data into rawData variable

}

//google oAuth
function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name);
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey("anonymous");
  oAuthConfig.setConsumerSecret("anonymous");
  return {oAuthServiceName:name, oAuthUseToken:"always"};
}

вы можете получить дополнительную информацию здесь

Ответ 8

Если вы проверяете пользователей в своем приложении с помощью Google с помощью API OAuth 2.0, например, с помощью паспорта → https://www.npmjs.com/package/passport-google-oauth20 p >

Вы можете запросить область "профиль", которая дает вам кучу информации из displayName для фотографий профиля пользователя "profile.photos [0]"

Ответ 9

Вы можете попробовать что-то вроде:

<?php 
$email = "YOUR_EMAIL_TO_FETCH";
$fetch_profile = "http://picasaweb.google.com/data/entry/api/user/".$email."?alt=json";
    $jsonURL = file_get_contents($fetch_profile);
    $json = json_decode($jsonURL);
    $profile_img = get_object_vars($json->entry);
    $profile_img = get_object_vars($profile_img['gphoto$thumbnail']);
    $profile_img = $profile_img['$t'];
?>

Я надеюсь, что это будет работать.