Obtendo o URL da foto do perfil do Google+ com user_id

92

Eu sei que muitas APIs de redes sociais fornecem uma maneira de construir um url para a foto do perfil de um usuário, usando seu user_id ou nome de usuário. Para o Facebook, é assim:

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

Agora, existe algo assim para o Google Plus? Ou qualquer outra forma de obter a foto do usuário sem uma chamada de API?

ArVan
fonte
3
Abri uma solicitação de recurso que você pode marcar com estrela para obter atualizações se o Google alguma vez implementá-la. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham
Aqui está um exemplo do contrário. Incorporando, por exemplo, seu talento StackOverflow em seu perfil do Google+: goo.gl/8EE4LT
Lorenz Lo Sauer

Respostas:

100

O Google mudou sua política, então a maneira antiga de obter a imagem do perfil do Google não funcionará agora, que era

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

A nova maneira de fazer isso é

Solicitar URL

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

Isso fornecerá o url da imagem do perfil do Google no formato json, conforme mostrado abaixo

Resposta :

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


Mais parâmetros podem ser encontrados para enviar com o URL que você pode precisar aqui

Para mais detalhes você também pode verificar a questão dada onde eu respondi para o mesmo tipo de problema. Como obter a imagem do usuário através do ID do usuário no Google plus?

Happy Coding !!

Deepak Goswami
fonte
1
Ainda não é um redirecionamento, não pode ser usado em uma <img>tag
Kirill Kulakov
2
é por isso que é mencionado no formato JSON, você não entende, já que há mudanças, então você não pode esperar que tudo funcione como antes @KirillKulakov
TheMohanAhuja
1
@rgoraya você não pode solicitar em uma chamada de API, mas certamente pode adicionar tamanho com o URL da imagem, que você obteve como.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja
1
Estou tendo um erro de solicitação incorreta, qual api devo habilitar no meu console de desenvolvedor
Earwin delos Santos
3
existe alguma maneira de obtermos a foto do perfil do usuário sem a API do Google Plus, já que ela terá seu uso suspenso no futuro
Saurabh Verma
94

ATUALIZAÇÃO: O método abaixo NÃO FUNCIONA desde 2015

É possível obter a foto do perfil, e você pode até definir o tamanho dela:

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

Exemplo: minha foto de perfil, com tamanho definido para 100 pixels:

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

Uso com uma tag de imagem:

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

Espero que funcione!

Emil Stenström
fonte
1
Sim, não estou trabalhando agora, alguém sabe se é uma questão temporal ou permanente?
Cecilia Abadie
1
Este método não funciona mais. Dá um erro 404. Eu testei no Chrome, Safari, FireFox.
Justin
2
Atualizei a resposta para refletir que o método acima não funciona há alguns dias.
Emil Stenström
1
@CeciliaAbadie: Você pode confirmar se seu método ainda funciona? Tentei várias variações, mas não consegui fazer funcionar com meu ID de usuário (veja a resposta acima). Você pode?
Emil Stenström
2
@rgoraya: Mas como você calcula a parte xxxxxx automaticamente?
Emil Stenström
47

ATUALIZAÇÃO: o Google interrompeu o suporte para este método, que agora retorna um erro 404 (não encontrado) .


Todos esses urls buscam a foto do perfil de um usuário:

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}

Eles redirecionam para o mesmo url de imagem obtido na API do Google, um link feio como
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

O mais simples é usar diretamente como a fonte da imagem:

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

Caso contrário, para obter exatamente o mesmo url de uma chamada de API do Google, você pode ler os cabeçalhos das imagens,
por exemplo em PHP:

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

conforme descrito no artigo Obtenha a imagem do perfil do Google Plus usando PHP .

Salvador
fonte
1
Não há necessidade de fazer uma solicitação HTTP para cada solicitação, veja minha resposta.
Emil Stenström
1
Isso está documentado em algum lugar?
Jonas Alves
1
Embora funcione perfeitamente, eu não iria desta forma, já que o Google pode simplesmente parar de oferecer suporte a isso, já que não vejo nenhuma documentação oficial
Lefteris
Eu adicionei uma resposta completa abaixo
Erwan
Abaixo, adicionei uma nova solução para obter a imagem do perfil do Google por id de usuário, que não retorna o erro 404, verifique isso.
Deepak Goswami
26

Abordagem 1: (não funciona mais)

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

Abordagem 2: (cada solicitação conta em seus limites de taxa de API, que é de 10 mil solicitações por dia gratuitamente)

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

com o seguinte formato de resposta:

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

Abordagem 3: (não requer chave de API)

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

na resposta json, você obtém uma propriedade chamada "gphoto $ thumbnail", que contém o url da imagem do perfil como o seguinte:

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

Você pode notar na url a parte "s64-c" que significa que o tamanho da imagem é 64, tentei usar outros valores como "s100-c" e funcionaram. Além disso, se você remover a parte "s64-c" e anexar o parâmetro "? Sz = 100", isso também funcionará a partir de agora. Embora esta não seja uma maneira muito boa de obter a foto do perfil de um usuário gplus, a vantagem é que não requer nenhuma chave de API.

Masum
fonte
No Approach2, você descobriu como definir o tamanho da imagem por chamada de API?
Maca
@Maca, você deve obter a resposta da API como esta: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}} de onde você pode definir o parâmetro sz para diferentes tamanhos de imagem
Masum
lol..google vai ter que hackear cada link de imagem publicamente disponível para vir sob sua API para que as pessoas não tenham escolha a não ser obter uma chave de API.
user1323136
2
Gostaria de saber se existe algo como o picasaweb, mas você obtém a imagem diretamente do e-mail e não do google +. Acabei de ter o caso de um usuário que possui uma imagem em sua conta do Gmail mas não possui perfil no google +, e não traz imagem. Só consigo obter um url como este lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405
2
A api do picasaweb.google.com está suspensa e será desativada em developers.google.com/picasa-web
siddhesh
4

Se você quiser mostrar a foto do perfil do usuário conectado no momento, você nem precisa saber o {user_id}. Basta usar https://plus.google.com/s2/photos/profile/me.

Danny Ruijters
fonte
obrigado, mas infelizmente não é para o usuário conectado no momento
ArVan
A questão era sobre como obter a foto do perfil usando o user_id. Não comigo
makki de
3

Você pode obter o URL da imagem do perfil usando o método people.get da API do Google+. Isso exige uma viagem extra de ida e volta, mas é a maneira mais confiável de obter a imagem.

Tecnicamente, você também pode usar o URL, https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}que redirecionará para o URL final. {id}é o ID de usuário do Google ou um dos antigos nomes de usuário dos Perfis do Google (eles ainda existem para os usuários que os tinham, mas não acho que você possa criar novos). {size}é o tamanho desejado da foto em pixels. Tenho quase certeza de que este não é um recurso suportado e documentado, então eu não confiaria nele para nada importante, pois ele pode desaparecer a qualquer momento sem aviso prévio. Mas para protótipos rápidos ou pequenos aplicativos únicos, pode ser suficiente.

Will Norris
fonte
Isso está documentado em algum lugar?
Jonas Alves
sim, Justin parece estar certo ... isso não funciona mais.
Will Norris
2

tentar acessar o / s2 / profile / photo url funciona para a maioria dos usuários, mas não para todos.

O único método de prova completa é usar a API do Google+. Você não precisa de autenticação de usuário para solicitar dados de perfil público, portanto, é um método bastante simples:

  1. Obtenha uma chave de API do Google+ em https://cloud.google.com/console

  2. Faça uma solicitação GET simples para: https://www.googleapis.com/plus/v1/people/+ <nome de usuário>? Key =

Observe o + antes do nome de usuário. Se você usar ids de usuário em vez disso (a longa sequência de dígitos), você não precisa do +

  1. você obterá uma representação JSON muito abrangente dos dados do perfil, que inclui: "imagem": {"url": " https://lh4.googleusercontent.com/ ..... o resto do url da imagem .... "}
Erwan
fonte
2

Se você usar Flutter, poderá acessá-lo via people.googleapis.comendpoint, o código usa a 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'];
}

Você obterá 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}]
}

onde urlé um URL de imagem acessível.

onmyway133
fonte
2

As APIs herdadas do Google+ foram desativadas em 7 de março de 2019. Mudanças no plano de desativação foram feitas recentemente, o que pode mitigar seu efeito em alguns desenvolvedores.

Michael de Oz
fonte
1

Tentei todo o possível .. aqui está a parte final do código de trabalho. Espero que ajude alguém que está procurando por isso.

    <?
$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
fonte
-5

Resposta simples: não

Você terá que consultar a API da pessoa e obter os dados image.url do perfil para obter a foto. AFAIK não existe um formato padrão para esse url que contém o ID do usuário.

Kolja
fonte
Você tem certeza? Será que eles têm planos de fazer tal coisa? Obrigado mesmo assim.
ArVan
1
Se você olhar para perfis diferentes e olhar para a saída html, por exemplo, com "inspecionar elemento" no cromo, você verá que eles são todos diferentes e não contêm o ID do usuário. Também não há nada nos documentos oficiais.
Kolja
2
É possível obter a imagem e definir um tamanho específico a ser procurado. Veja minha resposta abaixo.
Emil Stenström
Não foi possível quando a pergunta e esta resposta foram postadas :)
ArVan