Obtener la URL de la imagen de perfil de Google+ con user_id

92

Sé que muchas API de redes sociales proporcionan una forma de construir una URL para la imagen de perfil de un usuario, utilizando su user_id o nombre de usuario. Para Facebook se ve así:

http://graph.facebook.com/user_id/picture?type=square

¿Hay algo como esto para Google Plus? ¿O alguna otra forma de obtener la foto del usuario sin una llamada API?

ArVan
fuente
3
Abrí una solicitud de función que puede destacar para obtener actualizaciones si Google alguna vez la implementa. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham
Aquí hay un ejemplo al revés. Incrustar, por ejemplo, su estilo StackOverflow en su perfil de Google+: goo.gl/8EE4LT
Lorenz Lo Sauer

Respuestas:

100

Google había cambiado su política, por lo que la forma anterior de obtener la imagen de perfil de Google no funcionará ahora, que era

https://plus.google.com/s2/photos/profile/(user_id)?sz=150

Nueva forma de hacer esto es

Solicitar URL

https://www.googleapis.com/plus/v1/people/115950284...320?fields=image&key={YOUR_API_KEY}

Eso le dará la URL de la imagen de perfil de Google en formato json como se indica a continuación

Respuesta:

{
    "image": 
    {
         "url": "https://lh3.googleusercontent.com/-OkM...AANA/ltpH4BFZ2as/photo.jpg?sz=50"
    }
}


Se pueden encontrar más parámetros para enviar con la URL que puede necesitar desde aquí

Para obtener más detalles, también puede consultar la pregunta dada donde he respondido para el mismo tipo de problema ¿Cómo obtener una imagen de usuario a través de la identificación de usuario en Google plus?

Codificación feliz !!

Deepak Goswami
fuente
1
Todavía no es una redirección, no se puede usar dentro de una <img>etiqueta
Kirill Kulakov
2
es por eso que se menciona en formato JSON, ¿no lo entiendes? Ya que hay cambios, por lo que no puedes esperar que todo funcione como antes. @KirillKulakov
TheMohanAhuja
1
@rgoraya no puede solicitar en la llamada a la API, pero seguramente puede agregar tamaño con la URL de la imagen, que obtuvo como.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja
1
Tengo un error de solicitud incorrecta, ¿qué API debo habilitar en mi consola de desarrollador
Earwin delos Santos
3
¿Hay alguna forma en que podamos obtener la imagen de perfil del usuario sin google plus api, ya que quedará obsoleta en el futuro?
Saurabh Verma
94

ACTUALIZACIÓN: El método siguiente NO FUNCIONA desde 2015

Es posible obtener la imagen de perfil, e incluso puede establecer su tamaño:

https://plus.google.com/s2/photos/profile/<user_id>?sz=<your_desired_size>

Ejemplo: Mi foto de perfil, con un tamaño de 100 píxeles:

https://plus.google.com/s2/photos/profile/116018066779980863044?sz=100

Uso con una etiqueta de imagen:

<img src="https://plus.google.com/s2/photos/profile/116018066779980863044?sz=100" width="100" height="100">

¡Espero que lo hagas funcionar!

Emil Stenström
fuente
1
Sí, no funciona ahora mismo, ¿alguien sabe si es un problema temporal o permanente?
Cecilia Abadie
1
Este método ya no funciona. Da un error 404. Probé en Chrome, Safari, FireFox.
Justin
2
Actualicé la respuesta para reflejar que el método anterior no funciona hace unos días.
Emil Stenström
1
@CeciliaAbadie: ¿Puedes confirmar que tu método aún funciona? Probé varias variaciones pero no pude hacer que funcionara con mi identificación de usuario (consulte la respuesta anterior). ¿Puedes?
Emil Stenström
2
@rgoraya: ¿Pero cómo se calcula la parte xxxxxx automáticamente?
Emil Stenström
47

ACTUALIZACIÓN: Google dejó de admitir este método, que ahora devuelve un error 404 (no encontrado) .


Todas estas URL obtienen la imagen de perfil de un usuario:

https://www.google.com/s2/photos/profile/{user_id}
https://plus.google.com/s2/photos/profile/{user_id}
https://profiles.google.com/s2/photos/profile/{user_id}

Redirigen a la misma URL de imagen que obtiene de la API de Google, un enlace feo como
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

La más simple es usarla directamente como fuente de imagen:

<img src="https://www.google.com/s2/photos/profile/{user_id}">

De lo contrario, para obtener exactamente la misma URL de una llamada a la API de Google, puede leer los encabezados de imágenes,
por ejemplo, en PHP:

$headers = get_headers("https://www.google.com/s2/photos/profile/{user_id}", 1);
echo "<img src=$headers[Location]>";

como se describe en el artículo Obtener imagen de perfil de Google Plus mediante PHP .

el Salvador
fuente
1
No es necesario realizar una solicitud HTTP para cada solicitud, consulte mi respuesta.
Emil Stenström
1
¿Está esto documentado en alguna parte?
Jonas Alves
1
Aunque esto funciona perfectamente, no iría por este camino, ya que Google podría simplemente dejar de admitir esto, ya que no veo en ninguna parte una documentación oficial
Lefteris
He agregado una respuesta de prueba completa a continuación
Erwan
A continuación, agregué una nueva solución para obtener la imagen de perfil de Google por identificación de usuario, que no devuelve el error 404, verifique eso.
Deepak Goswami
26

Enfoque 1: (ya no funciona)

https://plus.google.com/s2/photos/profile/<user_id>?sz=<your_desired_size>

Enfoque 2: (cada solicitud cuenta en sus límites de tasa de api, que son 10k solicitudes por día gratis)

https://www.googleapis.com/plus/v1/people/<user_id>?fields=image&key={YOUR_API_KEY}

con el siguiente formato de respuesta:

{ "image": { "url": "lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50"; } }

Enfoque 3: (no requiere clave api)

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

en la respuesta json, obtienes una propiedad llamada "gphoto $ thumbnail", que contiene la URL de la imagen de perfil como la siguiente:

http://lh6.ggpht.com/-btLsReiDeF0/AAAAAAAAAAI/AAAAAAAAAAA/GXBpycNk984/s64-c/filename.jpg

Puede notar en la URL la porción "s64-c", lo que significa que el tamaño de la imagen es 64, he intentado usar otros valores como "s100-c" y funcionaron. Además, si elimina la parte "s64-c" y agrega el parámetro "? Sz = 100", eso también funcionará a partir de ahora. Aunque esta no es una buena manera de obtener la imagen de perfil de un usuario de gplus, la ventaja es que no requiere ninguna clave de API.

Masum
fuente
En Approach2, ¿ha descubierto cómo establecer el tamaño de la imagen mediante una llamada a la API?
Maca
@Maca, debería obtener la respuesta de la API como esta: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}} desde donde puede configurar el parámetro sz para diferentes tamaños de imagen
Masum
lol..google tendrá que piratear todos los enlaces de imágenes disponibles públicamente para que se incluyan en su API para que la gente no tenga más remedio que obtener una clave API.
user1323136
2
Me pregunto si hay algo como picasaweb pero obtienes la imagen directamente del correo electrónico y no de google +. Solo tengo el caso de un usuario que tiene una imagen en su cuenta de Gmail pero no tiene un perfil en google +, y no trae imagen. Solo se puede obtener una URL como esta lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405
2
La API de picasaweb.google.com está privada y será desactivada en enero de 2019 developers.google.com/picasa-web
siddhesh
4

Si desea mostrar la imagen de perfil del usuario que ha iniciado sesión actualmente, ni siquiera necesita conocer el {user_id}. Bastará con usarlo https://plus.google.com/s2/photos/profile/me.

Danny Ruijters
fuente
gracias, pero desafortunadamente no es para el usuario que ha iniciado sesión actualmente
ArVan
La pregunta era sobre cómo obtener la foto de perfil usando el user_id. No conmigo
makki
3

Puede obtener la URL de la imagen de perfil utilizando el método people.get de la API de Google+. Eso requiere un viaje de ida y vuelta adicional, pero es la forma más confiable de obtener la imagen.

Técnicamente, también puede usar la URL https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}que luego redirigirá a la URL final. {id}es el ID de usuario de Google o uno de los antiguos nombres de usuario de los Perfiles de Google (todavía existen para los usuarios que los tenían, pero no creo que puedas crear nuevos). {size}es el tamaño deseado de la foto en píxeles. Estoy casi seguro de que esta no es una función compatible y documentada, por lo que no confiaría en ella para nada importante, ya que puede desaparecer en cualquier momento sin previo aviso. Pero para prototipos rápidos o pequeñas aplicaciones únicas, puede ser suficiente.

Will Norris
fuente
¿Está esto documentado en alguna parte?
Jonas Alves
sí, Justin parece tener razón ... esto ya no funciona.
Will Norris
2

intentar acceder a la URL / s2 / profile / photo funciona para la mayoría de los usuarios, pero no para todos.

El único método de prueba completo es utilizar la API de Google+. No necesita autenticación de usuario para solicitar datos de perfil público, por lo que es un método bastante simple:

  1. Obtenga una clave de API de Google+ en https://cloud.google.com/console

  2. Realice una solicitud GET simple a: https://www.googleapis.com/plus/v1/people/+ <nombre de usuario>? Key =

Tenga en cuenta el + antes del nombre de usuario. Si usa ID de usuario en su lugar (la cadena larga de dígitos), no necesita el +

  1. obtendrá una representación JSON muy completa de los datos del perfil que incluye: "image": {"url": " https://lh4.googleusercontent.com/ ..... el resto de la url de la imagen .... "}
Erwan
fuente
2

Si usa Flutter, entonces puede acceder a él a través del people.googleapis.compunto final, el código usa la google_sign_inbiblioteca

import 'package:google_sign_in/google_sign_in.dart';

Future<String> getPhotoUrl(GoogleSignInAccount account, String userId) async {
  // final authentication = await account.authentication;
  final url = 'https://people.googleapis.com/v1/people/${userId}?personFields=photos';
  final response = await http.get(
    url,
    headers: await account.authHeaders
  );

  final data = json.decode(response.body);
  return data['photos'].first['url'];
}

Obtendrás algo como

{
  resourceName: people/998812322529259873423, 
  etag: %EgQBAzcabcQBAgUH, 
  photos: [{metadata: {primary: true, source: {type: PROFILE, id: 107721622529987673423}}, 
  url: https://lh3.googleusercontent.com/a-/abcdefmB2p1VWxLsNT9WSV0yqwuwo6o2Ba21sh_ra7CnrZ=s100}]
}

donde urles una URL de imagen accesible.

onmyway133
fuente
2

Las API de Google+ heredadas se cerraron a partir del 7 de marzo de 2019. Recientemente se han realizado cambios en el plan de cierre que pueden mitigar su efecto en algunos desarrolladores.

Michael de Oz
fuente
1

Intenté todo lo posible ... aquí está la última pieza de código de trabajo. Espero que ayude a alguien que lo esté buscando.

    <?
$url='https://www.googleapis.com/plus/v1/people/116599978027440206136?fields=image%2Furl&key=MY_API_KEY&fields=image';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$d = json_decode($response);
$avatar_url = $d->{'image'}->{'url'};
echo $avatar_url;
?>
suraj jain
fuente
-5

Respuesta simple: no

Tendrás que consultar la API de la persona y tomar los datos de la imagen de perfil.url para obtener la foto. AFAIK no hay un formato predeterminado para esa URL que contiene el ID de usuario.

Kolja
fuente
¿Estas seguro? Me pregunto si tienen planes para hacer tal cosa. Gracias de cualquier manera.
ArVan
1
Si observa diferentes perfiles y observa la salida html, por ejemplo, con "inspeccionar elemento" en Chrome, verá que todos son diferentes y no contienen el ID de usuario. Además, no hay nada en los documentos oficiales.
Kolja
2
ES posible, tanto para obtener la imagen, como para establecer un tamaño específico para buscar. Vea mi respuesta a continuación.
Emil Stenström
No fue posible cuando la pregunta y esta respuesta se publicaron :)
ArVan