J'écris une application basée sur la messagerie électronique à l'aide de gmail-api, et je dois récupérer des images publiques d'utilisateur pour une adresse électronique provenant de Google ... J'ai vu d'autres applications le faire, mais je ne peux pas sembler être un moyen pour obtenir de manière fiable ces données.
quelques informations supplémentaires:
Merci!
Modifier:
Je sais que je peux recevoir les images requises de Google plus, si j'ai l'ID utilisateur de l'autre utilisateur. Cependant, je ne peux pas trouver un moyen d'obtenir l'ID utilisateur en fonction d'une adresse électronique.
C'est très facile
http://picasaweb.google.com/data/entry/api/user/<hereYourUserIdOrYourEmail>?alt=json
a juste un petit problème.
Vous pouvez uniquement obtenir la photo de votre profil Google+, pas directement à partir de votre compte Gmail.
METTRE À JOUR:
Cette API est obsolète et sera refusée en janvier 2019. Migrez vers l'API Google Photos Library dès que possible pour éviter toute perturbation de votre application.
Info Ici
METTRE À JOUR:
Cette API est obsolète et sera refusée en janvier 2019. Migrez vers l'API Google Photos Library dès que possible pour éviter toute perturbation de votre application.
Info Ici
Sur la base de la réponse @ jose920405, j'ai écrit ce service API public gratuit appelé API Pikmail . Voici quelques avantages.
Voici l'article de blog sur comment l'API Pikmail fonctionne en interne .
Utilisation:
Html
<img src="https://pikmail.herokuapp.com/[email protected]?size=50" alt="Profile Picture">
Java Android
Picasso.with(context).load("https://pikmail.herokuapp.com/[email protected]?size=50").into(imageView);
N'hésitez pas à contribuer avec vos demandes d'extraction, à ouvrir des bogues ou à demander de nouvelles fonctionnalités ici .
Remarque: Ce service repose sur une bibliothèque indépendante appelée Pikmail qui peut être utilisée comme dépendance Gradle dans vos projets Java (serveurs ou applications Android).
Google+ est le bon moyen de le faire. Cela n'a en réalité rien à voir avec l'API Gmail. Vous n'avez pas besoin d'un ID utilisateur, mais simplement d'un jeton d'accès valide avec des portées appropriées.
https://www.googleapis.com/plus/v1/people/me?access_token=YOUR_ACCESS_TOKEN_HERE
À moins qu'il y ait une erreur/un jeton invalide/etc, cela retournera un tas d'informations sur l'utilisateur en JSON. Inclus dans ces données sera un URI pour l'image de profil de l'utilisateur.
MODIFIER:
Pour obtenir la photo de profil d’un utilisateur en fonction de son adresse e-mail, commencez par rechercher l’utilisateur.
https://www.google.com/m8/feeds/contacts/default/thin?q=EMAIL_ADDRESS_HERE
Vous pouvez ensuite récupérer le bon ID utilisateur pour cet utilisateur à partir du JSON renvoyé et l'utiliser pour obtenir une image de profil.
un simple javascript pour récupérer une image de profil public à partir de 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>
Je me suis cogné la tête pendant des jours, car aucune des réponses ne semblait plus fonctionner. Qu'est-ce qui a fonctionné et qui a semblé le plus robuste face aux changements futurs était (il utilise 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>
Vous avez besoin d'un identifiant de client Google OAuth2 - voir https://developers.google.com/identity/protocols/OAuth2UserAgent pour plus de détails. Cela ne semble pas fonctionner uniquement avec une clé d'API - d'après les réponses que j'ai reçues, ils ont défini le quota d'accès non authentifié à l'API (c'est-à-dire utilisant simplement la clé et non le ClientID).
L'ID client est disponible à partir de la console cloud, comme indiqué sur le lien. Je pense que vous devez créer un projet pour créer les informations d'identification, mais si vous ne l'utilisez pas, ils ne vous factureront pas, ce qui ne pose aucun problème. L'utilisateur doit être connecté - si ce n'est pas le cas, ce code se connectera alors. Mais si vous n'utilisez pas de connexion Google pour votre page de toute façon - pourquoi voudriez-vous que leur vignette apparaisse? Parce que l'URL de l'image est disponible à partir du profil utilisateur de base. - la demande d'API ne semble pas avoir besoin d'étendue particulière et il n'y en a aucune dans l'appel d'API dans le code.
Vous devrez identifier l'URL de la page à partir de laquelle vous appelez dans les informations d'identification de votre client dans la console Google. Dans le cas contraire, la demande sera refusée. Il existe un quota - je pense que c'est 20 000 par jour - d'appels d'API gratuits, après quoi ils vous factureront pour l'utilisation de l'API. C'est tout ce que je peux rassembler.
Peut-être qu'il est trop tard pour répondre à la question, mais le meilleur moyen que j'ai trouvé était de commencer par l'utiliser http://picasaweb.google.com/data/entry/api/user/ ? Alt = json
À partir de la réponse JSON, vous obtiendrez une section auteur contenant uri: $ t: https: picasaweb.google.com/0000000000000.
maintenant les numéros à la fin est l'ID utilisateur qui peut être utilisé pour récupérer le profil utilisateur à l'aide de cette API
https: www.googleapis.com/plus/v1/people/userId
Ex: https: www.googleapis.com/plus/v1/people/0000000000000
Vous pouvez utiliser l'API de profil d'application Google.
voici l'exemple de code pour accéder à la photo de profil
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"};
}
vous pouvez obtenir plus d'informations ici
Après avoir été authentifié, vous pouvez obtenir vos informations d’utilisateur en utilisant l’URL: https://www.googleapis.com/oauth2/v1/userinfo?alt=json
Vous pouvez essayer quelque chose comme :
<?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'];
?>
J'espère que cela fonctionnera.
Si vous authentifiez des utilisateurs de votre application avec Google à l'aide de l'API OAuth 2.0 - Par exemple, avec passeport -> https://www.npmjs.com/package/passport-google-oauth20
Vous pouvez demander l'étendue "profile", qui vous donne un tas d'informations de displayName aux photos de profil de l'utilisateur "profile.photos [0]"