Получение общего пользовательского изображения google/gmail
Я пишу приложение на основе электронной почты, используя gmail-api, и мне нужно получить общедоступные изображения пользователей для адреса электронной почты, исходящего из Google.
Я видел, что другие приложения делают это, но я не могу найти способ надежно получить эти данные.
Дополнительная информация:
- Я использую oauth2 для входа пользователя в систему - и у меня нет проблем с запросом на какие-либо разрешения.
- Я попытался получить изображение с помощью google + api, но для этого требуется идентификатор пользователя, и я не знаю, как получить userId для адреса электронной почты (gmail-api не дает его, afaik).
- Я пробовал использовать API контактов, но он дает только изображения для контактов пользователя, а клиенты электронной почты могут отображать изображения от других пользователей.
Спасибо!
Edit:
Я знаю, что могу получить нужные изображения из google plus, если у меня есть другой пользовательский идентификатор пользователя. однако, я не могу найти способ получить идентификатор пользователя на основе адреса электронной почты.
Ответы
Ответ 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'];
?>
Я надеюсь, что это будет работать.