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

Posted

技术标签:

【中文标题】使用 user_id 获取 Google+ 个人资料图片网址【英文标题】:Getting Google+ profile picture url with user_id 【发布时间】:2012-02-26 01:46:18 【问题描述】:

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

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

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

【问题讨论】:

我打开了一个功能请求,如果 Google 实现了它,您可以加注星标以获取更新。 code.google.com/p/google-plus-platform/issues/detail?id=167 这是一个相反的例子。例如,在您的 Google+ 个人资料中嵌入您的 *** 天赋:goo.gl/8EE4LT 自 2012 年以来,这个问题的答案改变了太多次。我发布了一个在 2020 年有效的答案 - 不知道需要多少时间 :) 【参考方案1】:

2020 解决方案 如果不再可用,请发表评论。

为了从经过身份验证的用户那里获取个人资料 URL。

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

回复:


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

链接可以用作:

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

【讨论】:

它不像 facebook 允许的那样直接使用 tho 嗯,没错,但要考虑到Facebook API GRAPH 8.0 有几个问题,不能引用图片,只能作为强制或损坏的图片下载。我有一个问题没有回应:( 我现在使用 v8 应用的应用范围 uid 进行了测试,它可以工作 https://graph.facebook.com/1661794173890082/picture?width=200&amp;height=200 在那里发布了我的答案。 @PooyaEstakhri 它改变了。在任何情况下,我自己都使用代码将图像保存在我的服务器中,并在图片发生更改时更新。【参考方案2】:

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"
    

更多参数可以通过here找到您可能需要的URL发送

有关更多详细信息,您还可以查看我针对相同类型问题回答的给定问题 How to get user image through user id in Google plus?

【讨论】:

它仍然不是重定向,不能在&lt;img&gt;标签内使用 这就是为什么它以 JSON 格式提到的原因你不明白,因为有一些变化所以你不能指望一切都像@KirillKulakov 之前一样工作 @rgoraya 您不能在 API 调用中请求,但您肯定可以使用图像 URL 添加大小,您得到的是 .../-OkM...AANA/ltpH...as/photo.jpg?sz=512 我有一个错误的请求错误,我应该在我的开发者控制台上启用什么 api 有什么方法可以在没有 google plus api 的情况下获取用户的个人资料图片,因为它将来会被弃用【参考方案3】:

如果你使用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 是可访问的图片网址。

【讨论】:

【参考方案4】:

更新:自 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"  >

希望你能成功!

【讨论】:

是的,现在不工作,有人知道这是暂时性问题还是永久性问题? 此方法不再有效。给出 404 错误。我在 Chrome、Safari、FireFox 中进行了测试。 我已经更新了答案,以反映上述方法在几天前不起作用。 @CeciliaAbadie:你能确认你的方法仍然有效吗?尝试了几种变体,但无法使其与我的用户 ID 一起使用(请参阅上面的答案)。可以吗? @rgoraya:但是你如何自动计算xxxxxx部分?【参考方案5】:

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

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

【讨论】:

【参考方案6】:

谷歌,不需要 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 表示尺寸

【讨论】:

这很好,但如果头像是默认头像或真实用户上传的头像,则不会返回。【参考方案7】:

方法 1:(不再有效)

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

方法 2:(每个请求都计入您的 api 速率限制,即每天免费 10k 个请求)

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”的属性,其中包含个人资料图片 url,如下所示:

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

您可能会在 url 中注意到“s64-c”部分,这意味着图像大小为 64,我尝试使用其他值,例如“s100-c”并且它们有效。此外,如果您删除“s64-c”部分并附加“?sz=100”参数,那么现在也可以使用。虽然这不是获取 gplus 用户头像的好方法,但好处是不需要任何 api 密钥。

【讨论】:

在 Approach2 上,你知道如何通过 API 调用来设置图像大小吗? @Maca 你应该得到这样的 api 响应: "image": "url": "lh5.googleusercontent.com/-keLR5zGxWOg/.../photo.jpg?sz=50" 你可以在其中为不同的图像大小设置 sz 参数跨度> lol..google 将不得不破解每个公开可用的图像链接以进入他们的 API,这样人们别无选择,只能获取 API 密钥。 我想知道是否有类似 picasaweb 的东西,但您直接从电子邮件而不是 google + 获得图片。我只是有一个用户在您的 Gmail 帐户中有图像但在 google + 上没有个人资料并且没有带图像的情况。只能得到这样的url lh3.googleusercontent.com/-k10Va1BdzL8/AAAAAAAAAAA/AAAAAAAAAAA/… picasaweb.google.com api 已过时,将于 2019 年 1 月关闭 developers.google.com/picasa-web【参考方案8】:

更新:Google 停止支持此方法,现在返回 404(未找到)错误


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

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/AAAAAAAAAAAI/AAAAAAAAAA/ooSNulbLz8U/photo.jpg

最简单的就是直接使用like image source:

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

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

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

如文章 Fetch Google Plus Profile Picture using PHP 中所述。

【讨论】:

不需要对每个请求都进行HTTP请求,看我的回答。 这是否记录在任何地方? 虽然这很有效,但我不会这样做,因为谷歌可能会停止支持这一点,因为我在任何地方都看不到官方文档 我在下面添加了完整的证明答案 下面我添加了一个新的解决方案,通过用户 ID 获取 Google 个人资料图片,它不会返回 404 错误,请检查。【参考方案9】:

尝试访问 /s2/profile/photo 网址适用于大多数用户,但不是所有用户。

唯一的完整证明方法是使用 Google+ API。您不需要用户身份验证来请求公共个人资料数据,因此这是一种相当简单的方法:

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

    向https://www.googleapis.com/plus/v1/people/+?key=

    发出简单的 GET 请求

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

    您将获得一个非常全面的配置文件数据 JSON 表示,其中包括: "image":"url": "https://lh4.googleusercontent.com/..... 其余图片url...."

【讨论】:

【参考方案10】:

如果您想显示当前登录用户的头像,您甚至不需要知道 user_id。只需使用https://plus.google.com/s2/photos/profile/me 就足够了。

【讨论】:

谢谢,但不幸的是它不适用于当前登录的用户 问题是关于使用 user_id 获取个人资料图片。不是与【参考方案11】:

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

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

【讨论】:

这是否记录在任何地方? 是的,贾斯汀似乎是对的......这不再有效。【参考方案12】:

简单的答案:没有

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

【讨论】:

你确定吗?我想知道他们是否有计划做这样的事情?无论如何,谢谢。 如果您查看不同的配置文件并查看 html 输出,例如使用 chrome 中的“检查元素”,您会看到它们都是不同的,并且不包含用户 ID。官方文档上也没有任何内容。 既可以获取图像,也可以设置要查找的特定大小。请参阅下面的答案。 当问题和这个答案发布时是不可能的:)

以上是关于使用 user_id 获取 Google+ 个人资料图片网址的主要内容,如果未能解决你的问题,请参考以下文章

使用 facebook graph API v3.2 从其他 user_id 获取数据

fetch 和 $.getjson 之间的区别

从 google plus 个人资料中获取经验值和等级或从 google plus 个人资料中获取数据

iOS Google 登录无法获取用户个人资料图片?(不是 Google 加号登录)

获取 twitter 和 google+ 个人资料图片?

如何使用 smack API 从 Google Talk 获取我的个人资料图片?