google developer google-plus gmail-api

google-plus - google developer



Recuperar la imagen pública de google/gmail de un usuario (10)

Aquí están los enlaces más útiles para obtener una imagen de perfil de Google.

1) Configure un proyecto https://developers.google.com/identity/sign-in/web/sign-in#before_you_begin

2) HABILITE LA API DE LA BIBLIOTECA DE FOTOS DE GOOGLE https://developers.google.com/photos/library/guides/get-started

Después de configurar los pasos anteriores, recibirá el enlace de la imagen de perfil del usuario en respuesta después de la autenticación.

Nota: Después de habilitar la API de la biblioteca de fotos de Google, también obtiene otro ID de cliente y un Secreto de cliente, puede usar cualquiera de los secretos de cliente e ID de cliente de los pasos anteriores. Asegúrese de proporcionar una URL de redireccionamiento en los dos pasos anteriores para que el usuario pueda ser redirigido a esa URL después de una autenticación exitosa.

Estoy escribiendo una aplicación basada en correo electrónico usando gmail-api, y necesito recuperar las imágenes públicas del usuario para la dirección de correo electrónico originada en google. He visto que otras aplicaciones hacen eso, pero no puedo encontrar una manera confiable de obtener estos datos.

Más información:

  • Estoy usando oauth2 para iniciar sesión en el usuario, y no tengo ningún problema para solicitar ningún tipo de permisos allí.
  • He intentado recuperar la imagen usando la API de Google +, pero requiere un ID de usuario para eso, y no sé cómo obtener el ID de usuario para la dirección de correo electrónico (gmail-api no lo proporciona, afaik).
  • He intentado usar la API de contactos, pero solo proporciona imágenes para los contactos del usuario, mientras que los clientes de correo electrónico también pueden mostrar imágenes de otros usuarios.

¡Gracias!

Editar:

Sé que puedo recibir las imágenes requeridas de google plus, si tengo el ID de usuario del otro usuario. Sin embargo, no puedo encontrar una manera de obtener el ID de usuario basado en una dirección de correo electrónico.


Es muy fácil

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

Solo tiene un pequeño problema.

Solo puede obtener la imagen de su perfil de Google+, no directamente desde su cuenta de Gmail.

ACTUALIZAR:

Esta API está en desuso y se rechazará en enero de 2019. Migre a la API de la Biblioteca de Google Photos lo antes posible para evitar interrupciones en su aplicación.

Información Here

Guia de Migracion


Google+ es la forma correcta de hacer esto. En realidad, esto no tiene nada que ver con la API de Gmail. No necesita el ID de usuario del usuario, solo un token de acceso válido con los ámbitos adecuados.

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

A menos que haya un error / token no válido / etc., esto devolverá mucha información sobre el usuario como JSON. En estos datos se incluirá un URI para la imagen de perfil del usuario.

EDITAR:

Para obtener la imagen de perfil de un usuario en función de la dirección de correo electrónico, primero busque el usuario

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

Luego puede recuperar el ID de usuario correcto para ese usuario del JSON devuelto, y usarlo para obtener una imagen de perfil.


Me golpeé la cabeza contra esto durante días, ya que ninguna de las respuestas parecía funcionar. Lo que funcionó y parece más robusto frente a cambios futuros fue (utiliza 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>

Necesita una identificación de cliente de Google OAuth2: consulte https://developers.google.com/identity/protocols/OAuth2UserAgent para obtener más información. No parece funcionar solo con una clave de API: a partir de las respuestas que recibí, han establecido la cuota para el acceso no autenticado a la API (es decir, usando la clave y no el ClientID) a cero.

El ID de cliente está disponible en la consola en la nube como se documenta en el enlace: creo que debe crear un proyecto para crear las credenciales, pero si no lo está utilizando, no le cobrarán, por lo que no es un problema. para iniciar sesión; si no es así, este código lo hará. Pero si no está utilizando un inicio de sesión de Google para su página de todos modos, ¿por qué querría su miniatura? Porque la URL de la imagen está disponible desde el perfil de usuario básico. - la solicitud de API no parece necesitar ningún alcance particular y no hay ninguno en la llamada de API en el código.

Deberá identificar la URL de la página desde la que llama como parte de las credenciales de su cliente en la consola de Google; de ​​lo contrario, la solicitud será denegada. Hay una cuota, creo que son 20,000 por día, de llamadas API gratuitas, luego de lo cual le cobrarán por usar la API. Eso es todo lo que puedo reunir.


Puede que sea demasiado tarde para responder la pregunta, pero la mejor manera que encontré fue usar primero http://picasaweb.google.com/data/entry/api/user/ ? Alt = json

de la respuesta JSON obtendrá la sección del autor que tiene uri: $ t: https: picasaweb.google.com/0000000000000

ahora los números al final son la ID DE USUARIO que se puede usar para recuperar el perfil de usuario usando esta API

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

Ej: https: www.googleapis.com/plus/v1/people/0000000000000


Puedes probar algo como:

<?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'']; ?>

Espero que esto funcione.


Puedes usar la API de perfil de la aplicación de Google

aquí está el código de muestra para acceder a la foto de perfil

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"}; }

puedes obtener más información here


Si está autenticando usuarios en su aplicación con Google usando la API OAuth 2.0 -Por ejemplo, usando pasaporte -> https://www.npmjs.com/package/passport-google-oauth20

Puede solicitar el alcance del "perfil", que le brinda una gran cantidad de información desde tee a las fotos de perfil de los usuarios "profile.photos [0]"


un javascript simple para obtener una imagen de perfil público 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>


ACTUALIZAR:

Esta API está en desuso y se rechazará en enero de 2019. Migre a la API de la Biblioteca de Google Photos lo antes posible para evitar interrupciones en su aplicación.

Información Here

Basado en la respuesta de @ jose920405, he escrito este servicio API público gratuito llamado Pikmail API . Aquí algunas ventajas.

  • No se necesita autenticación.
  • Es totalmente gratuito y de código abierto.
  • Está escrito en Kotlin.
  • No necesita escribir un contenedor para mapear la respuesta.

Aquí está la publicación del blog sobre cómo la API de Pikmail funciona internamente .

Uso:

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);

No dude en contribuir con sus solicitudes de extracción, abrir errores o solicitar nuevas características here .

Nota: Este servicio se basa en una biblioteca independiente llamada Pikmail que se puede usar como una dependencia de Gradle en sus proyectos de Java (servidores o aplicaciones de Android).