Recupero dell'URL dell'immagine del profilo Google+ con user_id


92

So che molte API di social network forniscono un modo per costruire un URL per l'immagine del profilo di un utente, utilizzando il loro user_id o nome utente. Per Facebook assomiglia a questo:

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

Ora c'è qualcosa di simile per Google Plus? O qualsiasi altro modo per ottenere la foto dell'utente senza una chiamata API ??


3
Ho aperto una richiesta di funzionalità che puoi aggiungere a Speciali per ricevere aggiornamenti se Google la implementa. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham

Ecco un esempio per il contrario. Incorporando ad esempio il tuo stile StackOverflow nel tuo profilo Google+: goo.gl/8EE4LT
Lorenz Lo Sauer

Risposte:


100

Google aveva cambiato la sua politica, quindi il vecchio modo per ottenere l'immagine del profilo di Google non funzionerà ora, il che era

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

Il nuovo modo per farlo è

Richiedi URL

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

Ciò fornirà l'URL dell'immagine del profilo di Google in formato json come indicato di seguito

Risposta:

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


È possibile trovare altri parametri da inviare con l'URL di cui potresti aver bisogno da qui

Per maggiori dettagli puoi anche controllare la domanda data in cui ho risposto per lo stesso tipo di problema Come ottenere l'immagine dell'utente tramite l'ID utente in Google plus?

Codifica felice !!


1
Non è ancora un reindirizzamento, non può essere utilizzato all'interno di un <img>tag
Kirill Kulakov

2
ecco perché è menzionato nel formato JSON, non lo capisci, dal momento che ci sono modifiche quindi non puoi aspettarti che tutto funzioni come prima @KirillKulakov
TheMohanAhuja

1
@rgoraya non puoi richiedere nella chiamata API ma puoi sicuramente aggiungere dimensioni con l'URL dell'immagine, che hai ottenuto come.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja

1
Ho un errore di richiesta errata, quale API dovrei abilitare sulla mia console per sviluppatori
Earwin delos Santos

3
c'è un modo in cui possiamo ottenere l'immagine del profilo dell'utente senza google plus api poiché sarà deprecata in futuro
Saurabh Verma

94

AGGIORNAMENTO: il metodo seguente NON FUNZIONA dal 2015

È possibile ottenere l'immagine del profilo e puoi persino impostarne le dimensioni:

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

Esempio: la mia immagine del profilo, con dimensioni impostate su 100 pixel:

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

Utilizzo con un tag immagine:

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

Spero che funzioni!


1
Sì, non funziona in questo momento, qualcuno sa se è un problema temporale o permanente?
Cecilia Abadie

1
Questo metodo non funziona più. Fornisce un errore 404. Ho provato in Chrome, Safari, FireFox.
Justin

2
Ho aggiornato la risposta per riflettere che il metodo sopra non funziona a partire da pochi giorni fa.
Emil Stenström

1
@CeciliaAbadie: puoi confermare che il tuo metodo funziona ancora? Ho provato diverse varianti ma non sono riuscito a farlo funzionare con il mio ID utente (vedi la risposta sopra). Puoi?
Emil Stenström

2
@rgoraya: Ma come si calcola automaticamente la parte xxxxxx?
Emil Stenström

47

AGGIORNAMENTO: Google ha interrotto il supporto per questo metodo, che ora restituisce un errore 404 (non trovato) .


Tutti questi URL recuperano l'immagine del profilo di un utente:

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}

Reindirizzano allo stesso URL dell'immagine che ottieni dall'API di Google, un brutto collegamento come
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

Il più semplice è usare direttamente come la fonte dell'immagine:

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

Altrimenti per ottenere esattamente lo stesso URL di una chiamata API di Google puoi leggere le intestazioni delle immagini,
ad esempio in PHP:

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

come descritto nell'articolo Recupera l'immagine del profilo di Google Plus utilizzando PHP .


1
Non è necessario effettuare una richiesta HTTP per ogni richiesta, vedere la mia risposta.
Emil Stenström

1
È documentato da qualche parte?
Jonas Alves

1
Sebbene funzioni perfettamente, non andrei in questo modo, poiché Google potrebbe semplicemente smettere di supportarlo, dal momento che non vedo da nessuna parte una documentazione ufficiale
Lefteris

Ho aggiunto una risposta completa di prova di seguito
Erwan

Di seguito ho aggiunto una nuova soluzione per ottenere l'immagine del profilo di Google dall'ID utente, che non restituisce l'errore 404, per favore controlla.
Deepak Goswami

26

Approccio 1: (non funziona più)

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

Approccio 2: (ogni richiesta conta nei limiti di velocità API che è di 10.000 richieste al giorno gratuitamente)

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

con il seguente formato di risposta:

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

Approccio 3: (non richiede la chiave API)

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

nella risposta json ottieni una proprietà denominata "gphoto $ thumbnail", che contiene l'URL dell'immagine del profilo come la seguente:

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

Potresti notare nell'URL la parte "s64-c" che significa che la dimensione dell'immagine è 64, ho provato a usare altri valori come "s100-c" e hanno funzionato. Inoltre, se rimuovi la parte "s64-c" e aggiungi il parametro "? Sz = 100", anche questo funzionerà da ora. Anche se questo non è un ottimo modo per ottenere l'immagine del profilo di un utente gplus, il vantaggio è che non richiede alcuna chiave API.


In Approach2 hai capito come impostare la dimensione dell'immagine tramite chiamata API?
Maca

@Maca dovresti ottenere la risposta API in questo modo: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}} da cui puoi impostare il parametro sz per diverse dimensioni di immagine
Masum

lol..google dovrà hackerare ogni link immagine disponibile pubblicamente per entrare nella loro API in modo che le persone non abbiano altra scelta che ottenere una chiave API.
user1323136

2
Mi chiedo se esista qualcosa come picasaweb ma ottieni l'immagine direttamente dall'email e non da google +. Ho solo un caso di un utente che ha un'immagine nel tuo account Gmail ma non ha un profilo su google + e non porta l'immagine. Solo può ottenere un URL come questo lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405

2
picasaweb.google.com api è deprezzato e verrà disattivato da gennaio 2019 developers.google.com/picasa-web
siddhesh

11

Google, nessuna API necessaria:

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

// Esempio di output: https://lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

CAMBIO: il 64 in "s64" per la taglia


1
Questo va bene, ma non viene restituito se l'avatar è quello predefinito o se è stato caricato da un utente reale.
Miguel

4

Se vuoi mostrare l'immagine del profilo per l'utente attualmente connesso, non hai nemmeno bisogno di conoscere l '{user_id}. Il semplice utilizzo https://plus.google.com/s2/photos/profile/mesarà sufficiente.


grazie, ma sfortunatamente non è per l'utente attualmente connesso
ArVan

La domanda era ottenere l'immagine del profilo utilizzando user_id. Non con me
makki,

3

Puoi ottenere l'URL dell'immagine del profilo utilizzando il metodo people.get dell'API di Google+. Ciò richiede un viaggio di andata e ritorno in più, ma è il modo più affidabile per ottenere l'immagine.

Tecnicamente puoi anche utilizzare l'URL https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}che reindirizzerà all'URL finale. {id}è l'ID utente di Google o uno dei vecchi nomi utente dei profili Google (esistono ancora per gli utenti che li avevano, ma non credo che tu possa più crearne di nuovi). {size}è la dimensione desiderata della foto in pixel. Sono quasi certo che questa non sia una funzionalità supportata e documentata, quindi non ci farei affidamento per nulla di importante in quanto potrebbe scomparire in qualsiasi momento senza preavviso. Ma per prototipi rapidi o piccole applicazioni una tantum, potrebbe essere sufficiente.


È documentato da qualche parte?
Jonas Alves

sì, Justin sembra avere ragione ... questo non funziona più.
Will Norris

2

provare ad accedere all'URL / s2 / profilo / foto funziona per la maggior parte degli utenti ma non per tutti.

L'unico metodo di prova completo è utilizzare l'API di Google+. Non è necessaria l'autenticazione dell'utente per richiedere i dati del profilo pubblico, quindi è un metodo piuttosto semplice:

  1. Ottieni una chiave API Google+ su https://cloud.google.com/console

  2. Fai una semplice richiesta GET a: https://www.googleapis.com/plus/v1/people/+ <nome utente>? Key =

Nota il + prima del nome utente. Se invece utilizzi gli ID utente (la lunga stringa di cifre), non hai bisogno del segno +

  1. otterrai una rappresentazione JSON molto completa dei dati del profilo che include: "image": {"url": " https://lh4.googleusercontent.com/ ..... il resto dell'URL dell'immagine .... "}

2

Se usi Flutter, puoi accedervi tramite people.googleapis.comendpoint, il codice usa la google_sign_inlibreria

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

Otterrai qualcosa di simile

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

dove urlè l'URL di un'immagine accessibile.


2

Le API legacy di Google+ sono state chiuse a partire dal 7 marzo 2019. Recentemente sono state apportate modifiche al piano di spegnimento che potrebbero mitigarne l'effetto su alcuni sviluppatori.


1

Ho provato tutto il possibile .. ecco l'ultimo pezzo di codice funzionante. Spero che aiuti qualcuno che lo sta cercando.

    <?
$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;
?>

-5

Risposta semplice: no

Dovrai interrogare l'API della persona e prendere i dati image.url del profilo per ottenere la foto. AFAIK non esiste un formato predefinito per quell'URL che contiene l'ID utente.


Sei sicuro? Mi chiedo se hanno in programma di fare una cosa del genere? Grazie comunque.
ArVan

1
Se guardi diversi profili e guardi l'output html, ad esempio con "inspect element" in chrome, vedrai che sono tutti diversi e non contengono l'ID utente. Inoltre non c'è niente sui documenti ufficiali.
Kolja

2
È possibile, sia ottenere l'immagine, sia impostare una dimensione specifica da cercare. Vedi la mia risposta di seguito.
Emil Stenström

Non è stato possibile quando la domanda e questa risposta sono state pubblicate :)
ArVan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.