User_id ile Google+ profil resmi url'si alınıyor


94

Birçok sosyal ağ API'sinin, user_id veya kullanıcı adlarını kullanarak bir kullanıcının profil resmine bir url oluşturmanın bir yolunu sağladığını biliyorum. Facebook için şuna benzer:

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

Şimdi Google Plus için buna benzer bir şey var mı? Veya API çağrısı olmadan kullanıcının resmini almanın başka bir yolu?


3
Google bunu uygularsa, güncellemeleri almak için yıldız verebileceğiniz bir özellik isteği açtım. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham

İşte tam tersi için bir örnek. Örneğin StackOverflow yeteneğinizi Google+ Profilinize yerleştirme: goo.gl/8EE4LT
Lorenz Lo Sauer

Bu sorunun cevabı 2012'den beri pek çok kez değişti. 2020'de işe yarayan bir cevap gönderdim - ne kadar zaman geçtiğini bilmiyorum :)
Leandro

Yanıtlar:


100

Google, politikasını değiştirdi, bu nedenle Google profil resmini almanın eski yolu artık çalışmayacaktır.

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

Bunu yapmanın yeni yolu

URL iste

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

Bu, Google profil resmi url'sini aşağıda verildiği gibi json biçiminde verecektir.

Tepki :

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

Buradan ihtiyacınız olabilecek URL ile göndermek için daha fazla parametre bulunabilir.

Daha fazla ayrıntı için, aynı tür soruna cevap verdiğim verilen soruyu da kontrol edebilirsiniz . Google plus'ta kullanıcı kimliği aracılığıyla kullanıcı resmi nasıl alınır?


2
Hala bir yönlendirme değil, bir <img>etiket içinde kullanılamaz
Kirill Kulakov

2
bu yüzden JSON formatında bahsedildiği için bunu anlamadınız, çünkü değişiklikler var, bu yüzden her şeyin daha önce olduğu gibi çalışmasını bekleyemezsiniz @KirillKulakov
TheMohanAhuja

1
@rgoraya API çağrısında talep edemezsiniz, ancak kesinlikle aldığınız resim URL'si ile boyut ekleyebilirsiniz.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja

1
hatalı bir istek hatası alıyorum, geliştirici konsolumda
hangi api'yi

3
gelecekte kullanımdan kaldırılacağı için google plus api olmadan kullanıcının profil resmini alabileceğimiz bir yol var mı
Saurabh Verma

94

GÜNCELLEME: Aşağıdaki yöntem 2015'ten beri ÇALIŞMIYOR

Profil resmini almak mümkündür ve boyutunu bile ayarlayabilirsiniz:

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

Örnek: Boyutu 100 piksele ayarlanmış profil resmim:

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

Bir resim etiketi ile kullanım:

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

Umarım çalıştırırsın!


1
Evet, şu anda çalışmıyorum, bunun geçici mi yoksa kalıcı mı olduğunu bilen var mı?
Cecilia Abadie

1
Bu yöntem artık çalışmıyor. 404 hatası verir. Chrome, Safari, FireFox'ta test ettim.
Justin

2
Cevabı, yukarıdaki yöntemin birkaç gün önce çalışmadığını yansıtacak şekilde güncelledim.
Emil Stenström

1
@CeciliaAbadie: Metodunuzun hala çalıştığını onaylayabilir misiniz? Birkaç varyasyon denedim ancak kullanıcı kimliğimle çalışmasını sağlayamadım (yukarıdaki yanıta bakın). Yapabilir misin?
Emil Stenström

2
@rgoraya: Ama xxxxxx bölümünü otomatik olarak nasıl hesaplıyorsunuz?
Emil Stenström

48

GÜNCELLEME: Google, artık 404 (bulunamadı) hatası veren bu yöntem için desteği durdurdu .


Tüm bu url'ler bir kullanıcının profil resmini getirir:

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}


Lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAI/AAAAAAAAAA/ooSNulbLz8U/photo.jpg gibi çirkin bir bağlantı olan Google API'den aldığınız aynı resim url'sine yönlendirirler.

En basit olanı, doğrudan görüntü kaynağı gibi kullanmaktır:

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

Aksi takdirde, bir Google API çağrısının tam olarak aynı url'sini elde etmek
için resim başlıklarını okuyabilirsiniz, örneğin PHP'de:

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

PHP kullanarak Google Plus Profil Resmini Getirme makalesinde açıklandığı gibi .


1
Her istek için HTTP isteğinde bulunmanıza gerek yok, cevabıma bakın.
Emil Stenström

1
Bu herhangi bir yerde belgelendi mi?
Jonas Alves

1
Bu mükemmel çalışıyor olsa da google sadece bu destek durabilir olarak, ben her yerde resmi bir belgelerine göremiyorsanız, bu şekilde gitmek olmaz
Lefteris

Aşağıya tam bir kanıt cevabı ekledim
Erwan

Aşağıda 404 hatası döndürmeyen kullanıcı kimliğine göre Google profil resmini almak için yeni bir çözüm ekledim, lütfen kontrol edin.
Deepak Goswami

26

Yaklaşım 1: (artık çalışmıyor)

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

Yaklaşım 2: (her istek, ücretsiz olarak günde 10.000 istek olan API oranı sınırlarınızda sayılır)

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

aşağıdaki yanıt biçimiyle:

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

Yaklaşım 3: (api anahtarı gerekmez)

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

json yanıtında, aşağıdaki gibi profil resmi url'sini içeren "gphoto $ thumbnail" adlı bir özellik elde edersiniz:

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

URL'de görüntü boyutunun 64 olduğu anlamına gelen "s64-c" bölümünü fark edebilirsiniz, "s100-c" gibi diğer değerleri kullanmayı denedim ve işe yaradılar. Ayrıca "s64-c" bölümünü kaldırırsanız ve "? Sz = 100" parametresini eklerseniz, bu da şu andan itibaren çalışacaktır. Bu, bir gplus kullanıcısının profil resmini elde etmenin pek iyi bir yolu olmasa da, avantaj, herhangi bir api anahtarı gerektirmemesidir.


Approach2'de API çağrısı ile görüntü boyutunu nasıl ayarlayacağınızı buldunuz mu?
Maca

@Maca api yanıtını şu şekilde almalısınız: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}} ayarlayabileceğiniz yerden farklı görüntü boyutları için sz parametresi
Masum

lol..google, insanların bir API anahtarı almaktan başka seçenekleri kalmaması için API'larının altına girmek için herkese açık her resim bağlantısını kesmek zorunda kalacak.
user1323136

2
Picasaweb gibi bir şey var mı merak ediyorum ama resmi doğrudan e-postadan alırsınız, google + 'dan değil. Gmail hesabınızda bir resmi olan, ancak google + 'da profili olmayan ve resim getirmeyen bir kullanıcı durumum var. Yalnızca bunun gibi bir url alabilir lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405

2
picasaweb.google.com api kullanımdan kaldırıldı ve Ocak 2019 geliştiricileri.google.com
picasa

11

Google, API gerekmez:

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

// Çıktı örneği: https://lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

DEĞİŞTİRME: boyut için "s64" deki 64


1
Bu sorun değil, ancak avatar varsayılansa veya gerçek bir kullanıcı yüklediyse geri dönmez.
Miguel

4

O anda oturum açmış olan kullanıcı için profil resmini göstermek istiyorsanız, {user_id} bilgisine sahip olmanıza bile gerek yoktur. Basitçe kullanmak https://plus.google.com/s2/photos/profile/meyeterli olacaktır.


teşekkürler ama ne yazık ki akım için değil kullanıcı giriş yapmış
Arvan

Soru, user_id kullanarak profil resmini almakla ilgiliydi. Benimle
makki

3

Profil resminin URL'sini Google+ API'sinin people.get yöntemini kullanarak alabilirsiniz . Bu, fazladan bir gidiş-dönüş gerektirir, ancak görüntüyü elde etmenin en güvenilir yoludur.

Teknik olarak, https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}daha sonra nihai URL'ye yönlendirecek olan URL'yi de kullanabilirsiniz . {id}Google kullanıcı kimliği veya eski Google Profilleri kullanıcı adlarından biridir (bunlar hâlâ onlara sahip olan kullanıcılar için mevcuttur, ancak artık yenilerini oluşturabileceğinizi sanmıyorum). {size}fotoğrafın piksel cinsinden istenen boyutudur. Bunun belgelenmiş, desteklenen bir özellik olmadığından neredeyse eminim , bu nedenle herhangi bir zamanda bildirimde bulunmaksızın ortadan kalkabileceği için önemli herhangi bir şey için ona güvenmem. Ancak hızlı prototipler veya küçük tek seferlik uygulamalar için yeterli olabilir.


Bu herhangi bir yerde belgelendi mi?
Jonas Alves

evet, Justin haklı görünüyor ... bu artık işe yaramıyor.
Will Norris

2

/ s2 / profile / photo url'ye erişmeye çalışmak çoğu kullanıcı için çalışır, ancak hepsi için değil.

Tam kanıtlama yöntemi Google+ API kullanmaktır. Genel profil verilerini istemek için kullanıcı kimlik doğrulamasına ihtiyacınız yoktur, bu nedenle bu oldukça basit bir yöntemdir:

  1. Https://cloud.google.com/console adresinden bir Google+ API anahtarı edinin

  2. Https://www.googleapis.com/plus/v1/people/+ <kullanıcı adı>? Key = için basit bir GET isteğinde bulunun

Kullanıcı adının önündeki + işaretine dikkat edin. Bunun yerine kullanıcı kimliklerini kullanırsanız (uzun rakam dizisi), +

  1. "image": {"url": " https://lh4.googleusercontent.com/ ..... resmin geri kalan url'si .... içeren profil verilerinin çok kapsamlı bir JSON temsilini alacaksınız. "}

2

Flutter kullanıyorsanız, ona people.googleapis.comuç nokta aracılığıyla erişebilirsiniz , kod google_sign_inkitaplığı kullanır

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

Gibi bir şey alacaksın

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

urlerişilebilir bir resim url'si nerede .


1

Mümkün olan her şeyi denedim .. İşte çalışma kodunun son parçası. Umarım onu ​​arayan birine yardımcı olur.

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

1

2020 Çözüm Lütfen artık mevcut değilse yorum yapın.

Kimliği doğrulanmış kullanıcıdan profil URL'si almak için.

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

Tepki:

{
  "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"
    }
  ]
}

ve bağlantı şu şekilde kullanılabilir:

<img src="https://lh3.googleusercontent.com/a-/blablabla=s100">

1
facebook'un
tho'yu

Evet, doğru, ancak Facebook API GRAPH 8.0'ı göz önünde bulundurun birkaç sorun var, resme referans veremezsiniz, yalnızca kuvvetli veya bozuk resim olarak indirin. Henüz yanıtsız bir sorum vardı :(
Leandro

@PooyaEstakhri bu cevapta bu durumda değil ama ASP.NET Core 3.1 ile çalışıyorsanız, resim iddiasından görüntü alabilirsiniz, sonunda yaptığım şey buydu.
Leandro

1
şimdi v8 ile bir uygulamanın uygulama kullanıcı https://graph.facebook.com/1661794173890082/picture?width=200&height=200
kimliği

1
cevabımı orada yayınladı.
Pooya Estakhri

-4

Basit cevap: Hayır

Fotoğrafı almak için kişi API'sini sorgulamanız ve profil image.url verilerini almanız gerekecektir . AFAIK, kullanıcı kimliğini içeren bu url için varsayılan bir biçim yoktur.


Eminsin? Acaba böyle bir şey yapma planları var mı? Yine de teşekkürler.
ArVan

1
Farklı profillere bakarsanız ve html çıktısına örneğin chrome "inspect element" ile bakarsanız, hepsinin farklı olduğunu ve userID'yi içermediğini göreceksiniz. Ayrıca resmi belgelerde hiçbir şey yok.
Kolja

2
Hem görüntüyü elde etmek hem de aramak için belirli bir boyut ayarlamak mümkündür. Aşağıdaki cevabıma bakın.
Emil Stenström

Soru ve bu cevap gönderildiğinde mümkün olmadı :)
ArVan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.