Obtenir l'URL de la photo de profil Google+ avec user_id

92

Je sais que de nombreuses API de réseaux sociaux permettent de créer une URL vers la photo de profil d'un utilisateur, en utilisant son user_id ou son nom d'utilisateur. Pour Facebook, cela ressemble à ceci:

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

Y a-t-il maintenant quelque chose comme ça pour Google Plus? Ou tout autre moyen d'obtenir la photo de l'utilisateur sans appel API ??

ArVan
la source
3
J'ai ouvert une demande de fonctionnalité que vous pouvez démarrer pour obtenir des mises à jour si Google la met en œuvre. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham
Voici un exemple de l'inverse. Intégrez par exemple votre flair StackOverflow dans votre profil Google+: goo.gl/8EE4LT
Lorenz Lo Sauer

Réponses:

100

Google a modifié sa politique de sorte que l'ancienne méthode d'obtention de l'image de profil Google ne fonctionne plus maintenant, à savoir

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

Une nouvelle façon de faire est

URL de la demande

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

Cela donnera l'URL de l'image de profil Google au format json comme indiqué ci-dessous

Réponse:

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


Vous pouvez trouver plus de paramètres à envoyer avec l'URL dont vous pourriez avoir besoin à partir d' ici

Pour plus de détails, vous pouvez également vérifier la question donnée à laquelle j'ai répondu pour le même type de problème Comment obtenir l'image de l'utilisateur via l'identifiant de l'utilisateur dans Google plus?

Bon codage !!

Deepak Goswami
la source
1
Ce n'est toujours pas une redirection, il ne peut pas être utilisé dans un <img>tag
Kirill Kulakov
2
c'est pourquoi il est mentionné au format JSON, vous ne comprenez pas cela, car il y a des changements, vous ne pouvez donc pas vous attendre à ce que tout fonctionne comme avant @KirillKulakov
TheMohanAhuja
1
@rgoraya vous ne pouvez pas demander dans l'appel API mais vous pouvez sûrement ajouter de la taille avec l'URL de l'image, que vous avez obtenue comme.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja
1
J'ai une mauvaise erreur de demande, quelle api dois-je activer sur ma console de développeur
Earwin delos Santos
3
existe-t-il un moyen d'obtenir la photo de profil de l'utilisateur sans google plus api, car elle sera obsolète à l'avenir
Saurabh Verma
94

MISE À JOUR: La méthode ci-dessous NE FONCTIONNE PAS depuis 2015

Il est possible d'obtenir la photo de profil, et vous pouvez même en définir la taille:

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

Exemple: Ma photo de profil, avec une taille de 100 pixels:

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

Utilisation avec une balise d'image:

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

J'espère que vous le faites fonctionner!

Emil Stenström
la source
1
Oui, ne fonctionne pas pour le moment, n'importe qui sait si c'est un problème temporel ou permanent?
Cecilia Abadie
1
Cette méthode ne fonctionne plus. Donne une erreur 404. J'ai testé dans Chrome, Safari, FireFox.
Justin
2
J'ai mis à jour la réponse pour refléter que la méthode ci-dessus ne fonctionne pas il y a quelques jours.
Emil Stenström
1
@CeciliaAbadie: Pouvez-vous confirmer que votre méthode fonctionne toujours? J'ai essayé plusieurs variantes mais je n'ai pas pu le faire fonctionner avec mon identifiant d'utilisateur (voir la réponse ci-dessus). Peut tu?
Emil Stenström
2
@rgoraya: Mais comment calculer automatiquement la partie xxxxxx?
Emil Stenström
47

MISE À JOUR: Google a arrêté la prise en charge de cette méthode, qui renvoie désormais une erreur 404 (introuvable) .


Toutes ces URL récupèrent la photo de profil d'un utilisateur:

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}

Ils redirigent vers la même URL d'image que vous obtenez de l'API Google, un lien laid comme
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

Le plus simple est d'utiliser directement comme source d'image:

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

Sinon, pour obtenir exactement la même URL d'un appel d'API Google, vous pouvez lire les en-têtes d'image,
par exemple en PHP:

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

comme décrit dans l'article Récupérer l'image de profil Google Plus à l'aide de PHP .

Salvador
la source
1
Pas besoin de faire une requête HTTP pour chaque requête, voir ma réponse.
Emil Stenström
1
Est-ce documenté quelque part?
Jonas Alves
1
Bien que cela fonctionne parfaitement, je n'irais pas dans cette direction, car Google pourrait simplement cesser de soutenir cela, car je ne vois nulle part de documentation officielle
Lefteris
J'ai ajouté une preuve complète de réponse ci
Erwan
Ci-dessous, j'ai ajouté une nouvelle solution pour obtenir l'image de profil Google par identifiant d'utilisateur, qui ne renvoie pas une erreur 404, veuillez vérifier cela.
Deepak Goswami
26

Approche 1: (ne fonctionne plus)

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

Approche 2: (chaque demande compte dans vos limites de taux API, soit 10k demandes par jour gratuitement)

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

avec le format de réponse suivant:

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

Approche 3: (ne nécessite pas de clé API)

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

dans la réponse json, vous obtenez une propriété nommée "gphoto $ miniature", qui contient l'URL de l'image de profil comme suit:

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

Vous remarquerez peut-être dans l'URL la partie "s64-c" qui signifie que la taille de l'image est de 64, j'ai essayé d'utiliser d'autres valeurs comme "s100-c" et elles ont fonctionné. Aussi, si vous supprimez la partie "s64-c" et ajoutez le paramètre "? Sz = 100", cela fonctionnera également à partir de maintenant. Bien que ce ne soit pas un très bon moyen d'obtenir l'image de profil d'un utilisateur gplus, mais l'avantage est qu'il ne nécessite aucune clé api.

Masum
la source
Sur Approach2, avez-vous compris comment définir la taille de l'image par appel API?
Maca
@Maca, vous devriez obtenir la réponse de l'API comme ceci: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}} d'où vous pouvez définir le paramètre sz pour différentes tailles d'image
Masum
lol..google va devoir pirater tous les liens d'image accessibles au public pour qu'ils relèvent de leur API pour que les gens n'aient d'autre choix que d'obtenir une clé API.
user1323136
2
Je me demande s'il y a quelque chose comme picasaweb mais vous obtenez l'image directement à partir de l'email et non de google +. J'ai juste le cas d'un utilisateur qui a une image dans votre compte Gmail mais qui n'a pas de profil sur google + et qui n'apporte pas d'image. Seul peut obtenir une URL comme celle-ci lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA
...
2
picasaweb.google.com api est depriciated et sera désactivé par janvier 2019 developers.google.com/picasa-web
Siddhesh
11

Google, aucune API nécessaire:

$data = file_get_contents('http://picasaweb.google.com/data/entry/api/user/<USER_ID>?alt=json');
$d = json_decode($data);
$avatar = $d->{'entry'}->{'gphoto$thumbnail'}->{'$t'};

// Exemple de sorties: https://lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

CHANGEMENT: le 64 en "s64" pour la taille

Shawn Rebelo
la source
1
C'est bien, mais ne revient pas si l'avatar est celui par défaut ou si un utilisateur réel a téléchargé un.
Miguel
4

Si vous souhaitez afficher la photo de profil de l'utilisateur actuellement connecté, vous n'avez même pas besoin de connaître l '{user_id}. La simple utilisation https://plus.google.com/s2/photos/profile/mesuffira.

Danny Ruijters
la source
merci, mais malheureusement ce n'est pas pour l'utilisateur actuellement connecté
ArVan
La question portait sur l'obtention de la photo de profil à l'aide de user_id. Pas avec moi
makki
3

Vous pouvez obtenir l'URL de l'image de profil à l'aide de la méthode people.get de l'API Google+. Cela nécessite un aller-retour supplémentaire, mais c'est le moyen le plus fiable d'obtenir l'image.

Vous pouvez également techniquement utiliser l'URL https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}qui redirigera ensuite vers l'URL finale. {id}est l'ID utilisateur Google ou l'un des anciens noms d'utilisateur des profils Google (ils existent toujours pour les utilisateurs qui les avaient, mais je ne pense pas que vous puissiez en créer de nouveaux). {size}est la taille souhaitée de la photo en pixels. Je suis presque certain que ce n'est pas une fonctionnalité documentée et prise en charge, donc je ne compterais pas dessus pour quoi que ce soit d'important car elle pourrait disparaître à tout moment sans préavis. Mais pour les prototypes rapides ou les petites applications ponctuelles, cela peut être suffisant.

Will Norris
la source
Est-ce documenté quelque part?
Jonas Alves
oui, Justin semble avoir raison ... cela ne fonctionne plus.
Will Norris
2

essayer d'accéder à l'URL / s2 / profile / photo fonctionne pour la plupart des utilisateurs mais pas pour tous.

La seule méthode de preuve complète consiste à utiliser l'API Google+. Vous n'avez pas besoin d'authentification utilisateur pour demander des données de profil public, c'est donc une méthode plutôt simple:

  1. Obtenez une clé API Google+ sur https://cloud.google.com/console

  2. Faites une simple demande GET à: https://www.googleapis.com/plus/v1/people/+ <nom d'utilisateur>? Key =

Notez le + avant le nom d'utilisateur. Si vous utilisez des identifiants utilisateur à la place (la longue chaîne de chiffres), vous n'avez pas besoin du +

  1. vous obtiendrez une représentation JSON très complète des données de profil qui comprend: "image": {"url": " https://lh4.googleusercontent.com/ ..... le reste de l'url de l'image .... "}
Erwan
la source
2

Si vous utilisez Flutter, vous pouvez y accéder via le people.googleapis.compoint de terminaison, le code utilise la google_sign_inbibliothèque

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

Vous obtiendrez quelque chose comme

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

urlest une URL d'image accessible.

onmyway133
la source
2

Les API Google+ héritées ont été fermées le 7 mars 2019. Des modifications du plan d'arrêt ont été apportées récemment, ce qui peut atténuer son effet sur certains développeurs.

Michael de Oz
la source
1

J'ai tout essayé. Voici le dernier morceau de code de travail. J'espère que cela aide quelqu'un qui le cherche.

    <?
$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
la source
-5

Réponse simple: non

Vous devrez interroger l'API de la personne et prendre les données de profil image.url pour obtenir la photo. AFAIK il n'y a pas de format par défaut pour cette URL qui contient l'ID utilisateur.

Kolja
la source
Tu es sûre? Je me demande s'ils ont des plans pour faire une telle chose? Merci quand même.
ArVan
1
Si vous regardez différents profils et regardez la sortie html, par exemple avec "inspect element" dans chrome, vous verrez qu'ils sont tous différents et ne contiennent pas l'ID utilisateur. De plus, il n'y a rien sur les documents officiels.
Kolja
2
Il est possible à la fois d'obtenir l'image et de définir une taille spécifique à rechercher. Voir ma réponse ci-dessous.
Emil Stenström
Ce n'était pas possible lorsque la question et cette réponse ont été publiées :)
ArVan