Abrufen der Google+ Profilbild-URL mit user_id

92

Ich weiß, dass viele APIs für soziale Netzwerke eine Möglichkeit bieten, mithilfe ihrer Benutzer-ID oder ihres Benutzernamens eine URL zum Profilbild eines Benutzers zu erstellen. Für Facebook sieht es so aus:

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

Gibt es so etwas für Google Plus? Oder eine andere Möglichkeit, das Bild des Benutzers ohne API-Aufruf abzurufen?

ArVan
quelle
3
Ich habe eine Funktionsanfrage geöffnet, die Sie markieren können, um Updates zu erhalten, falls Google sie jemals implementiert. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham
Hier ist ein Beispiel für den umgekehrten Fall. Betten Sie zum Beispiel Ihr StackOverflow-Flair in Ihr Google+ Profil ein: goo.gl/8EE4LT
Lorenz Lo Sauer

Antworten:

100

Google hat seine Richtlinien geändert, sodass die alte Methode zum Abrufen des Google-Profilbilds jetzt nicht mehr funktioniert

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

Ein neuer Weg, dies zu tun, ist

URL anfordern

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

Dadurch wird die URL des Google-Profilbilds im unten angegebenen JSON-Format angezeigt

Antwort :

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


Weitere Parameter zum Senden mit URL, die Sie möglicherweise von hier aus benötigen

Für weitere Informationen können Sie auch die angegebene Frage überprüfen, bei der ich auf dieselbe Art von Problem geantwortet habe. Wie erhalte ich ein Benutzerbild über die Benutzer-ID in Google Plus?

Viel Spaß beim Codieren !!

Deepak Goswami
quelle
1
Es ist immer noch keine Weiterleitung, es kann nicht innerhalb eines <img>Tags verwendet werden
Kirill Kulakov
2
Aus diesem Grund wird es im JSON-Format nicht verstanden, da es Änderungen gibt, sodass Sie nicht erwarten können, dass alles wie zuvor funktioniert. @KirillKulakov
TheMohanAhuja
1
@rgoraya Sie können nicht in API-Aufruf anfordern, aber Sie können sicherlich Größe mit Bild-URL hinzufügen, die Sie als.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja
1
Ich habe einen schlechten Anforderungsfehler, welche API sollte ich auf meiner Entwicklerkonsole
aktivieren
3
Gibt es eine Möglichkeit, wie wir das Profilbild des Nutzers ohne Google Plus-API erhalten können, da es in Zukunft veraltet sein wird
Saurabh Verma
94

UPDATE: Die folgende Methode funktioniert seit 2015 nicht mehr

Es ist möglich, das Profilbild zu erhalten, und Sie können sogar die Größe festlegen:

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

Beispiel: Mein Profilbild mit einer Größe von 100 Pixel:

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

Verwendung mit einem Bild-Tag:

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

Ich hoffe, Sie bringen es zum Laufen!

Emil Stenström
quelle
1
Ja, arbeitet momentan nicht, weiß jemand, ob es sich um ein zeitliches oder ein permanentes Problem handelt?
Cecilia Abadie
1
Diese Methode funktioniert nicht mehr. Gibt einen 404-Fehler aus. Ich habe in Chrome, Safari, FireFox getestet.
Justin
2
Ich habe die Antwort aktualisiert, um zu berücksichtigen, dass die oben beschriebene Methode seit einigen Tagen nicht mehr funktioniert.
Emil Stenström
1
@ CeciliaAbadie: Können Sie bestätigen, dass Ihre Methode noch funktioniert? Versuchte mehrere Variationen, konnte aber nicht mit meiner Benutzer-ID funktionieren (siehe die Antwort oben). Können Sie?
Emil Stenström
2
@rgoraya: Aber wie berechnet man den xxxxxx Teil automatisch?
Emil Stenström
47

UPDATE: Google hat die Unterstützung für diese Methode eingestellt, die jetzt einen 404-Fehler (nicht gefunden) zurückgibt .


Alle diese URLs rufen das Profilbild eines Benutzers ab:

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}

Sie leiten zu derselben Bild-URL weiter, die Sie von der Google-API erhalten, einem hässlichen Link wie
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

Am einfachsten ist es, eine ähnliche Bildquelle direkt zu verwenden:

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

Andernfalls können Sie Bildheader lesen, um genau die gleiche URL eines Google API-Aufrufs zu erhalten,
beispielsweise in PHP:

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

wie im Artikel Abrufen von Google Plus-Profilbildern mit PHP beschrieben .

Salvador
quelle
1
Keine Notwendigkeit, für jede Anfrage eine HTTP-Anfrage zu stellen, siehe meine Antwort.
Emil Stenström
1
Ist das irgendwo dokumentiert?
Jonas Alves
1
Obwohl dies perfekt funktioniert, würde ich diesen Weg nicht gehen, da Google möglicherweise einfach aufhört, dies zu unterstützen, da ich nirgendwo eine offizielle Dokumentation sehe
Lefteris
Ich habe unten eine vollständige Beweisantwort hinzugefügt
Erwan
Unten habe ich eine neue Lösung hinzugefügt, um das Google-Profilbild anhand der Benutzer-ID zu erhalten. Dies gibt keinen 404-Fehler zurück. Überprüfen Sie dies.
Deepak Goswami
26

Ansatz 1: (funktioniert nicht mehr)

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

Ansatz 2: (Jede Anfrage zählt in Ihrem API-Ratenlimit, dh 10.000 Anfragen pro Tag kostenlos.)

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

mit folgendem Antwortformat:

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

Ansatz 3: (kein API-Schlüssel erforderlich)

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

In der JSON-Antwort erhalten Sie eine Eigenschaft mit dem Namen "gphoto $ thumbnail", die die URL des Profilbilds wie folgt enthält:

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

Sie können in der URL den Teil "s64-c" bemerken, was bedeutet, dass die Bildgröße 64 ist. Ich habe versucht, andere Werte wie "s100-c" zu verwenden, und sie haben funktioniert. Auch wenn Sie den Teil "s64-c" entfernen und den Parameter "? Sz = 100" anhängen, funktioniert dies ab sofort. Dies ist zwar kein sehr guter Weg, um das Profilbild eines gplus-Benutzers zu erhalten, aber der Vorteil ist, dass kein API-Schlüssel erforderlich ist.

Masum
quelle
Haben Sie bei Approach2 herausgefunden, wie die Bildgröße per API-Aufruf festgelegt werden kann?
Maca
@Maca Sie sollten die API-Antwort wie folgt erhalten: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}}, von wo aus Sie festlegen können der sz Parameter für verschiedene Bildgrößen
Masum
lol..google muss jeden öffentlich verfügbaren Bildlink hacken, um unter die API zu gelangen, damit die Benutzer keine andere Wahl haben, als einen API-Schlüssel zu erhalten.
user1323136
2
Ich frage mich, ob es so etwas wie Picasaweb gibt, aber Sie erhalten das Bild direkt aus der E-Mail und nicht aus Google +. Ich habe nur einen Fall von einem Nutzer, der ein Bild in Ihrem Google Mail-Konto hat, aber kein Profil auf Google + hat und kein Bild bringt. Nur eine URL wie diese kann lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405
2
picasaweb.google.com API ist enteignet und wird von Jan 2019 Entwicklern
deaktiviert.google.com/picasa-web
11

Google, keine API erforderlich:

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

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

ÄNDERUNG: die 64 in "s64" für die Größe

Shawn Rebelo
quelle
1
Dies ist in Ordnung, wird jedoch nicht zurückgegeben, wenn der Avatar der Standard ist oder ein echter Benutzer einen hochgeladen hat.
Miguel
4

Wenn Sie das Profilbild für den aktuell angemeldeten Benutzer anzeigen möchten, müssen Sie nicht einmal die {Benutzer-ID} kennen. Einfach zu benutzen https://plus.google.com/s2/photos/profile/mewird ausreichen.

Danny Ruijters
quelle
danke, aber leider ist es nicht für aktuell angemeldete Benutzer
ArVan
Die Frage war, wie man das Profilbild mit der Benutzer-ID erhält. Nicht mit dem me
makki
3

Sie können die URL für das Profilbild mithilfe der people.get- Methode der Google+ API abrufen . Dies erfordert eine zusätzliche Rundreise, ist jedoch der zuverlässigste Weg, um das Bild zu erhalten.

Sie können auch technisch die URL verwenden, https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}die dann zur endgültigen URL umleitet. {id}ist die Google-Benutzer-ID oder einer der alten Google Profiles-Benutzernamen (sie existieren noch für Benutzer, die sie hatten, aber ich glaube nicht, dass Sie neue erstellen können). {size}ist die gewünschte Größe des Fotos in Pixel. Ich bin mir fast sicher, dass dies keine dokumentierte, unterstützte Funktion ist, daher würde ich mich bei wichtigen Dingen nicht darauf verlassen, da sie jederzeit ohne vorherige Ankündigung verschwinden kann. Für schnelle Prototypen oder kleine einmalige Anwendungen kann dies jedoch ausreichend sein.

Will Norris
quelle
Ist das irgendwo dokumentiert?
Jonas Alves
Ja, Justin scheint recht zu haben ... das funktioniert nicht mehr.
Will Norris
2

Der Versuch, auf die URL / s2 / profile / photo zuzugreifen, funktioniert für die meisten Benutzer, jedoch nicht für alle.

Die einzige vollständige Beweismethode ist die Verwendung der Google+ API. Sie benötigen keine Benutzerauthentifizierung, um öffentliche Profildaten anzufordern. Dies ist eine recht einfache Methode:

  1. Holen Sie sich einen Google+ API-Schlüssel unter https://cloud.google.com/console

  2. Stellen Sie eine einfache GET-Anfrage an: https://www.googleapis.com/plus/v1/people/+ <Benutzername>? Key =

Beachten Sie das + vor dem Benutzernamen. Wenn Sie stattdessen Benutzer-IDs verwenden (die lange Ziffernfolge), benötigen Sie das + nicht

  1. Sie erhalten eine sehr umfassende JSON-Darstellung der Profildaten, die Folgendes enthält: "image": {"url": " https://lh4.googleusercontent.com/ ..... der Rest der Bild-URL .... "}
Erwan
quelle
2

Wenn Sie Flutter verwenden, können Sie über den people.googleapis.comEndpunkt darauf zugreifen . Der Code verwendet die google_sign_inBibliothek

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

Sie werden so etwas bekommen

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

Wo urlist eine zugängliche Bild-URL?

onmyway133
quelle
2

Ältere Google+ APIs wurden zum 7. März 2019 heruntergefahren. Vor kurzem wurden Änderungen am Abschaltplan vorgenommen, die die Auswirkungen auf einige Entwickler verringern können.

Michael de Oz
quelle
1

Versuchte alles mögliche .. hier ist das letzte Stück Arbeitscode. Hoffe, es hilft jemandem, der danach sucht.

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

Einfache Antwort: Nein

Sie müssen die Personen-API abfragen und die Daten von profile image.url übernehmen , um das Foto zu erhalten. AFAIK Es gibt kein Standardformat für diese URL, die die Benutzer-ID enthält.

Kolja
quelle
Bist du sicher? Ich frage mich, ob sie Pläne haben, so etwas zu machen? Danke trotzdem.
ArVan
1
Wenn Sie sich verschiedene Profile und die HTML-Ausgabe ansehen, z. B. mit "inspect element" in Chrome, werden Sie feststellen, dass sie alle unterschiedlich sind und nicht die Benutzer-ID enthalten. Auch gibt es nichts auf den offiziellen Dokumenten.
Kolja
2
Es ist möglich, sowohl das Bild abzurufen als auch eine bestimmte Größe festzulegen, nach der gesucht werden soll. Siehe meine Antwort unten.
Emil Stenström
Es war nicht möglich, als die Frage und diese Antwort veröffentlicht wurden :)
ArVan