Pobieranie adresu URL zdjęcia profilowego Google+ z user_id

93

Wiem, że wiele interfejsów API sieci społecznościowych umożliwia utworzenie adresu URL do zdjęcia profilowego użytkownika przy użyciu jego identyfikatora użytkownika lub nazwy użytkownika. W przypadku Facebooka wygląda to tak:

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

Czy jest coś takiego dla Google Plus? Lub w jakikolwiek inny sposób na uzyskanie zdjęcia użytkownika bez wywołania API?

ArVan
źródło
3
Otworzyłem żądanie funkcji, które możesz oznaczyć gwiazdką, aby uzyskać aktualizacje, jeśli Google kiedykolwiek ją wdroży. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham
Oto przykład na odwrót. Na przykład umieszczanie stylu StackOverflow w profilu Google+: goo.gl/8EE4LT
Lorenz Lo Sauer
Odpowiedź na to pytanie zmieniała się od 2012 roku zbyt wiele razy. Opublikowałem jedną odpowiedź, która działa w 2020 roku - nie wiem, ile czasu :)
Leandro

Odpowiedzi:

100

Firma Google zmieniła swoje zasady, więc stary sposób uzyskiwania obrazu profilu Google nie będzie teraz działać, co było

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

Nowy sposób na zrobienie tego to

Poproś o URL

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

To da URL obrazu profilu Google w formacie json, jak podano poniżej

Odpowiedź:

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

Więcej parametrów do wysłania z adresem URL, którego możesz potrzebować z tego miejsca

Aby uzyskać więcej szczegółów, możesz również sprawdzić podane pytanie, na które odpowiedziałem na ten sam typ problemu. Jak uzyskać obraz użytkownika za pomocą identyfikatora użytkownika w Google plus?

Deepak Goswami
źródło
2
To nadal nie jest przekierowanie, nie można go używać w <img>tagu
Kirill Kulakov
2
dlatego jest wspomniany w formacie JSON, nie rozumiesz tego, ponieważ są zmiany, więc nie możesz oczekiwać, że wszystko będzie działać tak, jak wcześniej @KirillKulakov
TheMohanAhuja
1
@rgoraya, którego nie możesz zażądać w wywołaniu API, ale na pewno możesz dodać rozmiar za pomocą adresu URL obrazu, który otrzymałeś jako.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja
1
Mam błąd złego żądania, jaki interfejs API powinienem włączyć na mojej konsoli programisty
Earwin delos Santos
3
czy jest jakiś sposób, w jaki możemy uzyskać zdjęcie profilowe użytkownika bez google plus api, ponieważ zostanie ono wycofane w przyszłości
Saurabh Verma,
94

AKTUALIZACJA: Poniższa metoda NIE DZIAŁA od 2015 roku

Możliwe jest pobranie zdjęcia profilowego, a nawet ustawienie jego rozmiaru:

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

Przykład: moje zdjęcie profilowe o rozmiarze ustawionym na 100 pikseli:

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

Użycie z tagiem obrazu:

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

Mam nadzieję, że to działa!

Emil Stenström
źródło
1
Tak, teraz nie działa, ktoś wie, czy jest to problem czasowy, czy stały?
Cecilia Abadie
1
Ta metoda już nie działa. Daje błąd 404. Testowałem w Chrome, Safari, FireFox.
Justin
2
Zaktualizowałem odpowiedź, aby odzwierciedlić, że powyższa metoda nie działa od kilku dni.
Emil Stenström
1
@CeciliaAbadie: Czy możesz potwierdzić, że Twoja metoda nadal działa? Wypróbowałem kilka odmian, ale nie mogłem sprawić, by działało z moim identyfikatorem użytkownika (zobacz odpowiedź powyżej). Czy możesz?
Emil Stenström
2
@rgoraya: Ale jak automatycznie obliczyć część xxxxxx?
Emil Stenström
48

AKTUALIZACJA: Google przestało obsługiwać tę metodę, która teraz zwraca błąd 404 (nie znaleziono) .


Wszystkie te adresy URL pobierają zdjęcie profilowe użytkownika:

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}

Przekierowują do tego samego adresu URL obrazu, który otrzymujesz z Google API, brzydkiego linku, jak
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

Najprościej jest bezpośrednio użyć takiego źródła obrazu:

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

W przeciwnym razie, aby uzyskać dokładnie ten sam adres URL wywołania Google API, możesz przeczytać nagłówki obrazów,
na przykład w PHP:

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

zgodnie z opisem w artykule Pobieranie zdjęcia profilowego Google Plus za pomocą PHP .

Salvador
źródło
1
Nie ma potrzeby wysyłania żądania HTTP dla każdego żądania, zobacz moją odpowiedź.
Emil Stenström
1
Czy jest to gdzieś udokumentowane?
Jonas Alves,
1
Chociaż działa to idealnie, nie poszedłbym w ten sposób, ponieważ Google może po prostu przestać to wspierać, ponieważ nigdzie nie widzę oficjalnej dokumentacji
Lefteris
Dodałem poniżej pełną dowód odpowiedź
Erwan,
Poniżej dodałem nowe rozwiązanie, aby uzyskać zdjęcie profilu Google według identyfikatora użytkownika, które nie zwraca błędu 404, sprawdź to.
Deepak Goswami
26

Podejście 1: (już nie działa)

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

Podejście 2: (każde żądanie wlicza się do limitów szybkości interfejsu API, czyli 10 000 żądań dziennie za darmo)

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

z następującym formatem odpowiedzi:

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

Podejście 3: (nie wymagaj klucza API)

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

w odpowiedzi json otrzymasz właściwość o nazwie „gphoto $ thumbnail”, która zawiera adres URL zdjęcia profilowego, taki jak następujący:

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

Możesz zauważyć w adresie URL fragment „s64-c”, co oznacza rozmiar obrazu 64, próbowałem użyć innych wartości, takich jak „s100-c” i zadziałały. Również jeśli usuniesz część „s64-c” i dodasz parametr „? Sz = 100”, będzie on również działał od teraz. Chociaż nie jest to dobry sposób na uzyskanie zdjęcia profilowego użytkownika gplus, ale jego zaletą jest to, że nie wymaga to żadnego klucza API.

Masum
źródło
Czy w Approach2 wiesz, jak ustawić rozmiar obrazu przez wywołanie API?
Maca
@Maca powinieneś otrzymać następującą odpowiedź API: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}}, skąd możesz ustawić parametr sz dla różnych rozmiarów obrazu
Masum
lol..google będzie musiało zhakować każdy publicznie dostępny link do obrazu, aby trafił do ich API, aby ludzie nie mieli innego wyboru, jak tylko zdobyć klucz API.
user1323136
2
Zastanawiam się, czy jest coś takiego jak picasaweb, ale zdjęcie dostajesz bezpośrednio z e-maila, a nie Google +. Mam tylko przypadek użytkownika, który ma obraz na Twoim koncie Gmail, ale nie ma profilu w Google + i nie wyświetla obrazu. Tylko można uzyskać taki adres URL lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405
2
picasaweb.google.com api jest dezpriciowane i zostanie wyłączone przez programistów w
styczniu 2019.google.com/picasa-web
11

Google, nie jest potrzebny interfejs API:

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

// Przykład wyników: https://lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

ZMIANA: 64 w „s64” dla rozmiaru

Shawn Rebelo
źródło
1
To jest w porządku, ale nie zwraca, jeśli awatar jest domyślny lub przesłany przez prawdziwego użytkownika.
Miguel
4

Jeśli chcesz pokazać zdjęcie profilowe aktualnie zalogowanego użytkownika, nie musisz nawet znać {user_id}. Wystarczy użyć https://plus.google.com/s2/photos/profile/me.

Danny Ruijters
źródło
dzięki, ale niestety nie jest to dla aktualnie zalogowanego użytkownika
ArVana
Pytanie dotyczyło uzyskania zdjęcia profilowego za pomocą user_id. Nie ze mną
makki
3

Adres URL zdjęcia profilowego można uzyskać, korzystając z metody people.get interfejsu API Google+. Wymaga to dodatkowej podróży w obie strony, ale jest najbardziej niezawodnym sposobem uzyskania obrazu.

Z technicznego punktu widzenia możesz również użyć adresu URL, https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}który następnie przekieruje do końcowego adresu URL. {id}to identyfikator użytkownika Google lub jedna ze starych nazw użytkowników Profili Google (nadal istnieją dla użytkowników, którzy je mieli, ale nie sądzę, aby można było już tworzyć nowe). {size}to żądany rozmiar zdjęcia w pikselach. Jestem prawie pewien, że nie jest to udokumentowana, obsługiwana funkcja, więc nie polegałbym na niej w przypadku niczego ważnego, ponieważ może zniknąć w dowolnym momencie bez powiadomienia. Ale w przypadku szybkich prototypów lub małych jednorazowych aplikacji może wystarczyć.

Will Norris
źródło
Czy jest to gdzieś udokumentowane?
Jonas Alves,
tak, Justin wydaje się mieć rację… to już nie działa.
Will Norris
2

próba uzyskania dostępu do adresu URL / s2 / profile / photo działa dla większości użytkowników, ale nie dla wszystkich.

Jedyną metodą pełnego sprawdzenia jest użycie interfejsu API Google+. Nie potrzebujesz uwierzytelniania użytkownika, aby zażądać danych profilu publicznego, więc jest to dość prosta metoda:

  1. Uzyskaj klucz API Google+ na https://cloud.google.com/console

  2. Prześlij proste żądanie GET na adres : https://www.googleapis.com/plus/v1/people/+ <nazwa użytkownika>? Key =

Zwróć uwagę na znak + przed nazwą użytkownika. Jeśli zamiast tego używasz identyfikatorów użytkowników (długiego ciągu cyfr), nie potrzebujesz znaku +

  1. otrzymasz bardzo obszerną reprezentację danych profilu w formacie JSON, która obejmuje: "image": {"url": " https://lh4.googleusercontent.com/ ..... reszta adresu URL zdjęcia .... "}
Erwan
źródło
2

Jeśli używasz Fluttera, możesz uzyskać do niego dostęp przez people.googleapis.compunkt końcowy, kod używa google_sign_inbiblioteki

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

Dostaniesz coś takiego

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

gdzie urljest dostępny adres URL obrazu.

onmyway133
źródło
1

Próbowałem wszystkiego, co możliwe ... oto ostatni fragment działającego kodu. Mam nadzieję, że pomoże to komuś, kto go szuka.

    <?
$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
źródło
1

Rozwiązanie 2020 Prosimy o komentarz, jeśli nie jest już dostępny.

Aby uzyskać adres URL profilu od uwierzytelnionego użytkownika.

GET https://people.googleapis.com/v1/people/[THE_USER_ID_OF_THE_AUTHENTICATED_USER]?personFields=photos&key=[YOUR_API_KEY] HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json

Odpowiedź:

{
  "resourceName": "people/[THE_USER_ID_OF_THE_AUTHENTICATED_USER]",
  "etag": "12345",
  "photos": [
    {
      "metadata": {
        "primary": true,
        "source": {
          "type": "PROFILE",
          "id": "[THE_USER_ID_OF_THE_AUTHENTICATED_USER]"
        }
      },
      "url": "https://lh3.googleusercontent.com/a-/blablabla=s100"
    }
  ]
}

a link może służyć jako:

<img src="https://lh3.googleusercontent.com/a-/blablabla=s100">
Leandro
źródło
1
to nie jest tak proste, jak pozwala na to Facebook
Pooya Estakhri
Cóż, to prawda, ale weź pod uwagę, że Facebook API GRAPH 8.0 to kilka problemów, nie możesz odwołać się do obrazu, tylko pobrać go jako wymuszony lub uszkodzony obraz. Miałem jeszcze pytanie bez odpowiedzi :(
Leandro
@PooyaEstakhri nie w tym przypadku w tej odpowiedzi, ale jeśli pracujesz z ASP.NET Core 3.1, możesz uzyskać obraz z oświadczenia o obrazie, w końcu to zrobiłem.
Leandro
1
Testowałem teraz z uid zakresu aplikacji aplikacji z wersją 8, działa https://graph.facebook.com/1661794173890082/picture?width=200&height=200
Pooya Estakhri
1
zamieścił tam moją odpowiedź.
Pooya Estakhri
-4

Prosta odpowiedź: nie

Będziesz musiał zapytać API osoby i pobrać dane z profilu image.url, aby uzyskać zdjęcie. AFAIK, nie ma domyślnego formatu dla tego adresu URL, który zawiera identyfikator użytkownika.

Kolja
źródło
Jesteś pewien? Zastanawiam się, czy mają jakieś plany zrobienia czegoś takiego? W każdym razie dzięki.
ArVan
1
Jeśli spojrzysz na różne profile i spojrzysz na wynik html, np. Z "inspect element" w chrome, zobaczysz, że wszystkie są różne i nie zawierają identyfikatora użytkownika. Również w oficjalnych dokumentach nie ma nic.
Kolja
2
Możliwe jest zarówno pobranie obrazu, jak i ustawienie określonego rozmiaru do wyszukania. Zobacz moją odpowiedź poniżej.
Emil Stenström
Nie było to możliwe, gdy
pojawiło się