Nhận url ảnh hồ sơ trên Google+ với user_id


92

Tôi biết rằng nhiều API mạng xã hội cung cấp cách tạo url cho ảnh hồ sơ của người dùng, sử dụng user_id hoặc tên người dùng của họ. Đối với Facebook, nó trông như thế này:

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

Bây giờ có cái gì đó tương tự như thế này cho Google Plus không? Hoặc bất kỳ cách nào khác để lấy ảnh của người dùng mà không cần lệnh gọi API ??


3
Tôi đã mở một yêu cầu tính năng mà bạn có thể gắn dấu sao để nhận các bản cập nhật nếu Google triển khai nó. code.google.com/p/google-plus-platform/issues/detail?id=167
abraham

Đây là một ví dụ cho cách khác. Nhúng ví dụ flair StackOverflow của bạn trong Tiểu sử trên Google+ của bạn: goo.gl/8EE4LT
Lorenz Lo Sauer

Câu trả lời:


100

Google đã thay đổi chính sách của họ nên cách cũ để lấy hình ảnh hồ sơ trên Google sẽ không hoạt động bây giờ, đó là

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

Cách mới để làm điều này là

Yêu cầu URL

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

Điều đó sẽ cung cấp cho url hình ảnh hồ sơ trên Google ở ​​định dạng json như được cung cấp bên dưới

Phản ứng :

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


Có thể tìm thấy nhiều thông số khác để gửi cùng với URL mà bạn có thể cần từ đây

Để biết thêm chi tiết, bạn cũng có thể kiểm tra câu hỏi đã cho mà tôi đã trả lời cho cùng một loại vấn đề Làm thế nào để lấy hình ảnh người dùng thông qua id người dùng trong Google plus?

Mã hóa vui vẻ !!


1
Nó vẫn không phải là một chuyển hướng, nó không thể được sử dụng trong một <img>thẻ
Kirill Kulakov

2
Đó là lý do đề cập nó ở định dạng JSON bạn không nhận được rằng, kể từ khi có sự thay đổi nên bạn không thể mong đợi tất cả mọi thứ để làm việc theo trước @KirillKulakov
TheMohanAhuja

1
@rgoraya bạn không thể yêu cầu trong lệnh gọi API nhưng bạn chắc chắn có thể thêm kích thước bằng URL hình ảnh, mà bạn đã có.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja

1
tôi có một lỗi yêu cầu xấu, những gì api tôi nên cho phép nhà phát triển trên giao diện điều khiển của tôi
Earwin Delos Santos

3
Có cách nào để chúng tôi có thể lấy ảnh hồ sơ của người dùng mà không cần google plus api vì nó sẽ không được dùng nữa trong tương lai không
Saurabh Verma

94

CẬP NHẬT: Phương pháp dưới đây KHÔNG HOẠT ĐỘNG kể từ năm 2015

Có thể lấy ảnh hồ sơ và thậm chí bạn có thể đặt kích thước của nó:

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

Ví dụ: Ảnh hồ sơ của tôi, với kích thước được đặt thành 100 pixel:

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

Cách sử dụng với thẻ hình ảnh:

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

Hy vọng bạn làm cho nó hoạt động!


1
Có, không hoạt động ngay bây giờ, có ai biết đó là vấn đề tạm thời hay vĩnh viễn không?
Cecilia Abadie

1
Phương pháp này không còn hoạt động. Đưa ra lỗi 404. Tôi đã thử nghiệm trong Chrome, Safari, FireFox.
Justin

2
Tôi đã cập nhật câu trả lời để phản ánh rằng phương pháp trên không hoạt động sau một vài ngày trở lại đây.
Emil Stenström

1
@CeciliaAbadie: Bạn có thể xác nhận rằng phương pháp của bạn vẫn hoạt động không? Đã thử một số biến thể nhưng không thể làm cho nó hoạt động với id người dùng của tôi (xem câu trả lời ở trên). Bạn có thể?
Emil Stenström

2
@rgoraya: Nhưng làm thế nào để bạn tính phần xxxxxx tự động?
Emil Stenström

47

CẬP NHẬT: Google đã ngừng hỗ trợ cho phương pháp này, hiện trả về lỗi 404 (không tìm thấy) .


Tất cả các url này tìm nạp ảnh hồ sơ của người dùng:

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}

Chúng chuyển hướng đến cùng một url hình ảnh mà bạn nhận được từ Google API, một liên kết xấu xí như
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg

Đơn giản nhất là sử dụng trực tiếp như nguồn ảnh:

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

Nếu không, để lấy chính xác cùng một url của lệnh gọi API Google, bạn có thể đọc các tiêu đề hình ảnh,
ví dụ: trong PHP:

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

như được mô tả trong bài viết Tìm nạp ảnh hồ sơ trên Google Plus bằng PHP .


1
Không cần thực hiện yêu cầu HTTP cho mỗi yêu cầu, hãy xem câu trả lời của tôi.
Emil Stenström

1
Điều này có được ghi lại ở bất cứ đâu không?
Jonas Alves

1
Mặc dù điều này hoạt động hoàn hảo, tôi sẽ không đi theo con đường này, vì google chỉ đơn giản là có thể ngừng hỗ trợ này, vì tôi không thấy bất cứ nơi nào một tài liệu chính thức
Lefteris

Tôi đã thêm một bằng chứng câu trả lời đầy đủ dưới đây
Erwan

Dưới đây tôi đã thêm một giải pháp mới để lấy ảnh hồ sơ trên Google theo id người dùng, giải pháp này không trả về lỗi 404, vui lòng kiểm tra điều đó.
Deepak Goswami vào

26

Phương pháp 1: (không còn hoạt động)

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

Phương pháp 2: (mỗi yêu cầu được tính trong giới hạn tỷ lệ api của bạn, là 10k yêu cầu miễn phí mỗi ngày)

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

với định dạng phản hồi sau:

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

Cách tiếp cận 3: (không yêu cầu khóa api)

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

trong phản hồi json, bạn nhận được một thuộc tính có tên "gphoto $ thumbnail", chứa url ảnh hồ sơ như sau:

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

Bạn có thể nhận thấy trong url phần "s64-c" có nghĩa là kích thước hình ảnh là 64, tôi đã thử sử dụng các giá trị khác như "s100-c" và chúng đã hoạt động. Ngoài ra, nếu bạn xóa phần "s64-c" và thêm thông số "? Sz = 100", thì thông số đó cũng sẽ hoạt động kể từ bây giờ. Mặc dù đây không phải là cách tốt để lấy ảnh hồ sơ của người dùng gplus, nhưng ưu điểm là nó không yêu cầu bất kỳ khóa api nào.


Trên Approach2, bạn đã tìm ra cách đặt kích thước hình ảnh bằng lệnh gọi API chưa?
Maca

@Maca, bạn sẽ nhận được phản hồi api như sau: {"image": {"url": " lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 "}} từ nơi bạn có thể đặt thông số sz cho các kích thước hình ảnh khác nhau
Masum

lol..google sẽ phải hack mọi liên kết hình ảnh có sẵn công khai để nằm dưới API của họ để mọi người không có lựa chọn nào khác ngoài việc lấy khóa API.
dùng1323136

2
Tôi tự hỏi nếu có một cái gì đó giống như picasaweb nhưng bạn lấy hình ảnh trực tiếp từ email chứ không phải google +. Tôi vừa gặp trường hợp người dùng có hình ảnh trong tài khoản Gmail của bạn nhưng không có hồ sơ trên google + và không mang hình ảnh. Chỉ có thể nhận một url như thế này lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/…
jose920405

2
picasaweb.google.com api được depriciated và sẽ được tắt theo Tháng 1 2019 developers.google.com/picasa-web
siddhesh

11

Google, không cần 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'};

// Ví dụ về kết quả đầu ra: https://lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

THAY ĐỔI: 64 in "s64" cho kích thước


1
Điều này là tốt, nhưng không trả lại nếu hình đại diện là mặc định hoặc một người dùng thực đã tải lên.
Miguel

4

Nếu bạn muốn hiển thị ảnh hồ sơ cho người dùng hiện đang đăng nhập, bạn thậm chí không cần biết {user_id}. Chỉ cần sử dụng https://plus.google.com/s2/photos/profile/mesẽ là đủ.


cảm ơn, nhưng tiếc là nó không cho hiện đăng nhập người dùng
ArVan

Câu hỏi là về việc lấy ảnh hồ sơ bằng user_id. Not with the me
makki

3

Bạn có thể lấy URL cho hình ảnh hồ sơ bằng phương pháp people.get của API Google+. Điều đó đòi hỏi phải có thêm một chuyến đi khứ hồi, nhưng là cách đáng tin cậy nhất để có được hình ảnh.

Về mặt kỹ thuật, bạn cũng có thể sử dụng URL https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size}mà sau đó sẽ chuyển hướng đến URL cuối cùng. {id}là ID người dùng Google hoặc một trong những tên người dùng cũ trên Tiểu sử trên Google (chúng vẫn tồn tại đối với những người dùng đã có chúng, nhưng tôi không nghĩ bạn có thể tạo tên mới nữa). {size}là kích thước mong muốn của ảnh tính bằng pixel. Tôi gần như chắc chắn rằng đây không phải là một tính năng được tài liệu hóa, được hỗ trợ, vì vậy tôi sẽ không dựa vào nó cho bất cứ điều gì quan trọng vì nó có thể biến mất bất cứ lúc nào mà không cần thông báo. Nhưng đối với các nguyên mẫu nhanh hoặc các ứng dụng nhỏ một lần, nó có thể là đủ.


Điều này có được ghi lại ở bất cứ đâu không?
Jonas Alves

vâng, Justin có vẻ đúng ... điều này không còn hiệu quả nữa.
Sẽ Norris

2

cố gắng truy cập url / s2 / profile / photo hoạt động với hầu hết người dùng nhưng không phải tất cả.

Phương pháp chứng minh đầy đủ duy nhất là sử dụng API Google+. Bạn không cần xác thực người dùng để yêu cầu dữ liệu hồ sơ công khai, vì vậy đây là một phương pháp khá đơn giản:

  1. Nhận khóa API Google+ trên https://cloud.google.com/console

  2. Thực hiện một yêu cầu GET đơn giản tới: https://www.googleapis.com/plus/v1/people/+ <tên người dùng>? Key =

Lưu ý dấu + trước tên người dùng. Nếu bạn sử dụng id người dùng thay thế (chuỗi chữ số dài), bạn không cần dấu +

  1. bạn sẽ nhận được bản trình bày JSON rất toàn diện của dữ liệu hồ sơ bao gồm: "image": {"url": " https://lh4.googleusercontent.com/ ..... phần còn lại của url hình ảnh .... "}

2

Nếu bạn sử dụng Flutter, thì bạn có thể truy cập nó qua people.googleapis.comđiểm cuối, mã sử dụng google_sign_inthư viện

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

Bạn sẽ nhận được một cái gì đó giống như

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

đâu urllà url hình ảnh có thể truy cập.


2

Các API Google+ kế thừa đã ngừng hoạt động kể từ ngày 7 tháng 3 năm 2019. Các thay đổi đối với kế hoạch ngừng hoạt động đã được thực hiện gần đây có thể làm giảm ảnh hưởng của nó đối với một số nhà phát triển.


1

Đã thử mọi thứ có thể .. đây là đoạn mã làm việc cuối cùng. Hy vọng nó sẽ giúp một ai đó đang tìm kiếm nó.

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

Câu trả lời đơn giản: Không

Bạn sẽ phải truy vấn API người đó và lấy dữ liệu profile image.url để lấy ảnh. AFAIK không có định dạng mặc định cho url đó có chứa userID.


Bạn chắc chắn? Tôi tự hỏi liệu họ có kế hoạch nào để làm điều đó không? Dẫu sao cũng xin cảm ơn.
ArVan

1
Nếu bạn nhìn vào các cấu hình khác nhau và nhìn vào đầu ra html, ví dụ như với "phần tử kiểm tra" trong chrome, bạn sẽ thấy rằng tất cả chúng đều khác nhau và không chứa userID. Ngoài ra không có gì trên tài liệu chính thức.
Kolja

2
Có thể, cả hai để lấy hình ảnh và đặt một kích thước cụ thể để tìm kiếm. Xem câu trả lời của tôi dưới đây.
Emil Stenström

Đó là không thể khi các câu hỏi và câu trả lời này, nơi đăng tải :)
ArVan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.