使用user_id获取Google+个人资料图片的网址


92

我知道许多社交网络API提供了一种使用用户的user_id或用户名来构建用户个人资料图片的网址的方法。对于Facebook,它看起来像这样:

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

现在Google Plus有类似的功能吗?或任何其他无需API调用即可获取用户图片的方式?


3
我打开了一个功能请求,如果Google实施过,您可以加注星标以获取更新。code.google.com/p/google-plus-platform/issues/detail?id=167
亚伯拉罕

这是另一种示例。例如,将您的StackOverflow风格嵌入您的Google+个人资料:goo.gl/8EE4LT
Lorenz Lo Sauer

Answers:


100

Google更改了政策,因此现在无法使用获取Google个人资料图片的旧方法,

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

执行此操作的新方法是

要求网址

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

这将提供json格式的Google个人资料图片网址,如下所示

回应:

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


可以从此处找到更多参数以发送带有URL的邮件

有关更多详细信息,您还可以检查给定的问题,我在哪里回答了相同类型的问题。 如何通过Google Plus中的用户ID获取用户图像?

快乐编码!


1
它仍然不是重定向,不能在<img>标记中使用
Kirill Kulakov 2014年

2
这就是为什么它用JSON格式提到的原因,因为您有更改,所以您无法理解它,所以您不能指望一切都能像@KirillKulakov之前一样工作
TheMohanAhuja 2014年

1
@rgoraya您无法在API调用中请求,但您可以肯定地添加带有图像URL的大小,即为.../-OkM...AANA/ltpH...as/photo.jpg?sz=512
TheMohanAhuja'4

1
我遇到了严重的请求错误,我应该在开发者控制台上启用什么api
Earwin delos Santos 2015年

3
有没有什么方法可以让我们在没有google plus api的情况下获取用户的个人资料图片,因为该图片将来会被弃用
Saurabh Verma

94

更新:自2015年以来,下面的方法不起作用

可以获取个人资料图片,甚至可以设置它的大小:

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

示例:我的个人资料图片,大小设置为100像素:

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

图片标签的用法:

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

希望你能正常工作!


1
是的,现在不工作,有人知道这是暂时性的问题还是永久性的问题?
塞西莉亚·阿巴迪

1
此方法不再起作用。给出404错误。我在Chrome,Safari,FireFox中进行了测试。
贾斯汀

2
我已经更新了答案,以反映上述方法自几天前起不起作用。
EmilStenström2014年

1
@CeciliaAbadie:您能确认您的方法仍然有效吗?尝试了几种变体,但无法使其与我的用户ID一起使用(请参见上面的答案)。你能?
EmilStenström2014年

2
@rgoraya:但是,如何自动计算xxxxxx部分?
EmilStenström2014年

47

更新:Google停止了对此方法的支持,该方法现在返回404(未找到)error


所有这些网址都会获取用户的个人资料图片:

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}

它们重定向到您从Google API获得的相同图像网址,这是
lh6.googleusercontent.com/-x1W2-XNKA-A/AAAAAAAAAAI/AAAAAAAAAAA/ooSNulbLz8U/photo.jpg 的丑陋链接

最简单的是直接使用像图像源:

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

否则,要获得与Google API调用完全相同的网址,您可以读取图像标头,
例如在PHP中:

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

使用PHP获取Google Plus个人资料图片中所述


1
无需为每个请求都发出HTTP请求,请参阅我的答案。
EmilStenström2012年

1
这在任何地方都有记录吗?
乔纳斯·阿尔维斯

1
尽管这很完美,但我不会采用这种方式,因为Google可能会停止支持此功能,因为我在任何地方都看不到官方文档
Lefteris 2013年

我在下面添加了完整的答案
Erwan 2013年

下面,我添加了一个新的解决方案,以按用户ID获取Google个人资料图片,这不会返回404错误,请检查一下。
Deepak Goswami 2014年

26

方法1 :(不再起作用)

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

方法2 :(每个请求都算在您的api速率限制中,这是每天1万个免费请求)

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

具有以下响应格式:

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

方法3 :(不需要api键)

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

在json响应中,您将获得一个名为“ gphoto $ thumbnail”的属性,其中包含个人资料图片网址,如下所示:

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

您可能会在网址中注意到“ s64-c”部分,这意味着图像大小为64,我尝试使用其他值(例如“ s100-c”)来工作。同样,如果删除“ s64-c”部分并附加“?sz = 100”参数,则该功能也将立即生效。尽管这不是获取gplus用户个人资料图片的好方法,但优点是它不需要任何api密钥。


在Approach2上,您知道如何通过API调用设置图像大小吗?
Maca 2014年

@Maca,您应该获得如下所示的api响应:{“ image”:{“ url”:“ lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50 ”}}}不同图像尺寸的sz参数
Masum 2014年

lol..google将不得不破解每个公共可用的图像链接,使其进入他们的API之下,使人们别无选择,只能获得API密钥。
user1323136 2014年

2
我想知道是否有类似picasaweb的东西,但是您直接从电子邮件而不是google +获取图片。我只遇到一个情况,该用户的Gmail帐户中有图片,但在Google +上没有个人资料,并且没有图片。只能得到这样一个URL lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/...
jose920405

2
picasaweb.google.com api已折旧,将在2019年1月关闭developers.google.com/picasa-web
siddhesh

11

Google,无需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'};

//输出示例:https : //lh3.googleusercontent.com/-2N6fRg5OFbM/AAAAAAAAAAI/AAAAAAAAADE/2-RmpExH6iU/s64-c/photo.jpg

更改:“ s64”中的64为大小


1
很好,但是如果头像是默认头像或真实用户上传的头像,则不会返回。
Miguel

4

如果要显示当前登录用户的个人资料图片,则无需知道{user_id}。只需使用https://plus.google.com/s2/photos/profile/me就足够了。


谢谢,但不幸的是,它不是针对当前登录用户的
ArVan 2013年

问题是关于使用user_id获取个人资料图片。不和我在一起
makki

3

您可以使用Google+ API 的people.get方法获取个人资料图片的网址。这确实需要额外的往返行程,但这是获取图像的最可靠方法。

从技术上讲,您也可以使用该URL https://s2.googleusercontent.com/s2/photos/profile/{id}?sz={size},然后将其重定向到最终URL。 {id}是Google用户ID或旧的Google个人资料用户名之一(拥有用户名的用户名仍然存在,但我认为您不能再创建新的用户名了)。 {size}是所需的照片尺寸(以像素为单位)。我几乎可以肯定这不是一个文档化的,受支持的功能,因此我不会依赖它做任何重要的事情,因为它可能会随时消失而不另行通知。但是对于快速原型或小的一次性应用来说,这可能就足够了。


这在任何地方都有记录吗?
乔纳斯·阿尔维斯

是的,贾斯汀似乎是对的...这不再起作用。
Will Norris 2014年

2

尝试访问/ s2 / profile / photo网址对大多数用户有效,但并非全部。

唯一的完整证明方法是使用Google+ API。您不需要用户身份验证即可请求公共配置文件数据,因此这是一种非常简单的方法:

  1. https://cloud.google.com/console上获取Google+ API密钥

  2. 向以下网址发出一个简单的GET请求:https : //www.googleapis.com/plus/v1/people/+ <用户名>?key =

注意用户名前的+。如果您改用用户ID(一长串数字),则不需要+

  1. 您将获得个人资料数据的非常全面的JSON表示形式,其中包括:“ image”:{“ url”:“ https://lh4.googleusercontent.com/ .....图片网址的其余部分...。 “}

2

如果使用Flutter,则可以通过people.googleapis.com端点访问它,代码使用google_sign_in

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

你会得到类似

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

url可访问的图片网址在哪里。


2

旧版Google+ API已于2019年3月7日关闭。最近对关闭计划进行了更改,这可能会减轻其对某些开发人员的影响。


1

尽一切可能..这是最后的工作代码。希望它对正在寻找它的人有所帮助。

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

简单答案:否

您将必须查询person API并获取个人资料image.url数据才能获取照片。AFAIK没有包含用户ID的网址的默认格式。


你确定?我想知道他们是否有计划制造这种东西?不管怎么说,还是要谢谢你。
2012年

1
如果您查看不同的配置文件并查看html输出,例如在chrome中带有“ inspect element”,您将看到它们都是不同的,并且不包含userID。官方文档也没有任何内容。
Kolja

2
既可以获取图像,也可以设置要查找的特定大小。请参阅下面的答案。
EmilStenström2012年

当问题和这个答案在何处张贴时,这是不可能的:)
ArVan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.